제 블로그의 모든 글은 IMHO로 쓴 것입니다. 잘못된 부분이 있으면 덧글을 통해서 소통을 하면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 그렇지만 소통을 할 때 서로의 감정을 존중하는 선에서 해주셨으면 좋겠습니다. 감사합니다:)
—
http://www.yes24.com/Product/Goods/18249021?Acode=101 위 책의 내용을 요약하며 쓴 포스트 입니다. —
객체지향과 인지 능력
객체지향 패러다임은 인간이 인지할 수 있는 다양한 객체들이 모여 현실 세계를 이루는 것처럼 소프트웨어의 세계 역시 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다는 믿음에서 시작한다. 하지만 유사성일 뿐이지, 객체 지향 패러다임의 목적은 현실 세계 모방이 아닌 현실 세계 기반 새로운 세계 창조임을 잊지 말아야 한다.
객체, 그리고 이상한 엘리스
앞 단원에서 상태와 행위가 객체를 구성하고 있다고 했다. 이 때 모든 객체의 행동 결과는 객체 상태에 의존적이다. 그렇기에 행동의 순서 역시 중요하다. 또한 각 객체의 상태가 변화하는 것은 요청과 응답에 의해 바뀐다.
상태를 결정하는 것은 행동이지만, 행동의 결과를 결정하는 것은 상태이다. 다시말해 행동의 결과는 상태에 의존적이다. 행동에 의해 상태가 변경된다 하더라도 우리는 객체를 유일한 객체로써 식별할 수 있다.
객체, 그리고 소프트웨어 나라
객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적이다.
1. 상태
어떤 행동의 결과는 과거 행동들에 의존한다.
ex)문을 통과(결과)하기 위해 앨리스는 키를 변화(과거행동)시킨다. 이러한 과거 행동을 기억(상태)해야한다.
모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다. 이 때 두가지 개념이 있다.
- 프로퍼티 객체의 상태를 구성하는 모든 특징
- 프로퍼티 value 시간에 흐름에 따라 변화하는 것
2. 행동
행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다.
- 상태와 행동 사이의 관계
- 객체의 행동은 상태에 영향을 받는다.
- 객체의 행동은 상태를 변경시킨다.
- 행동을 서술하는 두 가지 관점
- 상호작용이 현재의 상태에 어떤 방식으로 의존하는가.
- 상호작용이 어떻게 현재의 상태를 변경시키는가.
- 객체의 행동으로 인해 발생하는 결과를 설명하는 두 가지 관점
- 객체 자신의 상태 변경.
- 행동 내에서 협력하는 다른 객체에 대한 메시지 전송.
3. 식별자
객체가 식별 가능하다는 것은 객체를 서로 구별할 수 있는 특정한 프로퍼티가 객체 안에 존재한다는 것을 의미한다.
이 프로퍼티를 식별자라고 한다. 모든 객체는 식별자를 가지며 식별자를 이용해 객체를 구별할 수 있다.
용어
- reference obejct(혹은 entity)는 식별자를 지닌 전통적 의미의 객체
- value object 는 식별자를 가지지 않는 값
객체는 상태가 가변(mutalbe)하기 때문에 두 객체의 상태가 같더라도 독립적인 객체로 다루어야한다. 상태의 같음은 동등성(equality)으로, 객체의 같음은 동일성(identical)으로 부르고 동일성을 판단하게 해주는 것은 식별자이다.
기계로서의 객체
쿼리 - 상태의 조회 명령 - 상태의 변경
쿼리와 명령은 모두 메세지로 볼 수 있으며 이러한 메세지는 객체가 제공하는 인터페이스를 통해서 전달할 수 있다.
행동이 상태를 결정한다.
실수 - 객체를 설계할 때 상태를 먼저 결정하고 행동을 나중에 결정하여 나쁜 영향이 발생한다.
1. 캡슐화가 저해될 수 있다.
2. 객체를 협력하는 객체로 만들지 못한다.
3. 객체의 재사용성이 떨어진다.
따라서 객체를 설계할 때 행동에 초점을 맞춰 설계를 해야한다. 객체의 적합성을 결정하는 것은 객체의 상태가 아닌 행동이다. 객체가 해야할 책임에 대해 생각하며 객체 설계를 해야한다.
은유와 객체
소프트웨어 안에 구축되는 객체지향 세계는 현실을 모방한 것이 아니다. 현실의 모습을 조금 창조할 뿐 궁극적인 목적은 현실과 전혀 다른 새로운 세계를 차조하는 것이다. 현실 세계와 객체지향 세계 사이의 관계를 좀 더 정확하게 설명할 수 있는 단어는 “은유”이다.
참고자료:
https://github.com/Java-Bom/ReadingRecord/wiki/%5B%EB%B0%95%EC%B0%AC%EC%9D%B8%5D-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9D%98-%EC%82%AC%EC%8B%A4%EA%B3%BC-%EC%98%A4%ED%95%B4-(1,-2%EB%8B%A8%EC%9B%90) https://github.com/Java-Bom/ReadingRecord/wiki/%5B%EC%B5%9C%EC%9C%A0%EC%84%B1%5D-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5%EC%9D%98-%EC%82%AC%EC%8B%A4%EA%B3%BC-%EC%98%A4%ED%95%B4-2%EB%8B%A8%EC%9B%90