객체지향
[객체지향] 역할, 책임, 협력(2)
메성
2020. 2. 26. 00:32
반응형
역할, 책임, 협력(2)
역할, 책임, 협력은 객체 지향 시스템을 만드는 데 필요한 가장 중요한 재료이다.
들어가기에 앞서..
객체지향 시스템의 목적을 살펴보고 들어가자.
▶ 역할과 책임 속에서 사용자의 요구를 만족시킬 수 있는 기능을 제공하는 동시에 이해하기 쉽고, 단순하며, 유연한 상호작용을 제공하는 객체들의 공동체를 구축한 것이다.
협력
- 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.
책임
- 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.
- 즉, 어떤 대상에 대한 요청은 그 대상이 요청을 처리할 책임이 있음을 암시한다.
- 객체의 책임은 객체가 무엇을 알고 있는가와 무엇을 할 수 있는가로 구성된다.
- 객체의 책임은 일반적으로 외부에서 접근 가능한 공용 서비스의 관점에서 이야기 한다. 즉, 책임은 객체의 공용 인터페이스를 구성한다.
책임에서 하는것 과 아는 것
- 하는 것
- 객체를 생성하거나 계산을 하는 등의 스스로 하는 것
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는 것
- 아는 것
- 개인적인 정보에 관해 아는 것
- 관련된 객체에 관해 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
책임과 메시지
- 두 객체간의 협력은 메시지를 통해 이뤄진다.
- 책임과 메시지는 같지 않다.
- 책임은 협력이라는 문맥 속에서 요청을 수신하는 객체 관점에서 무엇을 할 수 있는지 나열한 것이다.
- 메시지는 협력에 참여하는 두 객체 사이의 관계를 강조한 것이다.
- 메시지를 기반으로 상호협력이 가능한 것이다.
- 객체지향 설계의 시작은 협력에 참여하기 위해 어떤 객체가 어떤 책임을 수행해야하고 어떤 객체로부터 메시지를 수신할 것인지를 결정하는 것부터 시작된다.
역할
- 역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.
- 단, 역할을 대체하기 위해서는 각 역할이 수신할 수 있는 메시지를 동일한 방식으로 이해해야한다.
- 또한, 동일한 역할을 수행할 수 있다는 것은 해당 객체들이 협력 내에서 동일한 책임의 집합을 수행할 수 있다는 것을 의미한다.
- 역할은 객체지향 설계의 단순성, 유연성, 재사용성을 뒷받침하는 핵심개념이다.
협력의 추상화
-
역할의 가장 큰 가치는 하나의 협력 안에 여러 종류의 객체(동일한 책임의 집합을 가진 객체)가 참여할 수 있게 함으로써, 협력을 추상화할 수 있다는 것이다.
- Ex. [앨리스 이야기 in 법정] 왕 - 하얀토끼 - 요리사와 왕 - 하얀토끼 - 앨리스를 판사 - 하얀토끼 - 증인으로 인물들의 협력을 추상화한다.
대체 가능성
- 역할은 협력 안에서 구체적인 객체로 대체될 수 있는 추상적인 협력자이다.
- 객체가 역할을 대체하기 위해서는 협력 안에서 수행하는 모든 책임을 동일하게 수행할 수 있어야 한다.
- 객체와 역할 사이의 일반화/특수화 관계
- 일반적으로 객체는 역할이 암시하는 책임보다 더 많은 책임을 가질 수 있다.
- 객체와 역할 사이에는 일반화/특수화 관계가 성립되는 것이 일반적이다.
- 일반화 : 일반적인 왕의 일상
- 특수화 : 재판할 때의 왕
객체의 모양을 결정하는 협력
- 올바른 객체를 설계하기 위해서는 먼저 견고하고 깔끔한 협력을 설계해야한다.
- 협력이라는 문맥에서 객체의 행동을 결정한 후 그 행동을 수행하는 데 필요한 데이터를 고민해야한다.
- 클래스와 데이터는 협력과 책임의 집합이 결정된 후에야 등장한다.
객체지향 설계 기법
- 객체지향 설계란, 애플리케이션 기능을 구현하기 위한 협력 관계를 고안하고, 협력에 필요한 역할과 책임을 식별한 후 이를 수행할 수 있는 적절한 객체를 식별해 나가는 과정이다.
- 객체지향 설계의 핵심은 올바른 책임을 올바른 객체에게 할당하는 것이다.
- 역할, 책임, 협력이 견고하고 유연한 객체지향 설계를 낳기위한 가장 중요한 토양이라는 사실을 알 것이다.
역할, 책임, 협력의 관점에서 유용한 설계 기법
-
책임-주도 설계
- 협력에 필요한 책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식이다.
-
디자인 패턴
- 전문가들이 반복적으로 사용하는 해결 방법을 정의해 놓은 설계 템플릿 모음으로서, 역할, 책임, 협력의 모음이라고도 볼 수 있다.
-
테스트-주도 개발
- 테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 완성해가는 방식이다.
책임-주도 설계
- 객체가 책임을 수행하는 도중 필요한 정보나 서비스를 제공해줄 협력자(객체 또는 역할)를 찾아 해당 협력자에게 책임을 할당하는 순차적인 방식으로 객체들의 협력 공동체를 구축한다.
- 개별적인 객체의 상태가 아니라 객체의 책임과 상호작용에 집중한다.
테스트-주도 개발
- 테스트 주도 개발은 테스트를 작성하는 것이 아니라 책임을 수행할 객체의 역할이 메시지를 수신할 때 어떤 결과를 반환하고 그 과정에서 어떤 객체와 협력할 것인지에 대한 기대를 코드로 작성한 것이다.
반응형