Recap
- 코드를 재사용할 수 있는 가장 널리 알려진 방법은 상속이지만, 캡슐화의 측면에서는 합성이 더 좋은 방법이다.
객체지향의 핵심
협력 (Collaboration)
- 객체들이 애플리케이션의 기능을 구현하기 위해 수행하는 상호작용
- 협력이란 어떤 객체가 다른 객체에게 무엇인가를 요청하는 것이다. 한 객체는 어떤 것이 필요할 때 다른 객체에게 전적으로 위임하거나 서로 협력한다. 즉 두 객체가 상호작요을 통해 더 큰 책임을 수행하는 것이다. 객체 사이의 협력을 설계할 때는 객체를 서로 분리된 인스턴스가 아닌 협력하는 파트너로 인식해야 한다.
- message sending은 객체 사이의 협력을 위해 사용할 수 있는 유일한 커뮤니케이션 수단
→ 협력이 설계를 위한 문맥(context)을 결정한다.
책임 (Responsibility)
- 객체가 협력에 참여하기 위해 수행하는 로직
- 객체의 책임
- ‘무엇을 알고 있는가’ - knowing
- 사적인 정보에 관해 아는 것
- 관련된 객체에 관해 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
- ‘무엇을 할 수 있는가’ - doing
- 객체를 생성하거나 계산을 수행하는 등의 스스로 하는 것
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것
CRC 카드
- 객체지향을 모르는 초보자와 절차적인 설계에 익숙한 사람들에게 객체지향 설계 기법을 가르치기 위해 고안한 기법.
- CRC
- 후보(Candidate), 책임(Responsibility), 협력자(Collaborator)
- 클래스(Class), 책임(Responsibility), 협력(Collaboration)
- 10x15cm 정도 크기의 작은 인덱스 카드
- 카드 하나는 하나의 후보를 의미한다
- 만드는 법
- 한 면에는 후보의 목적을 기술한다. 목적은 후보가 외부에 제공해야 하는 서비스를 하나의 문장으로 표현하는 것.
- 다른 면의 상단에는 후보 이름을 적는다.
- 좌측 하단에는 목적을 좀 더 세분화해서 무엇을 알고 무엇을 해야 하는지에 대한 책임을 차례대로 적는다.
책임 할당