# 3장 타입과 추상화

### 추상화

#### 추상화의 목적

* 추상화의 수준, 이익, 가치는 목적에 의존적이다.

#### 추상화 과정

* 공통점은 취하고 차이점은 버리는 일반화를 통해 단순하게 만든다.
* 중요한 부분을 강조하기 위해 불필요한 세부 사항을 제거한다.

#### 객체지향과 추상화

* 공통점을 기반으로 객체들을 묶기 위한 그릇을 개념이라고 한다.
* 개념을 이용하면 여러 그룹으로 분류할 수 있다.
* 객체란 특정한 개념을 적용할 수 있는 구체적인 사물이다.
* 개념이 객체에 적용되었을 때 객체를 개념의 인스턴스라고 한다.

### 타입

#### 데이터 타입을 정의하는 이유

* 타입을 정의함으로써 어떻게 사용될수 있는지 정의할 수 있다.
* `타입에 속한 데이터를 메모리에 어떻게 표현하는지 외부로부터 철저하게 감춰진다.`

#### 객체는 데이터인가?

* 아니다. 객체와 데이터의 목적이 다르다. 객체에서 중요한 것은 객체의 행동이다.

#### 행동이 우선이다.

* 객체의 내부 표현 방식이 다르더라도 어떤 객체들이 동일하게 행동한다면 그 객체들은 동일한 타입에 속한다.
* 다만 내부의 데이터 표현 방식이 다르기 때문에 동일한 메시지를 처리하는 방식은 서로 다를 수밖에 없다. : 다형성

#### 동적 모델과 정적 모델

* 객체가 특정 시점에 구첵적인 상태를 가지는 것은 **스냅샷**이라고 한다. 스냅샷처럼 실제로 객체가 살아 움직이는 동안 상태가 어떻게 변하고 어떻게 행동하는지를 포착하는 것을 **동적 모델**이라고 한다.
* 객체가 가질 수 있는 모든 상태와 모든 행동을 시간에 독립적으로 표현하는 모델을 **타입 모델**이라고 한다. 이 모델은 동적으로 변하는 객체의 상태가 아니라 객체가 속합 타입의 정적인 모습을 표현하기 때문에 **정적 모델**이라고도 한다.
* **객체의 관점의 동적 모델과 객체를 추상화한 타입 관점의 정적 모델을 적절히 혼용해야 한다.**

## 논의하고 싶은 내용

* 동적 모델과 정적 모델의 차이가 정확히 감이 안온다.. 😢


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://incheol-jung.gitbook.io/docs/study/readme-1/3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
