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

객체, 그리고 이상한 나라

앨리스 객체

앨리스가 한 행동의 결과는 앨리스의 상태에 의존적이다.

→ 행동 전의 상태에 따라 결과값이 다르다.

어떤 행동의 성공 여부는 이전에 어떤 행동들이 발생했는지에 영향을 받는다.

→ 행동 간의 순서가 중요하다.

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

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

상태

어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다. 행동의 과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안했다.

그러나 모든 값들이 상태로 매칭되는 것은 아니다. 앨리스의 키와 위치처럼 모든 기능에 포괄적으로 필요한 값은 앨리스의 상태가 될 수 있고 음료처럼 단일성으로 사용되는 값은 메소드 내 내부 객체로 사용된다.

행동

행동은 다른 객체로 하여금 간접적으로 객체의 상태를 변경하는 것을 가능하게 한다. 객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이 부수 효과(side effect)를 초래한다는 것을 의미한다. 객체의 행동은 객체의 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존적이다.

음료가 자신의 양을 줄어들게 만든다는 것이 어색할 수 있겠으나 객체지향의 세계에서 모든 객체는 자신의 상태를 스스로 관리하는 자율적인 존재이다. 앨리스 객체의 키를 작게 만드는 것이 앨리스 자신인 것처럼 음료 객체의 양을 줄이는 것은 음료 자신 이어야 한다.

객체가 외부에 노출하는 것은 행동 뿐이며, 외부에서 객체에 접근할 수 있는 유일한 방법 역시 행동뿐이다.

메시지를 해석하고 그에 반응해서 상태를 변경할지 여부는 전적으로 메시지 수신자 의 자율적인 판단에 따른다.

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

식별자

객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다. 모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별할 수 있다.