[Book]객체 지향의 사실과 오해, 조영호: 1장

Hyunta·2021년 9월 16일
0
post-thumbnail

1. 협력하는 객체들의 공동체

객체 지향 패러다임의 핵심이 자율적인 객체들의 협력

"객체지향이란 실세계를 직접적이고 직관적으로 모델링할 수 있는 패러다임"

객체 지향 프로그래밍 : 현실 -> 소프트웨어

하지만 실세계와 소프트웨어는 구동방식이 다르다. 기본 사상만 유지하자.

협력하는 사람들

카페에서 커피를 주문하고 받는데 까지 역할, 책임, 협력이라는 개념을 통해 조화가 완성된다.

주문하는 손님, 주문받는 캐시어, 커피제조하는 바리스타 라는 역할

손님은 커피를 주문할 책임, 캐시어는 주문을 받는 책임, 바리스타는 커피를 제조하는 책임

커피 주문이라는 협력에 3명이 정확하게 주문되고 커피가 전달될 수 있도록 역할과 책임을 다한다.

요청과 응답으로 구성된 협력

특정한 역할(role)에는 특정한 책임이라는 개념을 내포한다.

  • 여러 사람이 동일한 역할을 수행할 수 있다.
  • 역할은 대체 가능성을 의미한다.
    • 캐시어가 동일한 역할을 할 수 있다면 대체 가능(substituable)하다.
  • 책임을 수행하는 방법은 자율적으로 선택할 수 있다.
    • 다형성(polymorphism) - 바리스타마다 동일한 요청에 대해 서로 다른 방식으로 응답할 수 있다.
  • 한 사람이 동시에 여러 역할을 수행할 수 있다.

역할, 책임, 협력

사람 - 객체

요청 - 메시지

처리 방법 - 메서드

객체들은 애플리케이션의 기능을 구현하기 위해 협력한다.

적절한 개체에게 적절한 책임을 할당하는 것에서 시작된다. 얼마나 적절하게 책임을 선택하느냐가 중요하다. 불분명한 책임은 애플리케이션을 불분명하게 만든다.

협력 속에 사는 객체

협력의 품질을 결정하는 것은 객체의 품질이다.

  1. 객체는 충분히 '협력적'이어야 한다.

    다른 객체의 요청을 들어야 한다.

    모든 것을 스스로 처리하는 전지전능 객체는 자멸한다.

    다른 객체의 명령을 듣는 것이 아니라 요청에 응답을 한다. 응답 방식과 요청에 수락 여부는 객체가 정한다.

  1. 객체는 충분히 '자율적'이어야 한다.

    공동 목표를 위해서 협력하지만 객체 스스로의 결정과 판단에 따라 행동하는 자율적인 존재다.

객체 = 상태(state) + 행동(behavior)

객체가 자율적인 존재가 되기 위해서는 필요한 행동과 상태를 함께 지니고 있어야 한다. 객체 내부는 차단하고, 접근이 허락된 수단을 통해서만 객체와 소통한다.

ex) 바리스타는 커피 제조방법을 아는 상태로 방법에 따라 커피를 제조한다.

각 객체는 메세지를 송신과 수신을 통해 전달하고 소통한다.

외부의 요청인 메시지와 요청을 처리하기 위한 메스드를 분리하여 자율성을 보장한다. 캡슐화(encapsulation) 와 관련된다.

객체지향의 본질

  • 객체지향이란 시스템을 상호작용하는 자율적인 객체들의 공동체로 바라보고 객체를 이용해 시스템을 분할하는 방법이다.
  • 자율적인 객체란 상태와 행위를 함께 지니며 스스로 자기 자신을 책임지는 객체를 의미한다.
  • 객체는 시스템의 행위를 구현하기 위해 다른 객체와 협력한다. 각 객체는 협력 내에서 정해진 역할을 수행하며 역할은 관련된 책임의 집합이다.
  • 객체는 다른 객체와 협력하기 위해 메시지를 전송하고, 메시지를 수신한 객체는 메시지를 처리하는 데 적합한 메서드를 자율적으로 선택한다.

중요한 것은 어떤 클래스가 필요한가가 아니라 어떤 객체들이 어떤 메시지를 주고받으며 협력하는가다.

profile
세상을 아름답게!

0개의 댓글