맨위로가기

단일 책임 원칙

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

단일 책임 원칙(Single Responsibility Principle, SRP)은 로버트 C. 마틴이 제시한 객체 지향 설계 원칙 중 하나로, 클래스나 모듈은 변경해야 할 이유가 단 하나여야 한다는 개념이다. 이는 톰 드마코와 메일러 페이지-존스의 응집도 원칙에 기반한다. 이 원칙은 코드의 견고성을 높이고, 보고서 컴파일 및 출력 모듈과 같은 예시에서 서로 다른 변경 이유를 가진 책임을 분리하여 설계의 유연성을 향상시키는 데 기여한다.

더 읽어볼만한 페이지

  • 프로그래밍 원칙 - 블랙박스
    블랙 박스는 자극 입력과 출력 반응의 관점에서 시스템을 추상화하여 외부적으로 관찰하는 이론으로, 전자 회로 이론, 사이버네틱스, 시스템 이론 등 다양한 분야에서 활용되며 예측 모델 구축 및 유효성 검증, 그리고 항공기 비행 기록 장치나 함수 교육 도구 등 실생활에도 응용된다.
  • 프로그래밍 원칙 - 정보 은닉
    정보 은닉은 소프트웨어 설계에서 모듈 내부 구현을 숨기고 정의된 인터페이스를 통해서만 상호 작용하도록 하여 모듈 독립성을 높이고 시스템 복잡성을 관리하는 데 중요한 기법으로, 객체 지향 프로그래밍의 캡슐화와 관련된다.
  • 소프트웨어 설계 - 구조적 분석
    구조적 분석은 1960년대에서 1980년대 소프트웨어 개발의 복잡성을 해결하기 위해 개발된 기법으로, 다이어그램과 데이터 사전을 활용하여 시스템을 분석하고 설계했으며, 객체 지향 프로그래밍의 등장으로 활용도가 감소했다.
  • 소프트웨어 설계 - 지속적 배포
    지속적 배포(CD)는 소프트웨어 릴리스 프로세스를 자동화하는 접근 방식이며, 배포 파이프라인을 통해 구현되고 시장 출시 시간 단축, 제품 품질 향상 등의 이점을 제공하지만 테스트 자동화 부족 등의 과제도 존재한다.
단일 책임 원칙
단일 책임 원칙
정의모든 클래스는 단 하나의 책임을 가져야 하며, 클래스를 변경하는 이유는 단 하나여야 한다.
설명객체 지향 프로그래밍에서, 단일 책임 원칙은 모든 모듈 또는 클래스는 프로그램에서 단 하나의 기능만을 담당해야 한다고 말한다. 여기서 책임은 변경의 이유로 정의될 수 있다. 즉, 모듈이나 클래스가 변경될 이유가 두 개 이상이라면, 그 모듈이나 클래스는 여러 책임을 가지고 있는 것이다.
목표높은 응집도와 낮은 결합도를 달성하는 것.
중요성클래스의 유지보수성을 높인다.
클래스의 재사용성을 높인다.
클래스의 복잡성을 줄인다.
예시클래스가 사용자 인터페이스와 데이터베이스 접근 모두를 처리하는 경우.
클래스가 여러 종류의 보고서를 생성하는 경우.
해결책클래스를 더 작은 클래스로 분할하여 각 클래스가 단 하나의 책임을 갖도록 한다.
관련 용어응집도
결합도
객체 지향 프로그래밍
같이 보기SOLID

2. 역사

로버트 C. 마틴은 "단일 책임 원칙"이라는 용어를 그의 저서 ''객체 지향 설계의 원칙''의 일부인 "OOD의 원칙" 기사에서 처음 소개했으며,[5] 2003년 저서 ''애자일 소프트웨어 개발, 원칙, 패턴 및 실천''을 통해 대중화했다.[6] 마틴은 이 원칙이 톰 드마코의 ''구조적 분석과 시스템 명세'',[7] 메일러 페이지-존스의 ''구조적 시스템 설계 실무 가이드''에서[8] 설명된 응집도 원칙에 기반한다고 설명했다. 2014년 마틴은 "단일 책임 원칙"이라는 제목의 블로그 게시물을 게시하여 "변경 이유"라는 문구의 의미를 명확히 하려고 했다.

3. 개념

마틴은 책임이란 변경할 이유이며, 모듈을 변경하는 이유는 단 하나여야 한다고 정의했다. 모듈을 변경하는 이유를 하나로 제한하는 목적은 모듈의 견고성을 높이는 것이다.[1]

예를 들어 보고서를 작성하고 그리는 모듈을 가정해 보자. 이 모듈은 보고서 내용을 변경하고 싶을 때나 보고서 형식을 변경하고 싶을 때 변경해야 한다. 이 두 가지 변경은 각각 다른 주체에 의해 이루어진다. 따라서 이 모듈은 변경할 이유, 즉 책임을 여러 개 가지고 있으며, 이들을 결합하는 설계는 단일 책임 원칙에 위배된다. 보고서 내용 변경에 따라 보고서 작성 구현을 수정할 경우, 보고서를 그리는 처리에도 영향이 미칠 가능성이 있다.[1]

3. 1. 예시

마틴은 책임을 "변경해야 할 이유"로 정의하며, 클래스나 모듈은 변경(예: 재작성)해야 할 이유가 하나만 있어야 한다고 결론 내린다.

예를 들어, 보고서를 컴파일하고 출력하는 모듈을 생각해 보자. 이러한 모듈은 두 가지 이유로 변경될 수 있다. 첫째, 보고서의 내용이 변경될 수 있다. 둘째, 보고서의 형식이 변경될 수 있다. 이 두 가지는 다른 원인으로 인해 변경된다. 단일 책임 원칙은 문제의 이러한 두 가지 측면이 실제로 두 개의 별도 책임이며, 따라서 별도의 클래스나 모듈에 있어야 한다고 말한다. 다른 이유로 다른 시기에 변경되는 두 가지를 결합하는 것은 좋지 않은 설계이다.

클래스가 단일 관심사에 집중하는 것이 중요한 이유는 클래스를 더 견고하게 만들기 때문이다. 위의 예시를 계속해서, 보고서 컴파일 프로세스에 변경이 있는 경우, 인쇄 코드가 동일한 클래스의 일부라면 인쇄 코드가 고장 날 위험이 더 크다.

4. 장점

마틴은 책임을 "변경해야 할 이유"로 정의하며, 클래스나 모듈은 변경(예: 재작성)해야 할 이유가 하나만 있어야 한다고 결론 내린다.[1]

예를 들어, 보고서를 컴파일하고 출력하는 모듈을 생각해 보자. 이러한 모듈은 보고서의 내용이나 형식, 두 가지 이유로 변경될 수 있다. 이 두 가지는 서로 다른 원인으로 인해 변경된다. 단일 책임 원칙은 문제의 이러한 두 가지 측면이 실제로 두 개의 별도 책임이며, 따라서 별도의 클래스나 모듈에 있어야 한다고 말한다. 서로 다른 이유로 다른 시기에 변경되는 두 가지를 결합하는 것은 좋지 않은 설계이다.[1]

클래스가 단일 관심사에 집중하는 것이 중요한 이유는 클래스를 더 견고하게 만들기 때문이다. 보고서 컴파일 프로세스에 변경이 있는 경우, 인쇄 코드가 동일한 클래스에 있으면 인쇄 코드가 고장날 위험이 더 크다.[1]

참조

[1] 서적 Clean architecture : a craftsman's guide to software structure and design https://www.worldcat[...] 2018
[2] 서적 Agile Software Development, Principles, Patterns, and Practices https://books.google[...] Prentice Hall
[3] 웹사이트 The Single Responsibility Principle https://blog.cleanco[...]
[4] 서적 Clean Architecture: A Craftsman's Guide to Software Structure and Design https://books.google[...] Prentice Hall
[5] 웹사이트 The Principles of OOD http://www.butuncleb[...]
[6] Harvb
[7] 서적 Structured Analysis and System Specification https://archive.org/[...] Prentice Hall
[8] 서적 The Practical Guide to Structured Systems Design Yourdon Press Computing Series
[9] 서적 Agile Software Development, Principles, Patterns, and Practices https://books.google[...] Prentice Hall 2022-07-10
[10] 웹사이트 The Single Responsibility Principle https://8thlight.com[...] 2022-07-10
[11] 서적 Clean Architecture: A Craftsman's Guide to Software Structure and Design https://books.google[...] Prentice Hall
[12] 웹사이트 The Principles of OOD http://www.butuncleb[...] 2022-07-10
[13] Harvb
[14] 서적 Structured Analysis and System Specification https://archive.org/[...] Prentice Hall
[15] 서적 The Practical Guide to Structured Systems Design Yourdon Press Computing Series
[16] 서적
[17] URL http://www.butuncleb[...]
[18] 서적 https://archive.org/[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com