- 협력
- 협력은 한 사람이 다른 사람에게 도움을 요청할 때 시작된다.
- 협력은 다수의 요청과 응답으로 구성되며, 전체적으로 협력은 다수의 연쇄적인 요청과 응답의 흐름으로 구성된다.
- 훌륭한 객체를 설계하기 위해서는 먼저 협력이라는 단어 속에 내포된 다양한 특성을 두루 살펴볼 필요가 있다.
-책임
- 객체지향의 세계에서는 어떤 객체가 어떤 요청에 대해 대답해 줄 수 있거나, 적절한 행동을 할 의무가 있는 경우 해당 객체가 책임을 가진다고 말한다.
- 객체지향 개발에서 가장 중요한 능력은 책임을 능숙하게 객체에 할당하는 것
- 객체의 책임은 객체가 무엇을 알고 있는가, 무엇을 할 수 있는가 로 구성된다.
- 책임의 분류
- 협력에 참여하는 객체들은 목표를 당성하는 데 필요한 책임을 수행
- 객체의 책임은 '객체가 무엇을 알고 있는가', '무엇을 할 수 있는가'
하는것
- 객체를 생산하거나 계산을 하는 등의 스스로 하는 것
- 다른 객체의 행동을 시작시키는 것
- 다른 객체의 활동을 제어하고 조절하는것
아는것
- 개인적인 정보에 관해 아는 것
- 관련된 객체에 관해 아는 것
- 자신이 유도하거나 계산할 수 있는 것에 관해 아는 것
- 책임은 객체지향 설계의 품질을 결정하는 가장 중요한 요소다.
- 책임은 객체의 공용 인터페이스를 구성한다.
-책임과 메시지
- 협력 안에서 객체는 다른 객체로부터 요청이 전송됐을 경우에만 자신에게 주어진 책임을 수행한다.
- 한 객체가 다른 객체에게 전송한 요청은 그 요청을 수신한 객체의 책임이 수행되게 한다.
-역할
- 책임의 집합이 의미하는것
- 어떤 객체가 수행하는 책임의 집합은 객체가 협력 안해서 수행하는 역할을 암시한다.
- 등장인물을 제외한 과정이 너무 유사해서 하나의 협력으로 다루고 싶을때 역할을 통해 추상화한다.
- 역할은 협력 내에서 다른 객체로 대체할 수 있음을 나타내는 일종의 표식이다.
- 역할은 객체지향 설계의 단순성, 유연성, 재사용성을 뒷받침하는 핵심 개념이다.
-협력의 추상화
- 역할의 가장 큰 가치는 협력 안에 여러 종류의 객체가 참여할 수 있게 함으로써 협력을 추상화할 수 있다는 것이다.
-대체 가능성
- 역할은 협력 안에서 구체적인 객체로 대체될 수 있는 추상적인 협력자다.
- 객체는 역할에 주어진 책임 이외에 다른 책임을 수행할 수도 있다
- 결국 객체는 역할을 암시하는 책임보다 더 많은 책임을 가질 수 있다.
- 일반화/ 특수화 관점에서 역할이 협력을 추상적으로 만들 수 있는 이유는 역할 자체가 객체의 추상화이기 때문이다.
- 이런 행위간의 호완성은 동일한 책임의 수행을 의미한다.
-
객체의 모양을 결정하는 협력
-
흔한 오류
-객체는 데이터를 저장하기 위해 존재하는게 아니다.(항상)
-객체에서 중요한건 행동 과 책임이다.
-객체 지향에 대한 두번째 선입견은 객체지향이 클래스와 클래스 간의 관계를 표현하는 정적인 측면에 중점을 둔다는것
-객체지향 입문자들이 데이터나 클래스를 중심으로 설계하는 이유는 단순히 객체를 독립적으로 바라보기 때문이다.
-
협력을 따라 흐르는 객체의 책임
-
올바른객체를 설계하기 위해서는 먼저 견고하고 깔끔한 협력을 설계해야한다.
-
객체의 행위에 초점을 맞추기 위해서는 협력이라는 실행 문맥 안에서 책임을 분배해야한다.
-객체지향 설계 기법
- 역할, 책임, 협력이 견고하고 유연한 객체지향 설계에서 가장 중요한 부분
-책임 주도 설계 방법은 협력에 필요한 책책임들을 식별하고 적합한 객체에게 책임을 할당하는 방식으로 애플리케이션을 설계한다.
-책임 주도 설계 방법은 객체 지향 패러다임의 전문가들이 애플리케이션을 개발할때 어떤 방식으로 사고하고 무엇을 기반으로 의사결정을 내리는지 보여준다.
- 디자인 패턴은 전문가들이 반복적으로 사용하는 해결 방법을 정의해놓은 설계탬플릿의 모음이다.
- 테스트 - 주도 개발 방법은 테스트를 먼저 작성하고 테스트를 통과하는 구체적인 코드를 추가하면서 완성해가는 방법이다.