단일 책임 원칙

Jmnote (토론 | 기여)님의 2022년 7월 11일 (월) 16:19 판

1 개요

single-responsibility principle (SRP)
단일 책임 원칙, 단일 책임의 원리
  • SOLID의 하나
  • 한 클래스가 하나의 일만 잘하게 하자.
  • 하나의 클래스는 하나의 역할만 담당시킨다.
  • 각 객체가 하나의 책임에만 집중하게 한다.
  • 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다.
  • 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.
  • SRP를 따라 설계되었다면 객체가 변경되는 요인도 하나뿐이어야 한다.
  • DRY와는 비슷하지만 약간 다르다.
  • 책임은 메소드와 같지는 않지만, 메소드는 책임을 다하기 위해 구현된다.
  • "클래스가 (자신을) 메소드한다."로 표현했을 때 어색하면 SRP 위반일 수 있다.

  • 로버트 마틴은 책임을 "변경하려는 이유"로 정의하고, 어떤 클래스나 모듈은 변경하려는 단 하나 이유만을 가져야 한다고 한다.
  • 예를 들어서 보고서를 편집하고 출력하는 모듈을 생각해 보자.
  • 이 모듈은 두 가지 이유로 변경될 수 있다.
  • 첫 번째로 보고서의 내용 때문에 변경될 수 있다.
  • 두 번째로 보고서의 형식 때문에 변경될 수 있다.
  • 이 두 가지 변경은 하나는 실질적이고 다른 하나는 꾸미기 위한 매우 다른 원인에 기인한다.
  • 단일 책임 원칙에 의하면 이 문제의 두 측면이 실제로 분리된 두 책임 때문이며, 따라서 분리된 클래스나 모듈로 나누어야 한다.

2 방법 및 예시

  • 클래스 추출 - 변경할 이유에 따라 분리
    • Book - BookInfo
    • Guitar - GuitarSpec
    • 힉생정보 - 등록정보, 성적정보, 등록금정보, 장학금정보, 출력방식(HTML출력, PDF출력)
  • 상위클래스 추출 - 공통점에 따라 묶음
    • GuitarSpec, PianoSpec - InstrumentSpec
  • 결과적으로 클래스, 인터페이스가 매우 많아진다...

3 같이 보기

4 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}