객체지향의 사실과 오해 - 역할, 책임, 협력
TIL
🌱 난 오늘 무엇을 공부했을까?
📌 객체지향의 사실과 오해 - 역할, 책임, 협력
📍 협력
- 객체들간의 요청과 응답은 통해 협력에 참여하는 객체가 수행할 책임을 정의한다.
📍 책임
- 책임은 객체에 의해 정의되는 응집도 있는 행위의 집합으로, 객체가 알아야 하는 정보와 객체가 수행할 수 있는 행위에 대해 개략적으로 서술한 문장.
- 어떤 객체에 대한 요청은 그 대상이 요청을 처리할 책임이 있음을 암시한다.
🔗 책임의 분류
- 하는 것(doing)
- 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것
- 아는 것(knowing)
- 개인적인 정보에 관해 아는 것
- 관련된 객체에 관해 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
- 책임은 객체의 외부에 제공해 줄 수 있는 정보(아는 것)와 외부에 제공해 줄 수 있는 서비스(하는 것)의 목록
📍 역할
- 역할은 협력 안에서 구체적인 객체로 대체될 수 있는 추상적인 협력자
- 하나의 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화 할 수 있다.
- 객체의 추상화
- 대체 가능성의 의미
📍 객체의 모양을 결정하는 협력
- 객체지향에서 중요한 것은 충분히 자율적인 동시에 충분히 협력적인 객체를 창조하는 것
- 객체를 충분히 협력적으로 만든 후에 협력이라는 문맥 안에서 객체를 충분히 자율적으로 만들어라.
📍 객체지향 설계 기법
🔗 책임 주도 설계
- 협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식
- 설계 절차
- 시스템이 사용자에게 적용해야 하는 기능인 시스템 책임을 파악한다.
- 시스템 책임을 더 작은 책임으로 분할한다.
- 분할된 책임을 수행할 수 있는 적절한 객체 또는 역할을 찾아 책임을 할당한다.
- 객체가 책임을 수행하는 중에 다른 객체의 도움이 필요한 경우 이를 책임질 적절한 객체 또는 역할을 찾는다.
- 해당 객체 또는 역할에게 책임을 할당함으로써 두 객체가 협력하게 한다.
🔗 디자인 패턴
- 책임 주도 설계의 결과를 표현한다.
- 특정한 상황에서 설계를 돕기 위해 모방하고 수정할 수 있는 과거의 설계 경험
- 책임 주도 설계의 결과물인 동시에 지름길
🔗 테스트 주도 개발
- 테스트 주도 개발은 테스트에 집중하는 것이 아니라, 객체가 이미 존재한다고 가정하고 객체에게 어떤 메시지를 전송할 것인지에 관해 먼저 생각하는게 좋다. 그러나 역할, 책임, 협력의 관점에서 객체를 바라봐야 한다.
- 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것.