- 인지능력 안에서 개수를 셀 수 있고, 다른 사물과 구분할 수 있으며, 생성 시점을 알 수 있고, 독립적인 하나의 단위로 인식할 수 있는 모든 사물은 객체다.
- 객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다.
객체란 식별 가능한 개체 또는 사물이다. 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다. 객체는 구별가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다. 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
상태와 프로퍼티
상태 : 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 쉽게 예측하고 설명할 수 있다.
객체의 상태
- property : 정적이다(변경되지 않고 고정적이다)
- link : 객체와 객체 사이의 의미있는 연결
- attribute : 객체를 구성하는 단순한 값
- property value : 동적이다( 시간의 흐름에 따라 변경된다)
상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다. 객체의 상태는 객체에 존재하는 정적인 "프로퍼티"와 동적인 "프로퍼티 값"으로 구성된다.
객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
객체는 자율적인 존재라는 점을 명심하라. 객체지향의 세계에서 객체는 다른 객체의 상태에 직접적으로 접근할 수도, 상태를 변경할 수도 없다. 자율적인 객체는 스스로 자신의 상태를 책임져야 한다.
간접적으로 객체를 변경하거나 조회할 수 있는 방법 : 행동
객체지향의 기본 사상은 상태와 상태를 조작하기 위한 행동을 하나의 단위로 묶는 점.
객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지한다.
상태와 행동
객체가 취하는 행동은 객체 자신의 상태를 변경시킨다. 객체의 행동에 의해 객체의 상태가 변경된다는 것은 행동이 부수효과(side effect)를 초래함을 의미한다.
- 객체의 행동은 상태에 영향을 받는다.
- 객체의 행동은 상태를 변경시킨다.
=> 상태라는 개념을 이용해 행동을 두 가지 관점에서 서술 할 수 있다.
- 상호작용이 현재의 상태에 어떤 방식으로 의존하는가.
- 상호작용이 어떻게 현재의 상태를 변경시키는가
ex.
- 앨리스의 키가 40cm 이하라면 문을 통과할 수 있다.
- 문을 통과한 후에 앨리스의 위치는 아름다운 정원으로 바뀌어야 한다.
협력과 행동
객체는 다른 객체와 적극적으로 상호작용 하며 '협력하는 객체들의 공동체' 에 참여하기 위해 노력한다.
객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에게 요청을 보내는 것이다. ( 메세지를 보냄)
객체는 외부로부터 수신된 메세지에 따라 적절히 행동하면서 협력에 참여하고 그 결과로 자신의 상태를 변경한다.
객체는 협력에 참여하는 과정에서 자기 자신의 상태 뿐 아니라 다른 객체의 상태변경을 유발할 수도 있다.
(ex. 앨리스가 우유를 마시면 앨리스의 키만 작아질 뿐 아니라 우유의 양도 줄어든다)
행동이란 외부의 요청 또는 수신된 메세지에 응답하기 위해 동작하고 반응하는 활동이다. 행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메세지를 전달할 수 있다. 객체는 해동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.
상태 캡슐화
메세지 송신자는 메세지 수신자의 상태 변경에 대해서는 전혀 알지 못한다.
상태를 외부에 노출시키지 않고 행동을 경계로 캡슐화 하는 것은 결과적으로 객체의 자율성을 높인다.
식별자
객체를 서로 구별할 수 있는 특정한 프로퍼티
값 : 식별자를 가지지 않음
숫자, 문자열, 날짜, 시간, 금액 등 변하지 않는 양을 모델링
값의 상태는 변하지 않음(불변 상태 immutable state)
상태가 같을 경우 동일함. -> 동등성(equality) : 상태를 이용해 두 값이 같은지 판단할 수 있는 성질
객체 : 식별자를 가짐
시간에 따라 변경되는 상태를 포함함.
행동에 따라 상태를 변경함. (가변상태 mutable state)
두 객체의 상태가 다르더라도 식별자가 같다면 두 객체를 같은 객체로 판단할 수 있다. -> 동일성(identical) : 식별자를 기반으로 객체가 같은지 판단할 수 있는 성질
식별자란 어떤 객체를 다른 객체와 구분하는 데 사용하는 객체의 프로퍼티다. 값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성검사를 통해 두 인스턴스를 비교해야 한다. 객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성검사를 통해 두 인스턴스를 비교할 수 있다.
- 객체는 상태를 가지며 상태는 변경가능하다.
- 객체의 상태를 변경시키는 것은 객체의 행동이다.
- 행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있다.
- 행동의 순서가 실행결과에 영향을 미친다.
- 객체는 어떤 상태에 있더라도 유일하게 식별가능하다.
쿼리(query) : 객체의 상태를 조회하는 작업
명령(command) : 객체의 상태를 변경하는 작업
행동이 상태를 결정한다
설계를 할 때는 상태를 기준으로 객체를 나누기보다는, 행동에 초점을 맞춰서 객체를 구성해야한다.
'책 > 객체지향의 사실과 오해' 카테고리의 다른 글
| 05. 책임과 메세지 (0) | 2022.07.19 |
|---|---|
| 04. 역할, 책임, 협력 (0) | 2022.07.12 |
| 03. 타입과 추상화 (0) | 2022.06.21 |
| 01. 협력하는 객체들의 공동체 (0) | 2022.06.08 |