책임 주도 개발
What / Who 사이클
어떤 행위(What)를 수행 할 것인 지를 결정한 후에 누가(Who) 그 행위를 수행할 것 인지를 결정해야 한다.
책임 주도 설계는 객체가 아니라 객체를 주고 받는 메시지에 초점을 맞추게 함으로 써 객체 지향의 장점을 극대화 한다.
묻지 말고, 시켜라( Tell, Don’t Ask )
- 객체 지향적인 사고 방식
- 좀 더 추상적인 인터페이스 : 수신자의 자율성을 보장할 수 있다.
- 최소의 인터페이스 : 외부에서 사용할 필요가 없는 인터페이스는 최대한 노출하지 않는다.
- 인터페이스와 구현 간에 차이가 있다는 점을 인식 : 외부에 공개되는 인터페이스와 내부에 감춰지는 구현
객체를 설계 할 때,
속성보다는 행동에 집착하고, 객체가 행하는 행동을 통해서 협력하는 것에 중점을 둔 설계를 생각하자.
이것은 곧 객체의 행동을 통한 책임을 기반으로 서로의 관계를 모델링 한 후에 각 객체의 속성을 정의 하자. (TDD적 생각이 도움이 될 듯)
역할, 책임, 협력을 먼저 생각하자.
- 역할, 책임, 협력
- 여러 사람이 동일한 역할을 수행 할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
- 한 사람이 동시에 여러 역할을 수행할 수 있다.
객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 객체에 할당하는 것이다.
책임의 분류와 방법( 하는 것(doing)과 아는 것(knowing) )
doing | knowing |
---|---|
객체 생성, 계산 등 스스로 하는 것 | 개인적인 정보를 아는 것 |
다른 객체의 행동을 시작 시키는 것 | 관련된 객체를 아는 것 |
다른 객체의 활동을 제어 하는 것 | 자신이 유도한 것이나 계산한 것을 아는 것 |