본문 바로가기

Study

객체지향의 사실과 오해 스터디 2장 발표 자료

02 이상한 나라의 객체

목차

  • 02 이상한 나라의 객체
    • 객체지향과 인지 능력
    • 객체, 그리고 이상한 나라
      • 이상한 나라의 앨리스
      • 앨리스 객체
    • 객체, 그리고 소프트웨어 나라
      • 상태
      • 행동
      • 식별자
    • 기계로서의 객체
    • 행동이 상태를 결정한다
    • 은유와 객체
      • 두 번째 도시전설
      • 의인화
      • 은유
      • 이상한 나라를 창조하라

02 이상한 나라의 객체

서문

  • 아기들 역시 세상을 객체들의 집합으로 바라본다. 즉, 인간의 객체지향성은 선천적인 것이다.

객체지향과 인지 능력

  • 인간은 객체지향적으로 세상을 이해한다. 따라서 실제 세상의 객체를 중심으로 소프트웨어에서의 객체를 이해하는 과정이 수월하다.
  • 객체는 구분할 수 있는 개념 또는 사물이며, 실세계는 소프트웨어와 마찬가지로 객체들로 가득하다.
  • 인간은 복잡한 세상을 이해하기 위해 본능적으로 세상을 분해하고 각 객체들의 집합으로 인식한다.
  • 현실세계의 객체와는 달리, 소프트웨어의 객체는 모두 자율적으로 행동할 수 있다.

객체, 그리고 이상한 나라

이상한 나라의 앨리스

  • 이상한 나라의 앨리스는 객체들과의 상호작용을 통해 작은 문을 통과한다.

앨리스 객체

  • 앨리스라는 객체는 작은 문을 통과하는 행동을 수행하기 위해, 여러 가지 행동으로 자신의 상태인 키를 변화시켰다.
  • 행동을 하기 전의 상태는 행동 후의 상태를 결정한다. 즉, 행동의 결과는 상태 의존적이다.
  • 행동의 결과는 이전의 행동에 영향을 받는다.
  • 객체는 상태에 관계 없이 유일하게 식별 가능하다.

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

상태

왜 상태가 필요한가

  • 상태는 이전에 누적된 행동의 결과를 담고 있다.
    • 모든 행동의 수행내역을 기록하는 것은 어렵기 때문에, 상태로써 이전에 수행한 모든 행동의 결과를 확인하고, 현재 행동의 결과를 판단하는 판단자로 삼는다. 이는 판단에 필요한 변수를 단순화하여, 과거를 기반으로 복잡한 정보를 분석할 필요 없이 현재의 행동을 결정할 수 있게 해 준다.

상태와 프로퍼티

  • 단순히 다른 객체의 특성을 설명하거나 현재 상태를 표현하는 데 이용되는 값은 객체가 아니다.
  • 상호 연결된 복잡한 상태를 설명하기 위한 집합은 객체다.
  • 모든 상태는 값과 객체 간 조합으로 설명할 수 있다. 객체의 구조적 특징을 담고 있다.
  • 상태는 보다 작은 단위의 특징인 프로퍼티(property)로 구성되어 있다. 프로퍼티는 일반적으로 변하지 않으므로 정적이다. 프로퍼티는 링크와 속성으로 표현될 수 있다.
    • 객체 간 의미 있는 연결을 링크(link)라고 한다. 상호 링크된 객체들은 서로의 식별자를 알고 있으며, 이는 서로를 참조할 수 있게 해 준다. 따라서 객체 간 메시지를 통해 요청과 응답할 수 있다.
    • 링크와 반대되는 개념인 속성(attribute)는 객체를 구성하는 단순한 값이다.
  • 프로퍼티 값은 시간이 경과함에 따라 변하므로 동적이다.
  • 객체 간 연결되었다는 것은 상호 인지하는 상태를 뜻한다. 따라서 객체 간 연결이 해제되면 서로 알지 못하는 상태로 되돌아간다.
  • 객체는 자율적이므로 스스로의 상태를 직접 관리해야 한다. 따라서 각 객체는 다른 객체의 상태에 직접 관여할 수 없다. 따라서 간접적으로 관여하기 위해 사용하는 것이 행동이다. 이는 각 객체의 자율성을 보장하면서도 객체 간 상호작용을 가능하게 해 준다.

행동

상태와 행동

  • 상태는 객체 스스로의 자발적인 행동을 통해서만 변경될 수 있다. 모든 객체는 자율성을 가지기 때문이다. 이는 자율적인 객체인 앨리스가 스스로 음료를 마시는 행동을 통해 자신의 상태인 키를 변경한 것과 마찬가지이다.
  • 상태를 변경하는 행동은 부수 효과(side effect)를 낳는다. 앨리스는 케이크를 먹음으로써 키가 작아지는 부수 효과를 초래했다.
  • 행동의 결과는 상태 의존적이므로, 같은 행동은 항상 같은 결과로 이어지지 않는다.

협력과 행동

  • 어떤 객체도 독립적으로 존재하지 않는다.
  • 모든 객체는 메시지를 이용한 요청과 응답을 통해 협력한다.
  • 행동은 다른 객체와의 협력 수단이므로, 외부에서 볼 수 있어야 한다.

상태 캡슐화

  • 모든 객체는 자율적이므로 다른 객체의 요청만을 받는다. 자신의 상태에 대한 모든 결정은 스스로 한다.
  • 각 객체는 다른 객체의 상태를 알 수 없으며, 이는 객체들의 자율성을 높이는 결과를 낳는다.

식별자

  • 객체를 구분하는 프로퍼티를 식별자라고 하며, 모든 객체는 식별자를 통해 다른 객체와 구분된다.
    • 식별자를 사용하는 이유는 같은 상태의 서로 다른 객체가 존재하기 때문이다.
    • 두 객체가 같은지를 판단할 때는 식별자의 동일성(identical)을 이용한다.
    • 두 값이 같은지를 판단할 때는 값의 동등성(equality)을 이용한다.
    • 동일성과 동등성이 모두 일치해야 같은 객체로 간주한다.
    • 이중 비교가 필요한 이유는, 같은 식별자의 객체와 같은 값의 객체가 모두 있을 수 있기 때문이다.
  • 값은 상태가 변하지 않기 때문에 식별자를 가지지 않고, 값만 비교(동등성)하면 충분하다.
  • Entity는 식별자를 가진다.
  • VO(Value Object)는 값을 표현하는 객체로서 식별자를 가지지 않는다.

기계로서의 객체

  • 객체는 내부를 알 수 없는 블랙박스와 같다.
    • 블랙박스의 내부를 볼 수 없지만, 기계의 인터페이스인 버튼을 눌러 상태를 조회하거나 변경할 수 있다.
    • 동작 방식은 자율성을 가진 기계 스스로 결정한다.
    • 캡슐화의 특성을 가지고 있다.
    • 식별자가 존재하기 때문에, 똑같은 기계가 두 개 있어도 서로 다른 객체로 인식한다.

행동이 상태를 결정한다

  • 객체는 행동을 먼저 결정한 후 상태를 결정해야 한다.
    • 캡슐화, 객체 간 연결성, 재사용성이 증대한다.
    • 애플리케이션의 목적을 위한 행동을 만들게 된다.

은유와 객체

두 번째 도시전설

  • 객체지향은 현실 세계의 추상화가 아니다.
    • 객체지향 세계의 객체는 스스로 행동을 수행하며, 이는 현실 세계의 객체와 다르다.

의인화

  • 객체지향 세계의 객체가 현실 세계의 객체보다 많은 일을 할 수 있는 특성을 의인화(anthropomorphism)라고 한다.

은유

  • 현실 세계와 객체지향 세계의 관계는 은유(metaphor)로 표현할 수 있다.
    • 은유는 한 가지 개념으로 다른 개념을 서술하는 것이다.
    • 실제로는 다르지만, 유사성을 이용해 현실 객체로 객체지향 세계의 객체를 설명할 수 있다. 이를 통해 객체지향 세계의 객체를 쉽게 이해하고 유지보수할 수 있다.

이상한 나라를 창조하라

  • 객체지향 설계자는 의인화된 객체들이 존재하는 이상한 나라를 창조해야 한다.