Skip to main content

2. 이상한 나라의 객체

객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 합니다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제입니다.

2.1 객체지향과 인지 능력#

  • 객체지향을 직관적이고 이해하기 쉬운 패러다임으로 말하는 이유는 객체지향이 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력에 기반을 두고 있기 때문입니다.
  • 인간이 판단할 수 있는 객체는 물리적인 한계를 넘어 개념적으로도 경계를 지을 수 있습니다. (ex. 주문, 계좌이체 등 모두 추상적 개념)
  • 소프트웨어 또한 다양한 소프트웨어 객체들이 모여있다는 믿음에서 출발합니다.
  • 다만, 유사성은 이정도 까지며 내부에서는 이질적인 모습을 볼 수 있습니다.

2.2 객체, 그리고 이상한 나라#

이상한 나라의 앨리스#

  • 이상한 나라의 이야기... (생략)

엘리스 객체#

앨리스의 행동을 요약하면 다음과 같습니다.

  • 앨리스는 상태를 가지며 상태는 변경 가능합니다.
  • 앨리스의 상태를 변경시키는 것은 앨리스의 행동입니다.
    • 행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있습니다.
    • 행동의 순서가 결과에 영향을 미칩니다.
  • 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능합니다.

2.3 객체, 그리고 소프트웨어 나라#

  • 식별 가능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있습니다.
  • 독립적인 하나의 단위로 인식할 수 있는 모든 사물은 객체입니다.
  • 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태(state), 행동(behavior), 식별자(identity) 을 지닌 실체로 보는 것이 가장 효과적입니다.

상태#

  • 상태를 이용하면 과거에 얾매이지 않고, 현재를 기반으로 객체의 행동 방식을 이해할 수 있습니다.
  • 상태는 복잡성을 완화하는 중요한 개념입니다.

상태와 프로퍼티#

상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현합니다. 객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성됩니다. 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있습니다.

행동#

상태와 행동#

  • 객체의 행동은 상태에 영향을 받습니다.
  • 객체의 행동은 상태를 변경시킵니다.

협력과 행동#

행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동입니다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있습니다. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 합니다.

상태 캡슐화#

  • 상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화하는 것은 결과적으로 객체의 자율성을 높입니다.
  • 자율적인 객체가 스스로 판단하고 결정하면, 단순해지며, 협력은 유연하고 간결해집니다.

식별자#

  • 값(value) : 숫자, 문자열, 날짜, 시간, 금액 등과 같이 변하지 않는 양을 모델링합니다.
  • 동등성(equality) : 상태를 이용해 두 값이 같은지 판단할 수 있는 성질
  • 동일성(identical) : 식별자를 기반으로 객체가 같은지 판단할 수 있는 성질

식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티입니다. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야합니다. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스를 비교할 수 있습니다.

  • 참조 객체(reference object), 엔티티(entity) : 식별자를 지닌 전통적인 의미의 객체를 가리키는 용어
  • 값 객체(value object) : 식별자를 가지지 않는 값을 가리키는 용어

요약#

  • 객체는 상태를 가지며 상태는 변경 가능합니다.
  • 객체는 상태를 변경시키는 것은 객체의 행동입니다.
    • 행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있습니다.
    • 행동의 순서가실행 결과에 영향을 미칩니다.
  • 객체는 어떤 상태에 있더라도 유일하게 식별 가능합니다.

2.4 기계로서의 객체#

  • 쿼리(query) : 일반적으로 객체의 상태를 조회하는 작업
  • 명령(command) : 객체의 상태를 변경하는 작업

객체를 기계로서 바라보는 관점은 상태, 행동, 식별자에 대한 시각적인 이미지를 제공하고 캡슐화와 메시지를 통한 협력 관계를 매우 효과적으로 설명합니다.


2.5 행동이 상태를 결정합니다.#

다음과 같은 경우는 단점이 있습니다.

  1. 상태를 먼저 결정할 경우 캡슐화가 저해됩니다.
  2. 객체를 협력자가 아닌 고립된 섬으로 만듭니다.
  3. 객체의 재사용성이 저하됩니다.

객체는 다른 객체와 협력하기 위해 존재합니다. 이 책에서 핵심 중 하나는 책임-주도 설계(Responsibility-Driven Design, RDD) 는 협력이라는 문맥 안에서 객체의 행동을 생각하도록 도움으로써 응집도 높고 재사용 가능한 객체를 만들 수 있게 합니다.


2.6 은유와 객체#

두 번째 도시전설#

  • 모방과 추상화라는 개념만으로는 현실 객체와 소프트웨어 객체 사이의 관계를 깔끔하게 설명하지 못합니다.
  • 객체지향이 현실을 오롯이 모방한다는 것은 오해입니다.

의인화#

  • 소프트웨어 객체는 현실 객체이 못하는 일도 할 수 있습니다.
  • 소프트웨어 안에 구축되는 객체지향 세계는 현실의 모습을 참조하고, 새로운 세계를 창조하는 것입니다.

은유#

  • 은유란 실제로는 적용되지 않는 한 가지 개념을 이용해 다른 개념을 서술하는 대화의 형태입니다.
  • 실제 객체의 이름을 소프트웨어 객체의 이름으로 사용하면 표현적 차이를 줄여, 소프트웨어의 구조를 쉽게 예측할 수 있습니다.

이상한 나라를 창조하라#

객체지향 설계자로서 목적은 현실의 모방이 아닌 새로운 세계의 창조입니다.

Last updated on