> 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/_1.md).

# 데이터 중심 설계

데이터 중심 설계에 대한 이야기

* 객체 내부에 저장되는 데이터를 기반으로 시스템을 분할하는 방법
* 객체가 포함해야하는 데이터에 집중

## 데이터 중심의 설계의 문제점

* 데이터와 기능을 분리하는 절차적 프로그래밍 방식을 따른다.
* 데이터 중심의 설계의 문제점
  * `캡슐화 위반`
    * 퍼블릭 인터페이스를 통해 인스턴스 변수가 존재한다는 사실이 드러남
  * `높은 결합도`
    * 클라이언트가 객체의 구현에 강하게 결합
  * `낮은 응집도`
    * 변경으로 인한 코드 수정 시 아무 상관 없는 코드들이 영향을 받게 된다.
    * 하나의 요구사항 변경을 반영하기 위해 동시에 여러 모듈을 수정해야 한다.

> 모듈의 응집도가 변경에 취약하여 `단일 책임 원칙(Single Responsibility Principle, SRP)`를 위반

* 데이터 중심 설계가 변경에 취약한 두 가지 이유
  * 데이터 중심의 설계는 본질적으로 너무 `이른 시기`에 `데이터에 관해 결정`하도록 강요한다.
  * 데이터 중심의 설계에서는 `협력이라는 문맥을 고려하지 않고 객체를 고립`시킨 채 `오퍼레이션을 결정`한다.
