객체, 그리고 이상한 나라
- 상태를 결정하는 것은 행동이지만, 행동의 결과를 결정하는 것은 상태다.
- 상태에 띠라서 행동을 결정함. 즉, 행동은 상태에 의존적임.
- 객체의 상태는 변경이 가능하며, 행동의 순서는 결과에 영향을 미침.
- 객체는 어떤 상태에 있더라도 식별이 가능함.
객체, 그리고 소프트웨어 나라
- 객체는 식별 가능한 개체 또는 사물이며, 구체적 혹은 추상적인 개념일 수도 있음.
- ex) 구체적 : 만질 수 있는 사물 (자동차, 핸드폰 등)
- ex) 추상적 : 시간
- 객체는 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적임.
상태
- 모든 일들의 어떤 행동에대한 결과는 과거에 어떤 행동들이 일어났었느냐에 의존함.
- 과거에 발생한 행동의 이력을 추적하는게 어려우므로, 행동의 과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안함.
- 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있음.
상태와 프로퍼티
- 모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다.
- 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 **프로퍼티(property)**라고 한다.
- 값이 변하지 않는 것은 정적 프로퍼티이며 값이 변하는 것은 동적 프로퍼티 값 이라고 부름.
- 객체와 객체 사이의 의미 있는 연결을 **링크(link)**라고 한다.
- 링크는 객체가 다른 객체를 참조할 수 있다는 것을 의미한다.
- 한 객체가 다른 객체의 식별자를 알고있는 것.
- 링크를 통해서만 메시지를 주고받을 수 있다.
- 객체를 구성하는 단순한 값은 **속성(attribute)**라고 불리며, 이는 프로퍼티의 일부분이다.
- 링크로 연결된 프로퍼티와 객체를 구성하는 단순한 값
객체지향의 세계에선 객체는 다른 객체의 상태에 직접적으로 접근 및 상태를 변경하는 것은 불가능함.
자율적인 객체는 자신 스스로 상태를 책임져야함.
행동
- 객체의 상태를 변경하는 것은 객체의 자발적인 행동 뿐임. → 객체의 행동은 상태를 변경시킴.
- 행동에 의해 상태가 변경되는 것은 side effect를 초래하는 의미임.
- ex) 엘리스가 케이크를 먹는 행동은 키를 작게 변화시키고 케이크의 양을 줄임
- 객체의 행동은 상태에 영향을 받음. → 행동의 결과는 객체의 상태에 의존적임
- 문을 통과하려면 엘리스의 키는 150cm 이상이어야함.