4장. 역할, 책임, 협력

KIMA·2023년 3월 26일
1
post-thumbnail

서론

객체지향에 갓 입문한 사람들의 가장 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야할 상태와 행동부터 고민하는 것이다.
개별적인 객체의 행동이나 상태가 아니라 객체들 간의 협력에 집중하라.

본론

책임

객체지향 설계의 예술은 적절한 객체에게 적절한 책임을 할당하는 데 있다. 책임이 불분명한 객체들은 애플리케이션의 미래 역시 불분명하게 만든다.
객체지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야 하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것으로부터 시작된다. 어떤 클래스가 필요하고 어떤 메서드를 포함해야 하는지를 결정하는 것은 책임과 메시지에 대한 대략적인 윤곽을 잡은 후에 시작해도 늦지 않다.

역할

어떤 객체가 수행하는 책임의 집합은 객체가 협력 안에서 수행하는 역할을 암시한다.
예를 들어, 모자 장수가 재판이라는 협력 안에서 증인석에 입장한다증언한다라는 책임을 가진다는 것은 증인이라는 역할을 수행하고 있음을 의미한다.
따라서 동일한 역할을 수행하는 객체들이 동일한 메시지를 수신할 수 있기 때문에 동일한 책임을 수행할 수 있다는 개념을 이해해야 한다.

객체의 모양을 결정하는 협력

객체지향의 핵심은 클래스를 어떻게 구현할 것인가가 아니라 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다.
객체지향 입문자들이 데이터나 클래스를 중심으로 애플리케이션을 설계하는 이유는 협력이라는 문맥을 고려하지 않고 각 객체를 독립적으로 바라보기 때문이다.

객체지향 설계 기법

역할, 책임, 협력의 관점에서 애플리케이션을 설계하는 유용한 세 가지 기법을 살펴보자.

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

협력에 필요한 책임 식별 👉 적합한 객체에 책임 할당

둘째, 디자인 패턴 (Design Pattern)

전문가들이 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿의 모음이다.
패턴은 전문가들이 특정 문제를 해결하기 위해 이미 식별해 놓은 역할, 책임, 협력의 모음이다.

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

실패하는 테스트를 먼저 작성하고 테스트를 통과하는 가장 간단한 코드를 작성한 후 리팩터링을 통해 중복을 제거해나가면서 애플리케이션을 완성해나간다.
테스트-주도 개발의 핵심은 테스트 작성이 아니라 구체적인 코드를 작성해나가면서 역할, 책임, 협력을 식별하고 식별된 역할, 책임, 협력이 적합한지를 피드백받는 것이다.

Reference

  • 객체지향의 사실과 오해, 조영호 지음
profile
안녕하세요.

0개의 댓글