
1997년 심리학자 엘리자베스 스펠크와 필립 켈만은
어린 아기들이 물체를 인지하는 방법을 연구하기 위해 한 가지 실험을 수행그 결과,
사람은 태어난 지 얼마 안 된 시기부터
뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지함
위 실험에서와 같이, 사람은 기본적으로 뚜렷한 경계를 가지고 함께 행동하는 물체를 하나의 개념으로 인지
이상한 나라의 앨리스에서 앨리스가 정원으로 통하는 문을 통과하기 위해
음료, 부채, 버섯 등을 사용해 키가 변하는 것으로 비유 중
음료, 부채, 버섯 등을 사용하는 행동에 따라 앨리스의 키라는 상태가 변경됨
이런 점에서,
- 앨리스는 상태를 가지며, 상태는 변경 가능하다
- 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다
- 행동의 결과는 상태에 의존적이며, 상태를 이용해 서술할 수 있다
- 행동의 순서가 결과에 영향을 미친다
- 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다
객체를 효과적으로 설명하기 위해서는 상태, 행동, 식별자를 지닌 실체로 보는 것이 가장 효과적
이 책에서
객체의 정의는,객체란 식별 가능한 개체 또는 사물이다.
객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고, 시간처럼 추상적인 개념일 수도 있다.
객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.
소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
상태가 왜 필요할까 ?
행동의 결과는 그 이전 행동에 대한 결과에 의해 결정됨상태로 저장해두고, 현재 상태에 어떤 행동을 가해 새로운 상태로 갱신즉, 상태가 있으면, 이전에 실행한 행동들을 모두 기억해두지 않아도 됨상태와 프로퍼티
프로퍼티는 객체의 특성을 표현할 수 있음객체도 객체의 특성을 표현할 수 있음따라서, `모든 객체는 단순한 값과 객체의 조합으로 표현할 수 있다`
이 때, 객체의 상태를 구성하는 모든 특징을 `프로퍼티`라고 한다
앨리스’가 ‘음료’를 마시기 위해 들고 있는 상황
즉, 객체가 다른 객체의 상태를 표현하고 있을 때에는, 링크가 필요하다앨리스의 키처럼 객체를 구성하는 단순한 값을 속성이라고 함💡 프로퍼티는 단순한 값인 속성과 다른 객체를 가리키는 링크라는 두 가지 종류의 조합으로 표현
이 책에서
객체의 상태정의상태는 특정 시점에 객체가 가지고 있는 정보의 집합으로 객체의 구조적 특징을 표현한다.
객체의 상태는 객체에 존재하는 정적인 프로퍼티와 동적인 프로퍼티 값으로 구성된다.
객체의 프로퍼티는 단순한 값과 다른 객체를 참조하는 링크로 구분할 수 있다.
객체의 자율성
객체는 스스로의 행동에 의해서만 상태가 변경됨을 보장하여 자율성을 유지상태와 행동
부수 효과를 갖고 있다고 함- 객체의 행동은 상태에 영향을 받음
- 객체의 행동은 상태를 변경시킴
협력과 행동
행동이 객체들끼리 협력할 수 있는 유일한 수단객체의 행동으로 인해 발생하는 결과의 두 관점
- 객체 자기 자신의 상태 변경
- 행동에 협력하는 다른 객체에게 메시지 전송
이 책에서
객체의 행동정의행동이란 외부의 요청 또는 수신된 메시지에 응답하기 위해 동작하고 반응하는 활동이다.
행동의 결과로 객체는 자신의 상태를 변경하거나 다른 객체에게 메시지를 전달할 수 있다.
객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적이어야 한다.
상태 캡슐화
앨리스.drinkBeverage()drunken(quantity) 라는 메시지가 전달됨캡슐화객체는 캡슐 안에 상태를 감추어 외부에 노출하지 않음행동 뿐, 외부에서 접근할 수 있는 방법도 행동 뿐캡슐화를 통해, 객체의 자율성을 높이고, 협력을 단순하고 유연하게 만듦값(value)은 변하지 않는 양을 모델링함불변 상태를 가진다고 할 수 있음동등성이라고 함객체는 시간에 따라 상태의 변동이 있을 수 있음가변 상태를 가진다고 할 수 있음동일성이라 함동등성 맥락동일성 맥락식별자란 어떤 객체와 구분하는 데 사용하는 객체의 프로퍼티이다.
값은 식별자를 가지지 않기 때문에 상태를 이용한 동등성 검사를 통해 두 인스턴스를 비교해야 한다.
객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 비교한다.
💡 객체의 특성
- 객체는 상태를 가지며 상태는 변경 가능하다.
- 객체의 상태를 변경시키는 것은 객체의 행동이다.
- 행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있다.
- 행동의 순서가 실행 결과에 영향을 미친다.
- 객체는 어떤 상태에 있더라도 유일하게 식별 가능하다.
쿼리: 객체의 상태를 조회하는 작업명령: 객체의 상태를 변경하는 작업기계로서의 객체
원형 버튼을 통해서 기계의 상태를 조회할 수 있음 → 쿼리사각형 버튼을 통해서 기계의 상태를 변경할 수 있음 → 명령객체지향의 입문자는 상태를 중심으로 객체를 바라봄
하지만, 상태를 먼저 결정하고, 행동을 나중에 결정하는 것은 설계에 나쁜 영향을 끼침
협력하기 위함협력에 참여하는 객체를 잘 만들기 위해서는 행동에 초점을 맞춰야 함
객체지향 설계는 애플리케이션에 필요한 협력을 먼저 생각
→ 협력에 참여하는 데에 필요한 행동을 생각
→ 행동을 수행할 객체를 선택
→ 행동에 필요한 정보가 무엇인지 고려하여 상태를 결정
협력 안에서 객체의 행동은 객체의 책임을 의미함
→ 객체가 어떤 책임이 필요한지부터 생각해야 함
→ 책임-주도 설계 ( Responsibility-Driven Design, RDD )