1 개요[ | ]
- single-responsibility principle (SRP)
- 단일 책임 원칙, 단일 책임의 원리
- SOLID의 하나
- 한 클래스가 하나의 일만 잘하게 하자.
- 하나의 클래스는 하나의 역할만 담당시킨다.
- 각 객체가 하나의 책임에만 집중하게 한다.
- 모든 클래스는 하나의 책임만 가지며, 클래스는 그 책임을 완전히 캡슐화해야 한다.
- 클래스가 제공하는 모든 기능은 이 책임과 주의 깊게 부합해야 한다.
- SRP를 따라 설계되었다면 객체가 변경되는 요인도 하나뿐이어야 한다.
- DRY와는 비슷하지만 약간 다르다.
- 책임은 메소드와 같지는 않지만, 메소드는 책임을 다하기 위해 구현된다.
- "클래스가 (자신을) 메소드한다."로 표현했을 때 어색하면 SRP 위반일 수 있다.
- 로버트 마틴은 책임을 "변경하려는 이유"로 정의하고, 어떤 클래스나 모듈은 변경하려는 단 하나 이유만을 가져야 한다고 한다.
- 예를 들어서 보고서를 편집하고 출력하는 모듈을 생각해 보자.
- 이 모듈은 두 가지 이유로 변경될 수 있다.
- 첫 번째로 보고서의 내용 때문에 변경될 수 있다.
- 두 번째로 보고서의 형식 때문에 변경될 수 있다.
- 이 두 가지 변경은 하나는 실질적이고 다른 하나는 꾸미기 위한 매우 다른 원인에 기인한다.
- 단일 책임 원칙에 의하면 이 문제의 두 측면이 실제로 분리된 두 책임 때문이며, 따라서 분리된 클래스나 모듈로 나누어야 한다.
2 방법 및 예시[ | ]
- 클래스 추출 - 변경할 이유에 따라 분리
- Book - BookInfo
- Guitar - GuitarSpec
- 힉생정보 - 등록정보, 성적정보, 등록금정보, 장학금정보, 출력방식(HTML출력, PDF출력)
- 상위클래스 추출 - 공통점에 따라 묶음
- GuitarSpec, PianoSpec - InstrumentSpec
- 결과적으로 클래스, 인터페이스가 매우 많아진다...
3 같이 보기[ | ]
4 참고[ | ]
편집자 Jmnote
로그인하시면 댓글을 쓸 수 있습니다.