객체지향의 사실과 오해-역할,책임,협력 관점에서 본 객체지향

46 

  • 앨리스는 상태를 가지며 변경가능하다 (mutable)
  • 앨리스의 상태를 변경시키는 것은 앨리스의 행동 뿐이다.

  • 행동의 결과는 상태에 의존적이며, 상태를 이용해 서술할 수 있다.

  • 행동의 순서는 결과에 영향을 미친다.

  • 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다. 식별자는 immutable 하다.

55 객체의 모든 행동은 상태를 변화시키는가? - 아니오. 행동에는 상태변화와 메시지 전송이 있다. 메시지 전송 자체는 상태변화를 하지않는다.

55 객체 간의 유연한 협력과 객체 스스로의 높은 자율성은 상태의 캡슐화의 정도에 따른다.

행동의 두 가지 관점: 

  • 자신의 상태를 변경
  • 외부로의 메시지 전송

65 "협력에 참여하는 훌륭한 객체를 설계하기 위한 가장 중요한 덕목은 상태가 아니라 행동에 초점을 맞추는 것이다." 구인광고에 보면 '영상편집에 실력이 있는 사람을 뽑습니다' 라고 나와있듯이 행동에 역할을 부여하는 것이 훨씬 자연스럽다. 

행동이 상태를 결정한다.

69 '이 객체는 전화기 처럼 행동해요' - 은유를 사용하여 현실객체의 의미 일부를 소프트웨어 객체의 행동을 묘사하여 객체를 바라보는 시선을 바꿀 수 있게된다.

77 복잡한 세상을 단순하게 바꾸는 작업을 추상화 라고 한다. 복잡성을 다루기 위해 추상화는 두 차원에서 이루어진다.

  1. 구체적인 사물들 간의 공통점을 취하고 차이점은 버린다: 일반화
  2. 중요한 부분을 강조하고 부차적인 사항을 제거하라

객체라는 추상화를 통해 현실의 복잡성을 극복한다.

87 분류라는 행위를 통해 객체를 공통적인 특징들로 묶인 개념집합으로 위치시킬 수 있으며, 개발자에게 객체들을 더 빨리 찾고 조작할 수 있는 정신적인 지도를 제공해 줄 수 있다.

94 객체지향 시스템에서 동일한 개념집합에 속한 객체들을 하나의 '타입'에 속한 인스턴스로 구현할 수 있다. 즉, 개념은 타입이다. 객체가 동일한 타입을 갖기 위해선 동일한 행동, 동일한 메시지 송수신을 지원하여야 함을 의미하고, 이는 객체지향의 다형성을 의미한다. 

97 일반화와 특수화: 일반화 관계는 더 포괄적인 역할을 의미한다. 특수화 관계는 더 구체적이고 역할의 개수가 일반적인 모델에 비해 더 많다.

102 "타입은 시간에 따라 동적으로 변하는 앨리스의 상태를 시간과 무관한 정적인 모습으로 다룰 수 있게 해준다." - 정적타입

105 그러면 클래스는 뭐냐? 클래스는 많은 객체지향 언어들이 차용하는 타입의 구현을 지원하기 위한 매커니즘을 의미한다. 때론 클래스는 코드의 재사용에 사용 되기도 하기 때문에 타입==클래스 라고 생각할 순 없다. 

객체의 행동을 분류하기 위해 타입이 도입되었다는 점만 알아두고 가자.