- 협력

 

협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다.

다른 사람으로부터 요청을 받은 사람도 또 다른 누군가에게 도움을 요청할 수 있다.

즉, 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.

(요청을 받는다는 것은 그 요청에 대해 적절한 방식으로 응답하는데 필요한 지식과 행동을 가지고 있다는 것을 의미)

 

- 책임

객체의 책임은 크게 '하는 것'과 '아는 것'으로 분류할 수 있다.

하는 것 : 내가 스스로 행동하는 것, 다른 객체의 행동을 컨트롤 하는 것.

아는 것 : 내 개인적인 정보를 아는 것, 다른 관련된 객체에 대해 아는 것.

즉, 책임은 객체의 외부에 제공해 줄 수 있는 정보(아는 것)와 외부에 제공해 줄 수 있는 서비스(하는 것)의 목록이다.

 

객체지향 설계는 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야 하고 어떤 객체로부터 메세지(요청을 보내는 것)를 수신할 것인지를 결정하는 것으로 부터 시작된다.

 

- 역할

역할은 객체가 수행하는 책임의 집합이다.

역할은 메세지(요청)를 동일하게 이해하고 처리할 수 있는 다른 객체로 대체할 수 있다.

역할은 객체지향 설계의 단순성, 유연성, 재사용성을 뒷받침 하는 핵심 개념이다.

 

단순성 - 요청을 처리할 수 있는 공통점을 가지면 된다(추상화와 연관해서 생각)

유연성 - 다른 객체로 유연하게 대체 가능

재사용성 - 다양한 객체를 동일한 협력에 재사용 가능


객체지향의 핵심은 객체가 협력 안에서 어떤 책임과 역할을 수행할 것인지를 결정하는 것이다.

협력과 책임의 집합이 결정된 후에 클래스와 데이터(상태?)를 어떻게 구성할 것인지 생각하면 된다.

 

 

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

1. 책임 - 주도 설계

협력 관계를 먼저 고안하고, 협력에 필요한 역할과 책임을 식별한 후 이를 수행할 수 있는 적절한 객체를 식별해 나가는 과정이다.

2. 디자인 패턴

특정 문제를 해결하기 위해 이미 식별해 놓은 역할, 책임, 협력의 모음이다.

자주 사용되는 해결방법을 정의해놓은 설계 템플릿 모음.

3. 테스트 - 주도 개발

테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 애플리케이션을 완성해가는 방식.

+ Recent posts