> For the complete documentation index, see [llms.txt](https://incheol-jung.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://incheol-jung.gitbook.io/docs/study/object/2020-03-10-object-chap-end.md).

# 마무리

> 오브젝트 마지막장 요약한 내용 입니다.

엘리스터 코어번은 사람들이 새로운 기술을 학습하기 위해서는 일반적으로 세 가지 단계를 거치게 된다고 설명한다. 코어번은 이 세 가지 단계를 '`따라 하는 수준`', '`분리 수준`', '`거침없는 수준`'이라고 부른다.

* **'따라 하는 수준'** : 적합한 열 가지의 절차가 있더라도 모든 절차를 한번에 습득하는 것은 `불가능`하기 때문에 가장 쉽게 배울 수 있는 단 한 가지 절차를 학습하고 그대로 모방한다.
* **'분리 수준'** : 오직 단 하나의 절차 만으로는 모든 문제를 해결할 수 없다는 사실을 깨닫고 `다양한 절차`를 학습하고 `트레이드 오프` 한다.
* **'거침없는 수준'** : 이른 사람은 많은 학습과 경험을 통해 즉시 `적절한 해법`을 직관적으로 떠올릴 수 있을 뿐만 아니라 때로는 `자신만의 방법`에 따라 문제를 해결하기도 한다.

따라서 이 책에서 설명하는 원칙과 기법들을 여러분의 실무에 적용하기 위해서는 다양한 상황을 트레이드 오프할 수 있는 능력을 길러야 한다.

이 책에서 설명하는 특정한 절차와 원칙을 따르면 훌륭한 객체지향 설계를 할 수 있고, 더 나아가 유연한 객체지향 프로그램을 작성할 수 있다고 생각할 것이다. 안타깝게도 여러분이 '`따라 하는 수준`'에 머물러 있다면 이 책에서 다루는 `다양한 원칙`과 `기법`들을 적용하기가 생각보다 쉽지 않다는 사실을 알 수 있을 것이다. 따라서 다음과 같은 방법들을 통해 다양한 설계 기법을 익히고 통찰력을 길러 '`분리 수준`'을 향해 나아가야 한다.

* **디자인 패턴** : 반복적으로 발생하는 문제와 해법의 쌍을 담고 있기 때문에 문제에 적합한 `디자인 패턴`을 고른다면 고품질의 설계를 `짧은 시간`에 얻을 수 있는 지름길을 제공한다.
* **리팩터링** : 리팩터링은 코드의 행동은 변경하지 않은 채 `코드의 구조`를 개선하는 활동을 의미한다. 설계는 코드의 배치 이므로 코드의 구조를 개선한다는 것을 곧 `설계를 개선`한다는 것을 의미한다.
* **테스트-주도 개발** : 테스트-주도 개발은 마지막 단계인 '`거침없는 수준`'에 이른 사람들이 제시한 독창적인 설계 방법 중 하나다. 테스트-주고 개발은 전통적인 `설계`-`구현`-`테스트`의 순서로 수행되는 구현 절차를 `테스트`-`구현`-`설계`의 순서로 바뀐다.

어떤 경우에도 이 책에서 배운 `캡슐화`, `응집도`, `결합도`의 정의와 원칙은 유효하며 객체지향 패러다임의 중심에는 `역할`, `책임`, `협력`이 위치한다는 것이다. 우리가 해야할 일은 이 책에서 제시하는 원칙이 적합하지 않은 지점을 만났을 때 `이상`이 `현실` 안에 안전하게 정착하도록 설계를 약간 비트는 것뿐이다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://incheol-jung.gitbook.io/docs/study/object/2020-03-10-object-chap-end.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
