4. 역할, 책임, 협력

생성일
Jan 16, 2022 02:53 AM
태그
객체의 세계에서 협력이라는 문맥이 객체의 행동 방식을 결정한다. 객체지향에 갓 입문한 사람들의 흔한 실수는 협력이라는 문맥을 고려하지 않은 채 객체가 가져야 할 상태와 행동부터 고민하기 시작한다는 것이다.
개별객체가 아니라 객체들 사이에 이뤄지는 협력이 중요하다. 협력의 품질이 객체지향 설계의 품질이다.
훌륭한 객체지향 설계는 겉모습은 아름답지만 협력자들을 무시하는 오만한 객체를 창조하는 것이 아니라 조화를 이루며 적극적으로 상호작용하는 협력적인 객체를 창조하는 것이다. 비록 그 객체를 따로 떼어놓고 봤을 때는 겉모습이 기묘하고 비합리적이더라도.
 

책임

객체지향 세계에서 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.
책임은 ‘하는 것’과 ‘아는 것’의 두 가지 범주로 분류할 수 있음.
객체의 책임을 이야기할 때는 일반적으로 외부에서 접근 가능한 공용 서비스의 관점에서 이야기한다.
즉, 책임은 객체의 외부에 제공해 줄 수 있는 정보(아는 것)와, 외부에 제공해 줄 수 있는 서비스(하는 것)의 목록이다. 따라서 책임은 객체의 공용 인터페이스를 구성한다.
 

역할

역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식.
( 책의 예시 이상한 나라의 앨리스에서 왕과 여왕은 판사라는 역할로, 모자장수와 요리사, 앨리스는 증인이라는 역할로 포괄한다. 여기서 각 역할의 개별 객체는 동일한 역할 내의 다른 객체로 대체되어도 된다.)
역할의 개념을 사용하면 유사한 협력을 추상화해서 인지 과부하를 줄일 수 있다.
또한 다양한 객체들이 협력에 참여할 수 있기 때문에 협력이 좀 더 유연해지며 다양한 객체들이 동일한 협력에 참여할 수 있기 때문에 재사용성이 높아진다.
 

협력을 따라 흐르는 객체의 책임

올바른 객체를 설계하기 위해서는 먼저 견고하고 깔끔한 협력을 설계해야한다.
협력을 설계한다는 것은 설계에 참여하는 객체들이 주고받을 요청과 응답의 흐름을 결정한다는 것이다.
이렇게 결정된 요청과 응답의 흐름은 객체가 협력에 참여하기 위해 수행될 책임이 된다.
 

객체지향 설계 기법

  1. 책임주도 설계
현재 가장 널리 받아들여지는 객체지향 설계 방법
시스템의 책임을 객체의 책임으로 변환하고, 각 객체가 책임을 수행하는 중에 필요한 정보나 서비스를 제공해줄 협력자를 찾아 해당 협력자에게 책임을 할당하는 순차적인 방식으로 객체들의 협력 공동체를 구축한다.
개별적인 객체의 상태가 아니라 객체의 책임과 상호작용에 집중한다. 결과적으로 시스템은 스스로 자신을 책임질 수 있을 정도로 충분히 자율적인 동시에 다른 객체와 우호적으로 협력할 수 있을 정도로 충분히 협조적인 객체들로 이뤄진 생태계를 구성하게 된다.
 
  1. 디자인 패턴
특정한 상황에서 설계를 돕기 위해 모방하고 수정할 수 있는 과거의 설계 경험이다.
 
  1. 테스트 주도 개발
테스트 주도 개발은 테스트를 작성하는 것이 아니라 책임을 수행할 객체 또는 클라이언트가 기대하는 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드의 형태로 작성하는 것이다.

Loading Comments...