4장에서는 기존에 객체지향 설계로 만들었던 영화 예매 시스템을 데이터 중심 설계로 다시 설계한다.
이 설계를 통해 품질이 나쁜 코드를 보고, 캡슐화, 응집도, 결합도에 대해 자세히 다룬다.
01 데이터 중심의 영화 예매 시스템
설계 시 두 가지로 나눌 수 있다.
데이터 중심의 설계 : 이는 상태에 초점을 맞추며 객체를 독립된 데이터 덩어리로 바라본다.
책임 중심의 설계 : 이는 행동에 초점을 맞추며 객체를 협력하는 공동체의 일원으로 바라본다.
훌륭한 객체지향 설계는 데이터가 아닌 책임에 초점을 맞춰야 한다. 그것이 변경이 더 용이하기 때문이다.
상태는 구현에 속하므로 변하기 쉽다. 따라서 상태에 초점을 맟추면 구현이 객체의 인터페이스에 스며들게 되어 캡슐화 원칙이 무너진다. 이는 곧 상태의 변경이 인터페이스의 변경을 초래한다는 의미이다.
데이터 중심의 설계는 '데이터가 무엇인가'부터 시작한다.
객체의 종류를 저장하는 인스턴스 변수와 그 변수 값에 따라 사용될 인스턴스 변수가 하나의 클래스 안에 있는 방식은 데이터 중심 설계에서 흔히 볼 수 있는 패턴이다.
02 설계 트레이드오프
캡슐화
캡슐화는 외부에서 알 필요 없는 부분을 감춤으로써 대상을 단순화하는 추상화의 한 종류이다.
변경될 수 있는 어떤 것이라도 캡슐화해야 한다. 구현은 변경될 가능성이 높고, 인터페이스는 상대적으로 변경에 안정적인 부분이다.
응집도와 결합도
응집도는 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타낸다. 모듈 내의 요소들이 하나의 목적을 위해 긴밀하게 협력한다면 그 모듈은 높은 응집도를 가진다.
결합도는 의존성의 강도를 나타내며 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지 나타내는 척도다. 어떤 모듈이 다른 모듈에 대해 꼭 필요한 지식만 알고 있다면 두 모듈은 낮은 결합도를 가진다.
좋은 설계란 변경을 쉽게 할 수 있어야 하며, 높은 응집도, 낮은 결합도를 추구한다.
03 데이터 중심의 영화 예매 시스템의 문제점
캡슐화 위반, 높은 결합도, 낮은 응집도
04 자율적인 객체를 향해
캡슐화를 지켜라
스스로 자신의 데이터를 책임지는 객체
1. 이 객체가 어떤 데이터를 포함해야 하는가?
2. 이 객체가 데이터에 대해 수행해야 하는 동작은 무엇인가?
05 하지만 여전히 부족하다
객체는 스스로 책임지며 그 전보다는 내부 구현을 캡슐화하고 있다. 하지만 여전히 캡슐화는 위반되고 있다.
06 데이터 중심 설계의 문제점
1. 본질적을 너무 이른 시기에 데이터에 관해 결정하도록 강요한다.
2. 협력이라는 문맥을 고려하지 않고 객체를 고립시킨 채 행동을 결정한다.
'스터디' 카테고리의 다른 글
[오브젝트] 5장. 책임 할당하기 (0) | 2023.08.12 |
---|---|
[모던 자바 인 액션] 10장. 도메인 전용 언어 (0) | 2023.08.12 |
[모던 자바 인 액션] 8장. 개선된 컬렉션 API (0) | 2023.07.28 |
[오브젝트] 3장. 역할, 책임, 협력 (0) | 2023.07.27 |
[모던 자바 인 액션]6장. Collector 인터페이스 활용 예제 (0) | 2023.07.21 |
댓글