Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

02. 이상한 나라의 객체 #3

Closed
wants to merge 1 commit into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
91 changes: 91 additions & 0 deletions The_Essence_of_Object-Orientation/02-이상한-나라의-객체.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# 02. 이상한 나라의 객체

> 객체지향 패러다임은 지식을 추상화하고 추상화한 지식을 객체 안에 캡슐화함으로써 실세계 문제에 내재된 복잡성을 관리하려고 한다. 객체를 발견하고 창조하는 것은 지식과 행동을 구조화하는 문제다. - 레베카 워프스브록(Rebecca Wirts-Brock)

## TL;DR

1.

<hr>
<br>

- 객체지향 패러다임의 목적은 현실 세계를 모방하는 것이 아니라 현실 세계를 기반으로 새로운 세계를 창조하는 것이다.

- 현실 세계의 전등은 사람의 손길 없이는 스스로 불을 밝힐 수 없지만 소프트웨어 세계의 전등은 외부의 도움 없이도 스스로 전원을 켜거나 끌 수 있다.

<hr>
<br>

- 앨리스는 정원으로 통과하기 위해 본인의 키를 작은 문에 통과하기 적당한 높이로 조절한다.
- 문을 통과하기에 적당한 상태란 문을 통과할 수 있는 적당한 키를 의미한다.
- 특정 시점의 앨리스의 상태는 특정 시점에서의 앨리스의 키를 의미한다.
- 앨리스의 키는 시간의 흐름에 따라 계속 변하는데, 저절로 변하는 것이 아닌 앨리스의 행동(병 속의 음료 마시기, 토끼가 떨어트린 부채로 부채질하기 등)에 달려있다.
- 결국 앨리스의 키를 변화시키는 것은 앨리스의 행동이다.
- 앨리스가 하는 행동에 따라 앨리스의 상태가 변하게 된다.
- 앨리스가 상태를 결정하는 것은 행동이지만 행동의 결과를 결정하는 것은 상태다.
- 앨리스가 한 행동의 결과는 앨리스의 상태에 의존적이다.
- 문을 통과한다는 행동의 결과는 앨리스의 위치라는 상태를 이용해 쉽게 설명할 수 있다.
- 어떤 행동의 성공 여부는 이전에 어떤 행동들이 발생했는지에 영향을 받는다.
- 앨리스의 키에 비해 문의 높이는 낮기 때문에 문을 통과하기 전에 먼저 키를 작게 줄이기 위해 병 안의 음료나 케이크를 먹어야 한다.
- 문을 통과하는 행동이 성공하려면 음료나 케이크를 먹는 행동이 선행되어야 한다. -> 행동간의 순서가 중요하다.
- 행동에 의해 앨리스의 상태가 변경되더라도 앨리스가 앨리스라는 사실은 변하지 않는다.
- 앨리스는 상태 변경과 무관하게 유일한 존재로 식별 가능하다.
- 앨리스는 상태를 가지며 상태는 변경 가능하다.
- 앨리스의 상태를 변경시키는 것은 앨리스의 행동이다.
- 행동의 결과는 상태에 의존적이며 상태를 이용해 서술할 수 있다.
- 행동의 순서가 결과에 영향을 미친다.
- 앨리스는 어떤 상태에 있더라도 유일하게 식별 가능하다.
<hr>
<br>
- 하나의 개별적인 실체로 식별 가능한 물리적인 또는 개념적인 사물은 어떤 것이라도 객체가 될 수 있다.
- 객체의 다양한 특성을 효과적으로 설명하기 위해 객체를 상태(state), 행동(behavior), 식별자(identity)를 지닌 실체로 보는 것이 가장 효과적이다.
- 이 책에서는 객체를 다음과 같이 정의한다.
- 객체는 식별 가능한 개체 또는 사물이다.
- 객체는 자동차처럼 만질 수 있는 구체적인 사물일 수도 있고,
- 시간처럼 추상적인 개념일 수도 있다.
- 객체는 구별 가능한 식별자, 특징적인 행동, 변경 가능한 상태를 가진다.
- 소프트웨어 안에서 객체는 저장된 상태와 실행 가능한 코드를 통해 구현된다.
<hr>
<br>

### 상태

- 왜 상태가 필요한가
- 객체가 주변 환경과의 상호작용에 어떻게 반응하는가는 그 시점까지 객체에 어떤 일이 발생했느냐에 좌우된다.
- 비행기 탑승 여부는 과거에 항공권을 발권하는 행동이 발생했는지 여부에 따라 달라지는 것이다.
- 어떤 행동의 결과는 과거에 어떤 행동들이 일어났었느냐에 의존한다.
- 자판기에 충분한 금액을 투입하기 전에는 원하는 음료를 선택할 수 없다.
- 인간은 행동의 과정과 결과를 단순하게 기술하기 위해 상태라는 개념을 고안했다.
- 자판기는 현재까지 투입된 금액의 상태를 기억한다.
- 상태를 이용하면 과거의 모든 행동 이력을 설명하지 않고도 행동의 결과를 쉽게 예측하고 설명할 수 있다.
- 앨리스가 과거에 어떤 행동을 했는지 모르더라도 앨리스의 키만 알면 문을 통과할 수 있는지 여부를 쉽게 판단할 수 있다.
- 즉, 앨리스의 키와 문의 높이 두 가지 상태만 알면 문을 통과하는 행동의 결과를 쉽게 예측할 수 있다.
- 상태를 이용하면 과거에 얽매이지 않고 현재를 기반으로 객체의 행동 방식을 이해할 수 있다.
- 상태는 근본적으로 세상의 복잡성을 완화하고 인지 과부화를 줄일 수 있는 중요한 개념이다.

<hr>
<br>

- 상태와 프로퍼티
- 앨리스가 문을 통과하면서 과정에서 객체라고 부를 수 있는 다양한 사물들이 출연한다.
- 앨리스의 키를 줄이거나 늘리는데 사용하는 음료, 케이크 등과 토끼, 문
- 이들은 뚜렷한 경계를 가지며 식별 가능하고 상태와 행동을 가지고 있다.
- 분명하게 인식할 수 있음에도 객체의 영역에 포함시킬 수 없는 것들도 존재한다.
- 앨리스의 키와 위치, 음료와 케이크의 양, 문이 열려있는지 여부, 토끼가 달려가는 속도
- 숫자, 문자열, 양, 속도, 시간, 날짜, 참/거짓 같은 단순한 값은 객체가 아니다.
- 그 자체로 독립적인 의미를 가지기보다는 다른 객체의 특성(상태)을 표현하는데 사용한다.
- 객체를 사용해 다른 객체의 상태를 표현해야 할 때가 있다.
- 앨리스가 현재 음료를 들고 있는 상태를 표현하고 싶다면?
- 앨리스의 상태 일부를 음료라는 객체를 이용해 표현한다.
- 객체지향 관점에서 앨리스는 음료에 관해 알고 있는 상태며 앨리스 객체와 음료 객체는 서로 연결되어 있다.
- 모든 객체의 상태는 단순한 값과 객체의 조합으로 표현할 수 있다.
- 이 때 객체의 상태를 구성하는 모든 특징을 통틀어 객체의 프로퍼티(property)라고 한다.
- 앨리스의 경우, 키, 위치, 음료이다.
- 일반적으로 프로퍼티는 변경되지 않고 고정되기 때문에 '정적'이다.
- 반면 프로퍼티 값(property value)는 시간의 흐름에 따라 변경되기 때문에 '동적'이다.
- 앨리스의 키는 음료를 마시면 작아질 것이다.
- 앨리스의 위치가 정원으로 바뀌면 앨리스는 음료에 관해 알지 못하는 상태로 변경된다.
- 이처럼 객체와 객체 사이의 의미 있는 연결을 링크(link)라고 한다.
- 객체와 객체 사이에는 링크가 존재해야만 요청을 보내고 받을 수 있다.
- 즉, 객체의 링크를 통해서만 메시지를 주고받을 수 있다.
- 링크는 객체가 다른 객체를 참조할 수 있다는 것을 의미하며 일반적으로 한 객체가 다른 객체의 식별자를 알고 있는 것으로 표현된다.