객체지향의 사실과 오해 (~ 52p)

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

시너지를 생각하라. 전체는 부분의 합보다 크다. - 스티븐 코비

협력 속에 사는 객체

  • 객체는 충분히 협력적이어야 한다.
    • 외부의 도움을 무시한 채 모든 것을 스스로 처리하려고 하는 전지전능한 객체(god object)는 내부 복잡도에 의해 자멸한다.
    • 객체는 다른 객체의 명령에 복종하는 것이 아니라 요청에 응답할 뿐이다.
  • 객체가 충분히 자율적이어야 한다.
    • 자율적 : 자기 스스로의 원칙에 따라 어떤 일을 하거나 자기 스스로를 통제하여 절제하는 것.
    • 어떤 방식으로 응답할지는 객체 스스로 판단하고 결정한다.
    • 심지어 요청에 응할지 여부도 객체가 스스로 결정할 수 있다.
  • 객체들은 공동의 목표를 달성하기 위해 협력에 참여하지만 스스로의 결정과 판단에 따라 행동하는 자율적인 존재다.

  • 객체의 자율성은 내부와 외부를 명확하게 구분하는 것으로부터 나온다.
    • 객체의 사적인 부분은 객체 스스로 관리, 외부 간섭 차단.
    • 객체의 외부에서는 접근이 허락된 수단을 통해서만 소통.
    • 다른 객체가 무엇(what)을 수행하는지는 알 수 있지만,
    • 어떻게(how) 수행하는지에 대해서는 알 수 없다.
  • 객체지향 프로그래밍 언어에서 메시지를 수신한 객체가 실행 시간에 메서드를 선택한다.
    • 이는, 프로시저 호출에 대한 실행 코드를 컴파일 시간에 결정하는 절차적인 언어와 확연히 구분되는 특징이다.

2. 이상한 나라의 객체

객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.