02. 이상한 나라의 객체

 · 5 mins read

02. 이상한 나라의 객체


객체지향과 인지 능력

  • 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다.

  • 소프트웨어의 세계는 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다.


객체, 그리고 이상한 나라

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


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

  • 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적

  • 이상한 나라의 앨리스는 상태, 행동, 식별자를 지닌 실체다.

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


상태

  • 어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다.

  • 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.

  • 객체의 상태를 구성하는 모든 특징을 통틀어 객체의프로퍼티라고 한다.
    • 프로퍼티는 변경되지 않고 고정되어 정적이다.
    • 반면 프로퍼티 값은 시간이 프름에 따라 변경되기 때문에 동적이다.
  • 객체와 객체 사이의 의미 있는 연결을 링크(link)라고 한다.
    • 객체의 링크를 통해서만 메시지를 주고 받을 수 있다.
    • 링크는 객체가 다른 객체를 참조할 수 있다는 것을 의미
    • 한 객체가 다른 객체의 식별자를 알고 있는 것으로 표현
  • 객체를 구성하는 단순한 값은 속성(attribute)

  • 객체의 프로퍼티는 단순한 값인 속성과 다른 객체를 가리키는 링크라는 두 가지 종류의 조합으로 표현할 수 있다.
객체의 상태란?
특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다.
	- 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성
	- 객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분
  • 행동은 다른 객체로 하여금 간접적으로 객체의 상태를 변경하는 것을 가능하게 한다.

  • 객체지향의 기본 사상은 상태와 상태를 조작하기 위해 행동을 하나의 단위로 묶는 것!

  • 객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지


행동

상태와 행동

  • 객체의 행동은 객체의 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존적이다.
  • 상태와 행동 사이의 관계
    • 객체의 행동은 상태에 영향을 받는다.
    • 객체의 행동은 상태를 변경시킨다.
  • 상태의 개념을 이용해 행동을 서술
    • 상호작용이 현재의 상태에 어떤 방식으로 의존하는가
    • 상호작용이 어떻게 현재의 상태를 변경시키는가
  • 객체는 다른 객체와 적극적으로 상호작용하며 협력하는 객체들의 공동체에 참여하기 위해 노력한다.

협력과 행동

  • 객체의 행동으로 인해 발생하는 결과
    • 객체 자신의 상태 변경
    • 행동 내에서 협력하는 다른 객체에 대한 메시지 전송
행동이란?
외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다.
	- 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에세 메시지를 전달할 수 있다.
	- 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.

상태 캡슐화

  • 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.

  • 객체가 외부에 노출하는 것, 외부에서 객체에 접근할 수 있는 것은 행동뿐이다.

  • 상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다.


식별자

  • 객체를 서로 구별할 수 있는 특정한 프로퍼티(식별자)가 객체 안에 존재한다.

  • 값(value)은 불변 상태(immutable state) , 객체는 가변 상태(mutable state)

  • 동등성(equality) : 상태를 이용해 두 값이 같은지 판단할 수 있는 성질

  • 동일성(identical) : 식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질

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

객체의 특성

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


기계로서의 객체

  • 일반적으로 객체의 상태를 조회하는 작업을 Query
  • 객체의 상태를 변경하는 작업을 Command 라고 한다.

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


행동이 상태를 결정한다.

  • 상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다.
    1. 상태를 먼저 결정할 경우 캡슐화가 저해된다
    2. 객체를 협력자가 아닌 고립된 섬으로 만든다.
    3. 객체의 재사용성이 저하된다.
  • 협력에 참여하는 훌륭한 객체 시민을 양성하기 위한 가장 중요한 덕목은 상태가 아니라 행동에 초점을 맞추는 것!

  • 객체의 적합성을 결정하는 것은 상태가 아니라 객체의 행동이다.

  • 객체의 행동을 결정하고 그 후에 행동에 적절한 상태를 선택하자.

은유와 객체

의인화

  • 현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다.
    • 현실 객체가 가지지 못한 추가적인 능력을 보유하게 된다.
  • 객체지향 세계는 현실의 모습을 조금 참조할 뿐 궁극적인 목적은 현실과 전혀 다른 새로운 세계를 창조하는 것이다.

  • 객체지향의 세계는 현실의 추상화가 아니다. 객체지향 세계의 거리는 현실 속의 객체보다 더 많은 특징과 능력을 보유한 객체들로 넘쳐난다,

은유

  • 현실 속의 객체의 의미 일부가 소프트웨어 객체로 전달되기 때문에 프로그램 내의 객체는 현실 속의 객체에 대한 은유
  • 현실 세계인 도메인에서 사용되는 이름을 객체에게 부여하자.
현실 속의 객체의 이름을 이용해 객체를 묘사하고 우리들 만의 새로운 세계를 창조해보자.