> For the complete documentation index, see [llms.txt](https://seokrae.gitbook.io/sr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://seokrae.gitbook.io/sr/book/object.md).

# 오브젝트

오브젝트. 코드로 이해하는 객체지향 설계. 조영호 저

> `패러다임(paradigm)`

* `모델(model)`, `패턴(pattern)`, 또는 `전형적인예(example)`를 의미하는 그리스어인 `파라데이그마(Paradeigma)`에서 유래했다.

> `프로그래밍 패러다임`

* 특정 시대의 어느 성숙한 개발자 공동체에 의해 수용된 프로그래밍 방법과 `문제 해결방법`, `프로그래밍 스타일`이라고 할 수 있다.
* 간단히 말해서 우리가 어떤 `프로그래밍 패러다임`을 사용하느냐에 따라 우리가 해결할 `문제를 바라보는 방식`과 `프로그램을 작성하는 방법`이 달라진다.

> 객체지향 설계의 문제를 찾기 위한 기준

* 객체지향 설계는 서로 의존하면서 협력하는 객체들의 공동체를 구축하는 것
* 객체 사이의 `의존성(dependency)`은 변경에 대한 영향을 암시한다.
* 애플리케이션의 기능을 구현하는 데 필요한 최소한의 의존성만 유지하고 불필요한 의존성을 제거하는 것이다.
* 객쳬 사이의 의존성이 과한 경우를 가리켜 `결합도(coupling)`가 높다고 말한다.

> 훌륭한 객체지향 설계란?

* `캡슐화`를 이용해 `의존성`을 적절히 관리함으로써 객쳬 사이의 `결합도`를 낮추는 것이다.

> 데이터 기반 설계에서 객체 지향 설계로 개선하기 위한 방법

* `객체`를 `인터페이스`와 `구현`으로 나누고 `인터페이스만을 공개하는 것`은 `객체 사이의 결합도를 낮추고`

  변경하기 쉬운 코드를 작성하기 위해 따라야 하는 가장 `기본적인 설계 원칙`이다.
* 핵심은 `객체 내부의 상태`를 `캡슐화`하고 `객체 간에 오직 메시지를 통해서만 상호작용`하도록 만드는 것이다.
