요약
저자는 초반에 아기들을 이용한 실험을 통해서 객체지향이 직관적이고 이해하기 쉬운 패러다임의 이유가 인간은 본능적으로 세상을 독립적이고 식별 가능한 객체의 집합으로 바라보기 때문이라고 설명한다.
앨리스 객체
- 앨리스는 상태를 가지며 상태는 변경 가능하다
앨리스의 키가 130센티미터라고 가정했을때 케이크를 먹을 경우 150센티미터 더 커진 280미터가 됀다
- 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다.
앨리스가 문을 통과하기 전에 먼저 키를 작게 줄이기 위해 병 안의 음료나 케이크를 먹어야 한다
- 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다.
앨리스가 키가 크던 작던 앨리스이다
작가가 위 앨리스 이야기를 꺼내는 이유는 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다는것을 설명하기 위해서다
상태와 프로퍼티
저자는 상태와 프로퍼티에 관해 모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다고 설명한다.
- 프로퍼티(property)는 변경되지 않고 고정적이기 때문에 '정적'
ex) 앨리스의 키와 위치, 음료의 양 - 프로퍼티의 값(property value)은 시간이 흐름에 따라 변경되기 때문에 '동적'이다.
- 객체와 객체 사이의 의미 있는 연결을 링크(link)라고 한다.
상태와 행동
저자는 상태와 행동에 아래와 같이 설명한다
- 객체의 행동은 상태에 영향을 받는다.
앨리스의 키가 40센티미터 이하라면 문을 통과할 수 있다
- 객체의 행동은 상태를 변경시킨다.
앨리스가 특정한 행동을 취할 때마다 앨리스의 키와 위치는 변경된다.
협력과 행동
저자는 어떤 객체도 섬이 아니며 객체는 다른 객체와 적극적으로 상호작용하며 '협력하는 객체들의 공동체'에 참여하기 위해 노력한다고 한다.
객체가 다른 객체와 협력하는 유일한 방법은 다른 객체에게 요청을 보내는 것이며 객체는 행동을 통해 다른 객체와의 협력에 참여하므로 행동은 외부에 가시적(눈에 보여야)이어야 한다.
상태 캡슐화
객체의 행동을 유발하는 것은 외부로부터 온 메시지이지만
객체 상태를 변경할지 여부와 어떻게 변경할지에 대한 것은 객체 스스로 결정한다.
따라서, 객체의 내부 구현을 외부에 노출시킬 필요가 없으며 상태를 잘 정의된 행동 집합 뒤로 캡슐화하는 것은 객체의 자율성을 높이고 협력을 단순하고 유연하게 만든다.
식별자
- 동등성(equality)
값(value)은 숫자,문자열,날짜,시간,금액 등과 같은 변하지 않는 양을 모델링한다.
값이 같은지 여부는 상태가 같은지를 이용해 판단하며 이것을 동등성이라고 한다.
- 동일성(identical)
식별자를 기반으로 객체가 같은지를 판단
객체는 상태가 변경될 수 있기 때문에 식별자를 이용한 동일성 검사를 통해 두 인스턴스 비교한다
ex)
값 객체(value object)
식별자를 가지지 않는 값 (ex. Integer)
참조 객체(reference object) / 엔티티(entity)
식별자를 지는 객체 (ex. Person class)
기계로서의 객체
객체지향 세계에서 객체 상태를 조회하는 작업을 쿼리(query),
객체 상태를 변경하는 작업을 명령(command)라고 한다.
앨리스를 쿼리, 명령 버튼을 가진 기계라고 생각해보자
아래와 같은 버튼들이 필요할 것이다.
- 키를 조회해올 키 조회 버튼
- 키를 변경할 음료 마시기 버튼, 케이크 먹기 버튼 등..
우리는 버튼을 눌러 기계에게 메시지를 전달하고
버튼이 눌려짐으로써 기계는 상태를 변화시킨다.
우리는 기계 안에서 버튼이 어떤식으로 동작하는지 알 필요가 없다.
기계에 메시지를 보내고 응답을 받으며 협력할 뿐이다
행동이 상태를 결정한다.
객체지향에 갓 입문한 사람들이 가장 쉽게 빠지는 함정은 상태를 중심으로 객체를 바라보는 것이다.
상태를 먼저 설정하고 행동을 나중에 결정하는 방법은 설계에 나쁜 영향을 끼친다.
1) 상태를 먼저 결정할 경우 캡슐화가 저해된다.
2) 객체를 협력자가 아닌 고립된 섬으로 만든다.
3) 객체의 재사용성이 저하된다.
객체가 적합한지를 결정하는것은 그 객체의 상태가 아니라 행동이다.
먼저 객체의 행동을 결정하고 그 후에 행동에 적절한 상태를 선택하게 된다.
은유와 객체
객체지향 세계는 현실 세계의 단순한 모방이 아니다.
소프트웨어 세계에선 상품이 스스로 가격 계산을 하게 될 수도 있다.
이러한 객체지향 세계를 현실 세계에 대입해 이해하기 위해선
객체를 수동적인 존재가 아닌 능동적인 존재로 봐야할 필요가 있으며 (객체 의인화)
소프트웨어의 객체를 현실 객체에 대한 은유로 보아야 한다.
객체지향 세계에서 '이상한 나라'를 창조하자
'그룹 스터디 공부(IT 서적) > 객체지향의 사실과 오해' 카테고리의 다른 글
05 / 책임과 메시지 (0) | 2023.07.21 |
---|---|
04 / 역할, 책임, 협력 (0) | 2023.07.21 |
03 / 타입과 추상화 (0) | 2023.07.21 |
02 / 이상한 나라의 객체 (0) | 2023.07.21 |
01 / 협력하는 객체들의 공동체 (0) | 2023.07.21 |