02.이상한 나라의 객체
객체지향과 인지 능력
객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다.
소프트웨어의 세계는 인간이 인지할 수 있는 다양한 소프트웨어 객체들이 모여 이뤄져 있다.
객체, 그리고 이상한 나라
앨리스의 특징
상태를 가지며 상태는 변경 가능
앨리스의 상태를 변경시키는 것은 앨리스의 행동
행동의 결과는 상태에 의존적이며 상태를 이용해 서술 가능
행동의 순서가 결과에 영향을 미침
어떤 상태에 있더라도 유일하게 식별 가능
객체, 그리고 소프트웨어 나라
객체의 다양한 특성을 효과적으로 설명하기 위해서는 객체를
상태(state)
,행동(behavior)
,식별자(identity)
를 지닌 실체로 보는 것이 가장 효과적이상한 나라의 앨리스는 상태, 행동, 식별자를 지닌 실체다.
상태
어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다.
상태
를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.객체의 상태를 구성하는 모든 특징을 통틀어 객체의
프로퍼티
라고 한다.프로퍼티는 변경되지 않고 고정되어
정적
이다.반면 프로퍼티 값은 시간이 프름에 따라 변경되기 때문에
동적
이다.
객체와 객체 사이의 의미 있는 연결을
링크(link)
라고 한다.객체의 링크를 통해서만 메시지를 주고 받을 수 있다.
링크는 객체가 다른 객체를 참조할 수 있다는 것을 의미
한 객체가 다른 객체의 식별자를 알고 있는 것으로 표현
객체를 구성하는 단순한 값은
속성(attribute)
객체의 프로퍼티는 단순한 값인
속성
과 다른 객체를 가리키는링크
라는 두 가지 종류의 조합으로 표현할 수 있다.
행동은 다른 객체로 하여금 간접적으로 객체의 상태를 변경하는 것을 가능하게 한다.
객체지향의 기본 사상은 상태와 상태를 조작하기 위해 행동을 하나의 단위로 묶는 것!
객체는 스스로의 행동에 의해서만 상태가 변경되는 것을 보장함으로써 객체의 자율성을 유지
행동
상태와 행동
객체의 행동은 객체의 상태를 변경시키지만 행동의 결과는 객체의 상태에 의존적이다.
상태와 행동 사이의 관계
객체의 행동은 상태에 영향을 받는다.
객체의 행동은 상태를 변경시킨다.
상태의 개념을 이용해 행동을 서술
상호작용이 현재의 상태에 어떤 방식으로 의존하는가
상호작용이 어떻게 현재의 상태를 변경시키는가
객체는 다른 객체와 적극적으로 상호작용하며
협력하는 객체들의 공동체
에 참여하기 위해 노력한다.
협력과 행동
객체의 행동으로 인해 발생하는 결과
객체 자신의 상태 변경
행동 내에서 협력하는 다른 객체에 대한 메시지 전송
상태 캡슐화
객체는 상태를 캡슐 안에 감춰둔 채 외부로 노출하지 않는다.
객체가 외부에 노출하는 것, 외부에서 객체에 접근할 수 있는 것은 행동뿐이다.
상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다.
식별자
객체를 서로 구별할 수 있는 특정한 프로퍼티(
식별자
)가 객체 안에 존재한다.값(value)은 불변 상태(immutable state) , 객체는 가변 상태(mutable state)
동등성(equality) : 상태를 이용해 두 값이 같은지 판단할 수 있는 성질
동일성(identical) : 식별자를 기반으로 객체가 같은지를 판단할 수 있는 성질
객체의 특성
객체는 상태를 가지며 상태는 변경 가능하다. 객체의 상태를 변경시키는 것은 객체의 행동이다.
행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있다.
행동의 순서가 실행 결과에 영향을 미친다. 객체는 어떤 상태에 있더라도 유일하게 식별 가능하다.
기계로서의 객체
일반적으로 객체의 상태를 조회하는 작업을
Query
객체의 상태를 변경하는 작업을
Command
라고 한다.객체를 기계로서 바라보는 관점은 상태, 행동, 식별자에 대한 시각적인 이미지를 제공하고 캡슐화와 메시지를 통한 협력 관계를 매우 효과적으로 설명한다.
행동이 상태를 결정한다.
상태를 먼저 결정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다.
상태를 먼저 결정할 경우 캡슐화가 저해된다
객체를 협력자가 아닌 고립된 섬으로 만든다.
객체의 재사용성이 저하된다.
협력에 참여하는 훌륭한 객체 시민을 양성하기 위한 가장 중요한 덕목은 상태가 아니라 행동에 초점을 맞추는 것!
객체의 적합성을 결정하는 것은 상태가 아니라 객체의 행동이다.
객체의 행동을 결정하고 그 후에 행동에 적절한 상태를 선택하자.
은유와 객체
의인화
현실 속에서는 수동적인 존재가 소프트웨어 객체로 구현될 때는 능동적으로 변한다.
현실 객체가 가지지 못한 추가적인 능력을 보유하게 된다.
객체지향 세계는 현실의 모습을 조금 참조할 뿐 궁극적인 목적은 현실과 전혀 다른 새로운 세계를 창조하는 것이다.
객체지향의 세계는 현실의 추상화가 아니다. 객체지향 세계의 거리는 현실 속의 객체보다 더 많은 특징과 능력을 보유한 객체들로 넘쳐난다,
은유
현실 속의 객체의 의미 일부가 소프트웨어 객체로 전달되기 때문에 프로그램 내의 객체는 현실 속의 객체에 대한
은유
다현실 세계인 도메인에서 사용되는 이름을 객체에게 부여하자.
Last updated