1장에서 다루는 내용
- 시스템 복잡도를 증가시키는 경향이 있는 OOP
- OOP를 이해하기 어려운 이유
- 객체에 코드와 데이터를 혼합하는 대가
책 1.1장에서 보여준 도서관 시스템을 만들기 위한 클래스 다이어그램을 보면 상당히 복잡하다. OOP에 내재된 복잡성의 주요 근원은 다음과 같다.
- 코드와 데이터가 섞여있다. → 클래스가 많은 관계에 연루되는 편이다.
- 객체가 변경 가능하다. → 코드를 읽을 때 더 많은 생각이 필요하며, 멀티 스레드 환경에서 명시적 동기화가 필요하다.
- 데이터가 멤버로 객체에 고정된다. → 데이터 직렬화가 쉽지 않다.
- 코드는 메서드로 클래스에 고정된다. → 클래스 계층 구조가 복잡하다.
이 분석 내용은 FP가 OOP를 바라보는 생각과 비슷하다. 다만 DOP는 복잡도를 줄이려고 취하는 데이터 접근법이 FP와는 다르다.
요약
- 이 책에서 말하는 복잡도는 이해하기 어려운 정도를 말한다.
- 우리는 코드와 행위라는 용어를 같은 의미로 사용한다.
- OOP 시스템을 이해하기 어렵다는 의미에서 기존 OOP 시스템은 복잡도를 증가시키는 경향이 있다.
- 복잡도가 증가하는 근원은 코드와 데이터가 함께 객체로 혼합되는 것과 관련이 있다.
- 코드와 데이터가 혼합될 때 클래스는 많은 관계를 맺게 된다.