제 블로그의 모든 글은 IMHO로 쓴 것입니다. 잘못된 부분이 있으면 덧글을 통해서 소통을 하면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 그렇지만 소통을 할 때 서로의 감정을 존중하는 선에서 해주셨으면 좋겠습니다. 감사합니다:) —
http://www.yes24.com/Product/Goods/18249021?Acode=101 위 책의 내용을 요약하며 쓴 포스트 입니다.
협력하는 객체들의 공동체
- 객체지향은 “실세계의 투영”하는 것이 목표이다.
- 개발을 하다 보면 완벽하게 내가 원하는 이름의 객체를 만들기 어려울 때가 있다.
- 왜냐하면 객체지향은 실세계를 직접적이고 직관적으로 다시 모델링을 해 최대한 유사하게 모방하는 것이기 때문이다.
역할, 책임, 협력
- 모방을 하기 위해 각 객체를 모델링 하면 그것은 “역할”을 갖게 되고, 역할을 갖기 때문에 “책임”이 더해진다.
- 그리고 각 역할들은 “협력”을 통해 일을 한다.
-
이 때 협력관계는 요청과 응답을 통해 구체화를 시킬 수 있다.
- 협력 = 특정 책임 수행하는 역할들 간 연쇄적 요청, 응답으로 목표 달성
- 목표 = 어플리케이션 기능구현
- 책임1 : 작게 분할 -> 적절하게 처리 가능 역할을 지닌 객체가 처리
- 책임2 : 적절한 역할 가진 객체가 처리
- 책임 1, 2간의 요청이 응답과 요청을 받는다.
- 객체의 역할
- 여러 객체가 동일 역할 수행 가능
- 역할 : 대체 가능성
- 각 객체는 수행할 수 있는 방법을 자율적으로 수행가능
- 하나의 객체가 동시에 여러 역할 수행 가능
요청과 응답으로 구성된 협력
- 객체 지향을 현실세계에 대입했을 때 커피집을 생각해보면 손님, 캐리어, 바리스타는 개개인의 객체를 의미하고 각 객체는 서로간의 협력관계가 있고 그 속에서 자신의 책임을 다한다.
- 예를 들어보면 손님은 주문을 하고 캐리어는 계산을 받고 바리스타는 커피를 만드는 역할을 한다. 그리고 서로간의 협력 관계를 통해 주문을 하고 받고 커피를 만드는 작업을 진행한다.
- 이렇듯 객체지향에서 가장 중요한 개념은 각자의 역할, 책임 그리고 서로간의 협력이다.
- 그 중에서 협력은 객체지향에서 중요한 개념으로 서로간의 충분히 협력적이어야하고 다른 객체에 적극적으로 도움을 요청할 정도로 열린 마음을 가져야한다. 여기서의 협력적인 의미는 다른 객체에 수동적이라는 뜻이 아니라 요청에 응답하는 것을 의미하고 어떻게 응답하는 지는 객체 스스로 결정한다. 또한 객체는 충분히 자율적인 존재로 구성된 협력 공동체이다. 협력적일 수 있지만 결국 스스로 행동할 줄 알아야한다.
협력 속에 사는 객체
- 객체 : 협력에 참여하는 주체
- 객체의 두 덕목
- 객체는 협력적이어야 한다.
- 객체는 자율적이어야 한다.
- 자신의 행동을 스스로 결정하고 책임진다.
- 요청에 대해 스스로 판단 후 행동한다.
- 즉 객체는 상태와 행동을 함께 지닌 실체이다.
객체지향의 본질
-
객체는 상태와 행동을 가지고 있으며 스스로 자기 자신을 책임진다.
-
객체지향이 절차지향과 다른 가장 큰점은 실행시간에 어떤 행위를 할지 결정하는 것이다. 절차지향의 컴파일 시 결정되는 부분과 가장 큰 다른 점이다.
-
객체의 자율성으로 객체가 외부의 요청을 받는 메소드와 객체가 작업을 하는 구체적인 방법을 나눔으로써 매커니즘이 나눔으로써 매커니즘이 정해지는데 이게 바로 캡슐화이다.
-
객체는 다른 객체와 협력하기 위해 메시지를 전송하고 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.
-
객체지향은 클래스 기반이 아니라 객체를 중심으로 바라봐야한다. 지나치게 클래스를 강조하는 프로그래밍 언어적인 관점은 객체의 캡슐화를 저해하고 클래스를 서로 강하게 결합시킨다. 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가를 중요시 여기자.
-
클래스의 구조와 메서드가 아니라 객체의 역할, 책임, 협력에 집중하라.
참고자료:
https://wedul.site/637 [wedul]