[Book]객체 지향의 사실과 오해, 조영호: 4장

Hyunta·2021년 9월 28일
0
post-thumbnail

4. 역할, 책임, 협력

객체지향에 갓 입문한 사람들의 가장 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작한다는 것이다.

협력

협력의 본질은 요청과 응답으로 연결되는 사람들의 네트워크다.

요청과 응답은 협력에 참여하는 객체가 수행할 책임을 정의한다.

책임

어떤 객체가 어떤 요청에 대해 대답해줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 책임을 가진다.

객체의 책임은 두가지로 나뉜다.

  • 하는 것 (doing)
    • 객체를 생성하거나, 계산 등 스스로 하는 것
    • 다른 객체의 행동을 시작시키는 것
    • 다른 객체의 활동을 제어하고 조절하는 것
  • 아는 것 (knowing)
    • 개인적인 정보에 관해 아는 것
    • 관련된 객체에 관해 아는 것
    • 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
명확한 책임이 애플리케이션의 미래를 결정한다.

책임은 외부에 제공해 줄 수 있는 정보와 서비스의 목록이다.

따라서, 객체의 공용 인터페이스(public interface)를 구성한다.

책임의 구현은 나중 문제고 메세지를 누구랑 주고 받을지 협력관계를 결정하는 것이 중요하다.

역할

판사 - 왕, 여왕

증인 - 모자장수, 요리사, 앨리스

역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.

역할을 대체할 수 있는 객체는 동일한 메시지를 이해할 수 있는 객체로 한정된다.

역할의 대체 가능성은 행위 호환성을 의미하고, 행위 호화넝은 동일한 책임의 수행을 의미한다.

객체지향 설계 기법

책임-주도 설계 (Responsibility-Driven Design)

시스템의 책임을 객체의 책임으로 변환하고, 각 객체가 책임을 수행하는 중에 필요한 정보나 서비스를 제공해줄 협력자를 찾아 객체들의 협력 공동체를 구축한다.

시스템을 쪼개서 적절한 역할의 객체에게 책임을 위임하고, 협력하는 구조를 만드는 설계

객체의 역할, 책임, 협력을 고안하기 위한 방법과 절차

디자인 패턴

책임-주도 설계의 결과를 표현

역할, 책임, 협력의 템플릿

테스트-주도 개발 (Test-Driven Development)

테스트를 통과하는 가장 간단한 코드를 리팩토링해서 중복을 제거하는 방식

profile
세상을 아름답게!

0개의 댓글