Whiteship's Note


[OOAD] 객체지향 원칙 1. SRP

Design Pattern : 2010.05.07 00:35


참조: 
http://www.objectmentor.com/resources/articles/srp.pdf
헤드 퍼스트 OOAD (영문판) 390p
http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039135552
실용주의 디자인 패턴 (Holub on Patterns) 6p

Single Responsibility Principal, 보통 단일 책임 원칙이라고 하는데 여기서 "책임"이란 "변경 이유"에 해당한다. 따라서 이 원칙은 다음과 같이 재해석 할 수도 있다. 

어떤 클래스는 한 가지 이유로만 변경되어야 한다.

즉, 여러가지 이유로 해당 클래스가 변경된다면 그 클래스에 여러가지 책임 있다는 말이다. 또는 반대로 책임이 여러 크래스로 분산되어 있어도 문제다. 어떤 기능을 하나 손 보려면 여러 클래스를 두루 두루 손봐야 할지도 모르기 때문이다.

"한 가지 일"이라는게 클래스에게 지나친 제약이지는 않을까? 그렇치 않다. 스윙의 JTable은 백여개의 메서드를 가지고 있다. 하지만 그 모든게 테이블과 관련된 작업들이고 여러 리스너 인터페이스들을 구현하였기에 SRP를 잘 지키고 있는 예제로 볼 수 있다. 즉 지나치게 클래스를 제약하지 않는다.

응집도(cohesion)는 SRP의 또다른 이름이기도 하다. 높은 응집도를 가진 소프트웨어를 작성할수록 SRP를 잘 적용하고 있는 것이다.  
http://code.springsprout.org/browse/SpringSprout/src/springsprout/modules/member/MemberServiceImpl.java?r=HEAD

자 위에 있는 봄싹 코드에서 SRP를 위반한 코드를 찾아서 해당 코드를 작성한 사람에게 따지도록 하자. 

'Design Pattern' 카테고리의 다른 글

[OOAD] 객체지향 원칙 1. SRP  (2) 2010.05.07
[Tell, Don't Ask] 물어보지 말고 시켜라  (8) 2010.04.07
Visitor 패턴  (2) 2010.03.12
Holub on Pattern 좋은데요~  (4) 2008.12.07
프로토타입 패턴(Prototype Pattern)  (2) 2008.10.31
데코레이터(Decorator) 패턴  (0) 2008.10.01
프록시(Proxy) 패턴  (0) 2008.09.26
JUnit 공부하자.  (0) 2008.09.01
H.F.OOAD 5장 문제  (0) 2007.11.20
상위 클래스 보다는 인터페이스를...  (4) 2007.08.31
Singletons and lazy loading  (2) 2007.01.27
top

TAG OOAD, SRP

H.F.OOAD 5장 문제

Design Pattern : 2007.11.20 17:48


사용자 삽입 이미지

위와 같은 클래스다이어그램을 주고 개선시키라고 합니다. ㄷㄷㄷ;

영문판으로는 230쪽인데 한글판은 몇 페이진지 모르겠네요. 재밌을 것 같아서 EA로 그려봤습니다. 가장 신경써야 할 세 가지 원칙을 알려주었습니다.
  1. Interface :: 인터페이스 기반으로 프로그래밍 할 것.
  2. Encapsulation :: 여러번 나타나는 것은 Encapsulation으로 숨길 것.
  3. Change :: 오직 하나의 변화에 클래스가 영향을 받도록 설계할 것.
1. 이래야 클래스가 Flexibility를 유지할 수 있기 때문입니다.
2. 단순하게 프로퍼티를 private로 설정하는 것 만이 Encapsulation이 아니라는 것을 이 책 어딘가에서 설명했었습니다.(1장인가..)
3. 단인책임원칙 SRP(Single Role of Responsibilty 맞나;;)와 관련있는 내용입니다. 여러가지 변경 사유로 인해 하나의 클래스가 계속 바껴야 한다면, 그 클래스가 책임지고 있는 일이 너무 많기 때문입니다. 나눠줘야 합니다.

어려워요...OTL
데이트하고와서 한번 해봐야겠네요.

혹시 해보고 싶으신 분이 있을지 몰라서 파일을 올려봅니다.



'Design Pattern' 카테고리의 다른 글

Holub on Pattern 좋은데요~  (4) 2008.12.07
프로토타입 패턴(Prototype Pattern)  (2) 2008.10.31
데코레이터(Decorator) 패턴  (0) 2008.10.01
프록시(Proxy) 패턴  (0) 2008.09.26
JUnit 공부하자.  (0) 2008.09.01
H.F.OOAD 5장 문제  (0) 2007.11.20
상위 클래스 보다는 인터페이스를...  (4) 2007.08.31
Singletons and lazy loading  (2) 2007.01.27
객체지향 디자인 원칙  (2) 2006.12.11
Losely Coupled를 활용하라.  (0) 2006.12.11
상속보다는 구성을 활용한다.  (0) 2006.12.11
top