반응형
02. 이상한 나라의 객체
객체지향과 인지 능력
- 객체지향은 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 인지 능력에 기반을 두고 있다.
- 인간의 인지 능력은 물리적인 경계를 넘어 개념적으로 경계를 지을 수 있다.
객체, 그리고 이상한 나라
앨리스 객체
- 행동에 따라 상태가 변한다.
- 상태를 결정하는 것은 행동이지만, 행동의 결과를 결정하는 것은 상태다.
- 따라서, 행동의 결과는 상태에 의존적이다.
- 행동의 성공 여부는 이전에 어떤 행동들이 발생했는지에 영향을 받는다.
- 행동 간의 순서의 중요성을 의미한다.
- 행동에 의해 상태가 변경되더라도, 객체는 유일한 존재로 식별 가능하다.
객체, 그리고 소프트웨어 나라
- 객체: 상태, 행동, 식별자를 지닌 실체로 보자.
상태(State)
- 어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다.
- 행동의 과정과 결과를 단순하게 기술하는 상태.
- 값들은 객체가 아니라, 객체의 상태를 표현하기 위해 사용된다.
- 때로는 객체로 상태를 나타내기도 한다.
- 객체의 상태를 구성하는 모든 특징을 프로퍼티라고 한다.
- 변경되지 않고 고정되기 때문에 정적이다.
- 하지만 프로퍼티 값은 시간에 따라 변하므로 동적이다.
프로퍼티의 두 종류
- 링크: 객체와 객체 사이의 의미있는 연결
- 속성: 객체를 구성하는 단순한 값
행동(Behavior)
- 객체의 상태는 저절로 변하지 않는다.
- 자발적인 행동에 의해 변한다.
- 행동은 자신의 상태를 변경시킨다. (부수 효과)
상태와 행동사이의 관계
- 객체의 행동은 상태에 영향을 받는다.
- 상호작용이 현재의 상태에 어떤 방식으로 의존하는가
- 객체의 행동은 상태를 변경시킨다.
- 상호작용이 어떻게 현재의 상태를 변경시키는가
- 객체 공동체에 참여하기 위해 다른 객체와 적극적으로 상호작용한다.
- 다른 객체에 요청을 하는 것(메시지)
- 자기 자신의 상태 혹은 다른 객체의 상태 변경을 유발한다.
- 객체 자신의 상태 변경
- 행동 내에서 협력하는 다른 객체에 대한 메세지 전송
캡슐화
- 현실 객체는 능동적일 수 있으나, 객체지향에서는 모든 객체는 스스로 관리하는 자율적인 존재다.
- 따라서, 외부에서 자신의 상태를 변경할 수 없다.
- 자신의 상태 변경은 자기 스스로의 몫이다.
- 메시지를 송신한 객체는 수신한 객체의 상태 변경에 대해서는 전혀 알지 못한다.
- 상태는 내부에 감추고, 행동만 노출시킴으로 자율성을 높인다.
- 자율성이 높은 객체는 스스로 결정하기 때문에 객체의 지능도 높아진다.
- 지능이 높아질수록 협력은 유연하고 간결해진다.
식별자(Identity)
- 객체가 식별 가능하다. -> 객체를 구별할 수 있는 특정한 프로퍼티가 객체안에 존재한다.
- 식별자란 그 특별한 프로퍼티를 의미한다.
- 반대로 객체가 아닌 단순한 값은 식별자를 갖지 않는다.
값(Value)
- 변하지 않는 양을 모델링 한다.
- 상태는 변하지 않기 때문에 불변 상태를 가진다.
- 두 인스턴스의 상태가 같다면, 두 인스턴스를 같은 것으로 판단한다.
- 이처럼 상태를 이용해 두 값이 같은지 판단할 수 있는 성질을 동등성이라고 한다.
- 상태를 기준으로 동등성을 판별하기 때문에 식별자가 필요하지 않다.
객체(Object)
- 시간에 따라 변경되는 상태를 포함한다.
- 상태가 변하기 때문에 가변 상태를 가진다.
- 두 객체의 상태가 같더라도, 두 객체는 독립적인 별개의 객체로 다룬다.
- 이름이 같다고 같은 객체가 아니다.
- 상태와 무관하게 두 객체를 동일하거나 다르다고 판단할 수 있는 프로퍼티를 가진다.
- 식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질을 동일성이라고 한다.
- 상태를 기준으로 판단할 수 없는 이유는 시간의 흐름에 따라 객체의 상태가 변하기 때문이다.
값 != 객체
- 객체를 의미하는 다양한 용어들(식별자를 가진)
- 참조 객체
- 엔티티
- 값을 의미하는 용어(식별자가 없는)
- 값 객체
행동이 상태를 결정한다
- 초보자: 객체에 필요한 상태가 무엇인지를 결정하고, 그 상태에 필요한 행동을 결정
- 하지만 이 경우 설계에 나쁜 영향을 끼친다.
- 상태를 먼저 결정할 경우, 캡슐화가 저해된다.
공용 인터페이스에 그대로 노출된다. - 객체를 협력자가 아닌 고립된 섬으로 만든다.
객체는 다른 객체와 협력하기 위해 필요하다. - 객체의 재사용성이 저해된다.
- 상태를 먼저 결정할 경우, 캡슐화가 저해된다.
- 협력에 참여하는 객체는 상태가 아니라 행동에 초점
- 행동을 결정하고, 행동에 필요한 정보가 무엇인지 고려하는 설계
- 협력 안에서의 행동은 결국 객체가 완수해야하는 책임
- 책임 주도 설계(Responsibility-Driven Design, RDD)
은유와 객체
- 객체지향을 현실 세계의 추상화(자신이 원하는 특성만 취한다)
- 현실을 간추려 핵심만 표현하는 것.(아니다)
의인화
- 현실 속에서는 수동적인 존재가, 소프트웨어 세계에서는 능동적
- 현실보다 더 많은 것을 할 수 있는 소프트웨어 내의 객체
은유
- 현실 속의 객체의 의미 일부는 소프트웨어 객체로 전달된다.
- 소프트웨어의 객체는 현실 속의 객체의 은유다.
- 표현적 차이와 의미적 차이라는 논점
- 차이는 소프트웨어에 대해 사람들이 생깍하는 모습과 실제 소프트웨어의 표현 사이의 차이
- 실제 객체의 이름을 소프트웨어 객체의 이름으로 사용한다면 구조를 쉽게 예측한다.
- 즉, 이해하기 쉽고, 유지보수가 용이한 소프트웨어를 만든다.
이상한 나라를 창조하라
- 우리의 목적은 현실을 모방하는 것이 아니라, 나만의 소프트웨어 세계를 창조하는 것
반응형
'Book Record' 카테고리의 다른 글
[객체지향의 사실과 오해] Chapter4. 역할, 책임, 협력 (0) | 2021.04.20 |
---|---|
[객체지향의 사실과 오해] Chapter3. 타입과 추상화 (0) | 2021.04.20 |
[객체지향의 사실과 오해] Chapter1. 협력하는 객체들의 공동체 (0) | 2021.04.20 |
[Objects] Chapter5. 책임 할당하기 (0) | 2021.04.20 |
[Objects] Chapter4. 설계 품질과 트레이드 오프 (0) | 2021.04.20 |
댓글