💡 Highlight
- 객체지향의 핵심은 클래스를 어떻게 구현할 것인가가 아니라 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다.
- 객체지향 설계의 핵심은 올바른 책임을 올바른 객체에게 할당하는 것이다.
책임
- 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 소프트웨어 객체에 할당하는 것
- 크레이그 라만은 객체의 책임을 크게 '하는 것'과 '아는 것'의 두 가지 범주로 자세히 분류하고 있다.
- 하는 것 (doing)
- 아는 것 (knowing)
역할
- 역할은 재사용 가능하고 유연한 객체지향 설계를 낳는 매우 중요한 구성요소이다.
- 협력 안에서 역할은 "이 자리는 해당 역할을 수행할 수 있는 어떤 객체라도 대신할 수 있습니다"라고 말하는 것과 같다.
- 역할은 객체지향 설계의 **단순성(simplicity), 유연성(flexibility), 재사용성(reusability)**을 뒷받침하는 핵심 개념이다.
객체의 모양을 결정하는 협력
- 객체지향의 핵심은 클래스를 어떻게 구현할 것인가가 아니라 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다.
객체지향 설계 기법
- 책임-주도 설계(Responsibility-Driven Design) : 협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식, 객체의 책임을 중심으로 시스템을 구축하는 설계 방법
- 객체지향 설계의 핵심은 올바른 책임을 올바른 객체에게 할당하는 것이다.
- 디자인 패턴(Design Pattern) : 전문가들이 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿의 모음
- 테스트 주도 개발(Test-Driven Development) : 테스트를 면저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 애플리케이션을 완성해가는 방식