이상한 나라의 객체

log.yunsik·2022년 9월 30일
0
객체란 식별 가능한 개체 또는 사물이다.
객체는 만질 수 있는 구체적인 사물일 수도 있고 시간처럼 추상적인 개념일 수도 있다.
객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.
소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.

상태

과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안했다.
상태를 이용하면 과거의 행동 이력을 설명하지 않고 행동의 결과를 쉽게 예측하고 설명할 수 있다.

객체의 상태는 "단순한 값"과 "객체의 조합"으로 표현되고 이를 "프로퍼티"라고 한다.
프로퍼티는 변경되지 않고 고정되기 때문에 정적이다.
프로퍼티 값은 시간이 흐름에 따라 변경되기 때문에 동적이다.

링크
객체와 객체 사이의 의미 있는 연결을 "링크"라고 한다.
링크가 존재해야만 메세지를 주고받을 수 있다.
링크는 다른 객체를 참조할 수 있다는 것을 의미하며 일반적으로 한 객체가 다른 객체의 식별자를 알고 있는 것으로 표현된다.

상태를 변경하는 방법
객체는 자율적인 존재로 다른 객체의 상태에 직접 접근할 수도 상태를 변경할 수도 없다.
객체는 스스로 자신의 상태를 책임져야 하며 이를 통해 객체의 자율성을 유지한다.
객체가 협력하기 위해선 외부의 객체는 간접적으로 다른 객체의 상태를 변경하거나 조회할 수 있는 방법이 필요하다.
행동은 다른 객체로 하여금 간접적으로 객체의 상태를 변경하는 것을 가능하게 한다.

행동

행동이란 외부의 요청 또는 수신된 메세지에 응답하기 위해 동작하고 반응하는 활동이다.
객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.

객체의 행동으로 인해 발생하는 결과

  • 객체 자신의 상태 변경
  • 행동 내에서 협력하는 다른 객체에 대한 메세지 전송

객체가 협력하는 방법
객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에게 메세지를 보내는 것이다.
객체가 어떤 행동을 하도록 만드는 것은 객체가 외부로부터 수신한 메세지다.
행동을 유발하는 것은 전달된 메세지지만 상태를 변경할지 여부는 객체 스스로 결정한다.
외부의 객체는 메세지를 수신하는 객체의 상태가 변경된다는 사실조차 알지 못한다.
메세지 송신자는 메세지를 전달할 뿐 메세지를 해석하고 반응할지는 메세지 수신자의 자율적인 판단에 따른다.
객체의 행동은 객체가 협력에 참여할 수 있는 유일한 방법이다.
객체는 수신된 메세지에 따라 적절히 행동하며 협력에 참여하고 자신의 상태를 변경한다.
협력에 참여하면서 다른 객체의 상태 변경을 유발할 수도 있다.

행동만 노출하는 이유
객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.
객체가 외부에 노출하는 것은 행동 뿐이며 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동 뿐이다.
상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화 하는것은 결과적으로 객체의 자율성을 높인다.
협력에 참여하는 객체들의 자율성이 높아질수록 협력은 유연하고 간결해진다.
즉 캡슐화 하는것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다.
이것이 캡슐화 해야 하는 이유이다.

식별자

객체란 식별 가능한 경계를 가진 모든 사물을 의미한다.
식별 가능하다는 것은 객체를 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다.
이 프로퍼티를 식별자라고 한다.
식별자란 어떤 객체를 다른 객체와 구분하는데 사용하는 객체의 프로퍼티이다.
모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별할 수 있다.

단순한 값과 객체의 차이
단순한 값과 객체의 가장 큰 차이점은 값은 식별자를 가지지 않지만 객체는 식별자를 가진다.

동등성과 동일성
상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 "동등성"이라고 한다.
상태를 이용해 동등성을 판단할 수 있는 이유는 값의 상태가 변하지 않기 때문이다.
값은 오직 상태만을 이용해 동등성을 판단하기 때문에 별도의 식별자를 필요로하지 않는다.

식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질을 "동일성"이라고 한다.
상태를 기반으로 동일성을 판단할 수 없는 이유는 상태는 시간에 따라 변화하기 때문이다.
객체는 시간에 따라 변경되는 상태를 포함하며 행동을 통해 상태를 변경한다.
따라서 동일성을 판단하기 위해서는 상태 변경에 독립적인 식별자가 필요하다.
두 객체의 상태가 다르더라도 식별자가 같다면 두 객체를 같은 객체로 판단할 수 있다.

객체를 칭하는 또다른 용어
객체와 값을 지칭하는 별도의 용어를 사용하기도 한다.
참조 객체 또는 엔터티는 식별자를 지닌 전통적인 의미의 객체를 가리키는 용어다.
값 객체는 식별자를 가지지 않는 값을 가리키는 용어다.

0개의 댓글