본 내용은 객체지향의 사실과 오해라는 책 내용을 정리한 것이며, 자세한 내용은 책을 참고하시길..
기능을 구현하기 위해 협력하는 객체들
손님 → 캐시어 → 바리스타
커피를 주문하는 과정은 객체지향의 핵심적이고 중요한 개념을 거의 대부분 포함하고 있다.
사람이라는 단어를 객체
- 손님, 캐시어, 바리스타
에이전트의 요청을 메시지
- 손님 → 캐시어 : 주문을 요청
- 캐시어 → 바리스타 : 커피제조를 요청
요청을 처리하는 방법을 메서드
- 캐시어 : 주문을 받은 후 바리스타에게 커피제조를 요청한다.
- 바리스타 : 커피제조를 한다.
역할과 책임을 수행하며 협력하는 객체들
사람들은 커피 주문과 같은 특정한 목표를 이루기 위해 서로 협력한다.
실세계 : 협력의 핵심은 특정한 책임
을 수행하는 역할
들 간의 연쇄적인 요청과 응답을 통해 목표를 달성한다는 것이다.
시스템 : 역할
과 책임
을 수행하는 객체로 분할되고 시스템의 기능은 객체 간의 연쇄적인 요청과 응답의 흐름으로 구성된 협력
으로 구현된다.
객체지향 설계라는 예술은 적절한 객체에게 적절한 책임을 할당하는 것에서부터 시작한다.
책임이 불분명한 객체는 애플리케이션의 미래 역시 불분명하게 만든다. 얼마나 적절한 책임을 선택하느냐가 애플리케이션의 아름다움을 결정한다.
객체의 특징
- 여러 객체가 동일한 역할을 수행할 수 있다.
- 역할은 대체 가능성을 의미한다.
- 각 객체는 책임을 수행하는 방법을 자율적으로 선택할 수 있다.
- 하나의 객체가 동시에 여러 역할을 수행할 수 있다.
협력 속에 사는 객체
객체지향 애플리케이션의 윤곽을 결정하는 결정하는 것은 역할
, 책임
, 협력
이지만 실제로 협력에 참여하는 주체는 객체다.
아주 작은 기능조차 객체 혼자 감당하기에는 버거울 정도로 복잡하고 거대하기 때문에 일반적으로 객체는 다른 객체와의 협력을 통해 기능을 구현하게 된다. (결국 협력의 품질을 결정하는 것은 객체의 품질)
객체가 가져야하는 두 덕목
1.객체는 충분히 '협력적'이어야 한다.
객체는 다른 객체의 요청에 충실히 귀 기울이고 다른 객체에게 적극적으로 도움을 요청할 정도로 열린 마음을 지녀야 한다. 외부의 도움을 무시한 채 모든 것을 스스로 처리하려고 하는 전지전능한 객체(god object)는 내부적인 복잡도에 의해 자멸하고 만다.
2.객체는 충분히 '지율적'이어야 한다.
'자율적'이라는 단어의 뜻은 '자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것'을 의미한다. (캐시어는 요청에 대해 스스로 판단하고 행동하는 자율적인 존재다.)
상태와 행동을 함께 지닌 자율적인 객체
흔히 객체를 상태(state)
와 행동(behavior)
을 함께 지닌 실체라고 정의한다. 객체가 협력에 참여하기 위해 어떤 행동을 해야 한다면 그 행동을 하는 데 필요한 상태도 함께 지니고 있어야 한다는 것을 의미한다.
⇒ 객체는 상태와 행위를 하나의 단위로 묶는 자율적인 존재
객체는 다른 객체가 '무엇(what)'을 수행하는지는 알 수 있지만 '어떻게(how)' 수행하는지에 대해서는 알 수 없다. 즉, 객체의 사적인 부분은 객체 스스로 관리하고 외부에서 일체 간섭할 수 없도록 차단해야 하며, 객체의 외부에서는 접근이 허락된 수단을 통해서만 객체와 의사소통해야 한다
협력과 메시지
커피를 주문하기 위해 협력하는 사람들은 자신의 책임을 다하기 위해 다른 사람들에게 도움을 요청한다.
손님은 캐시어에게 주문된 커피를 요청하고, 캐시어는 바리스타에게 커피를 제조해줄 것을 요청한다.
이런 의사소통을 객체지향 세계에서는 메시지
라고 한다. 한 객체가 다른 객체에게 요청하는 것을 메시지를 전송한다고 말하고 다른 객체로부터 요청을 받는 것을 메시지를 수신한다고 말한다.
메서드와 자율성
객체는 다른 객체와 협력하기 위해 메시지를 전송한다. 수신자는 메시지를 이해할 수 있는지 판단 후 미리 정해진 자신만의 방법에 따라 메시지를 처리한다. 이처럼 객체가 수신된 메시지를 처리하는 방법을 메서드(method)
라고 한다.
바리스타 기준
- 전달된 커피 제조 요청 : 메시지
- 커피를 제조하는 구체적인 방법 : 메서드
객체지향 본질
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체 로 바라보고 객체를 이용해 시스템을 분할하는 방법
- 자율적인 객체란 상태 와 행위 를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력 한다. 각 객체는 협력 내에서 정해진 역할 을 수행하며 역할은 관련된
책임
의 집합이다. - 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지 를 수신한 객체는 메시지를 처리하는데 적합한 메서드 를 자율적으로 선택한다.
중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다.
⇒ 핵심은 적절한 책임을 수행하는 역할 간의 유연하고 견고한 협력 관계를 구축하는 것.
'프로그래밍 노트 > 객체지향프로그래밍' 카테고리의 다른 글
[객체지향] 추상화에 대해서 (0) | 2022.09.07 |
---|---|
[객체지향] 객체 설계시 주의해야할 점 (0) | 2022.09.07 |
[객체지향] 객체지향 프로그래밍에서 객체란 무엇을 뜻하는 것일까? (0) | 2022.09.02 |
[객체지향] 타입과 추상화 (0) | 2020.02.03 |
[객체지향] 이상한 나라의 객체(객체지향세계에서의 객체) (0) | 2020.01.29 |