실세계의 모방이라는 객체지향의 개념은 훌륭한 프로그램을 설계하고 구현하는 실무적인 관점에서는 부적합하다.
하지만 객체지향이라는 용어에 담긴 기본 사상을 이해하고 학습하는 데는 효과적이다.
-
역할
- 어떤 협력에 참여하는 특정한 사람이 협력 안에서 차지하는
책임
이나 의무
를 의미
- 특정한 역할은 특정한 책임을 암시
-
협력
- 특정한 책임을 수행하는 역할들 간의 연쇄적인
요청과 응답을 통해 목표를 달성
한다는 것
-
메서드
-
송신자(sender)
-
수신자(receiver)
객체의 역할 특징
- 여러 객체가 동일한 역할 수행 가능
- 역할은 대체 가능성을 의미
- 각 객체는 책임을 수행하는 방법을 자율적으로 선택 가능
- 하나의 객체가 동시에 여러 역할 수행 가능
객체가 갖춰야할 두 가지 덕목
- 객체는 충분히
협력적
이어야 한다.
- 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다.
- 어떤 방식으로 응답할지는 객체 스스로 판단하고 결정한다.
- 객체는 충분히
자율적
이어야 한다.
- 받은 요청에 응할지 여부와 어떤 방식으로 응답할지 객체 스스로 판단하고 결정
외부의 요청이 무엇인지를 표현하는 메시지와 요청을 처리하기 위한 구체적인 방법인 메서드를 분리하는 것은 객체의 자율성을 높이는 핵심 메커니즘
객체지향이란?
- 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법
- 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미
- 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력
- 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택
객체지향에서 클래스에 대한 오해
- 클래스가 객체지향 프로그래밍 언어의 관점에서 매우 중요한 구성 요소인 것은 분명하지만 객체지향의 핵심을 이루는 중심 개념이라고 말하기에는 무리가 있다.
- 지나치게 클래스를 강조하는 프로그래밍 언어적인 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합
- 애플리케이션을 협력하는 객체들의 공동체가 아닌 클래스로 구성된 설계도로 보는 관점은 유연하고 확장 가능한 애플리케이션의 구축 방해
- 클래스는 객체들의 협력 관계를 코드로 옮기는 도구에 불과하다.
- 객체지향은 객체를 지향하는 것이지 클래스를 지향하는 것이 아니다.