객체지향의 사실과 오해(역할, 책임, 협력 관점에서 본 객체지향) ‐ 이상한 나라의 객체 - thought-corner/backend-roadmap GitHub Wiki

TL;DR

  • 객체지향 패러다임은 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이루어져 있다는 믿음으로부터 출발한다.

RFC 1

  • 상태(State) : 자판기에 충분한 금액을 투입하기 전에는 음료를 선택할 수 없다는 '상태', 엘리베이터가 움직이기 위해서는 먼저 원하는 층의 버튼을 눌러야 한다는 '상태', 텔레비전 전원을 켜지 않는 한 채널을 변경할 수 없다는 것과 같이 어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다는 것이다.
  • 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체 행동 방식을 이해할 수 있다.

RFC 2

  • 숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓과 같은 단순한 값들은 객체가 아니다.
  • 단순한 값들은 그 자체로 독립적인 의미를 가지기보다는 다른 객체의 특성을 표현하는데 사용된다. 다시 맗해 다른 객체의 상태를 표현하기 위해 사용된다.
  • 때로는 단순한 값이 아니라 객체를 사용해 다른 객체 상태를 표현해야 할 때가 있다.

RFC 3

  • 객체의 상태는 저절로 변경되지 않는다. 객체의 상태를 변경하는 것은 객체의 자발적인 행동뿐이다.
  • 객체가 취하는 행동은 객체 자신의 상태를 변경시킨다. 객체의 행동에 의해 상태가 변경된다는 것은 행동이 부수 효과를 초래한다는 것을 의미한다. 예를 들어, 앨리스가 케이크를 먹는 행위는 앨리스의 체중을 증가시키고 케이크의 양이 줄어든다와 같은 부수 효과말이다.
  • 객체 행동으로 인해 상태가 변화된다.

RFC 4

  • 외롭게 존재하는 객체란 있을 수 없다.
  • 객체는 자신에게 주어진 책임을 완수하기 위해 다른 객체를 이용하고 다른 객체에게 서비스를 제공한다. 객체는 다른 객체와 적극적으로 상호작용해 '협력하는 객체들의 공동체'에 참여하기 위해 노력한다.
  • 행동이란 외부 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다. 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.

RFC 5

  • 객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.
  • 객체가 외부에 노출하는 것은 행동뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동뿐이다.

RFC 6

  • 값(Value)은 숫자, 문자열, 날짜, 시간, 금액 등과 같이 변하지 않는 양을 모델링한다.
  • 흔히 값의 상태는 변하지 않기 때문에 불변 상태를 가진다고 말한다.
  • 값의 경우 두 인스턴스의 상태가 같다면 두 인스턴스를 같다고 판단한다.
  • 값이 같은지 여부는 상태가 같은지를 이용해 판단한다. 값의 상태가 같으면 두 인스턴스는 동일한 것으로 판단하고 상태가 다르면 두 인스턴스는 다른 것으로 판단한다.
  • 이처럼 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성이라고 한다. 상태를 이용해 동등성을 판단할 수 있는 이유는 값의 상태가 변하지 않기 때문이다.

TA