troll.log
로그인
troll.log
로그인
오브젝트 - 04 설계 품질과 트레이드오프
yshjft
·
2023년 4월 16일
팔로우
0
오브젝트
책
0
오브젝트
목록 보기
4/18
객체 지향 설계의 핵심 -
역할, 책임, 협력
협력 - 객체들의 상호작용
책임 - 협력하기 위해 수행하는 행동
역할
- 대체 가능한 책임의 집합(가중 중요)
객체지향 설계의 핵심이 책임
책임을 할당하는 작업이 응집도와 설계 품질과 깊이 연관
객체에 행동에 초점
을 맞춤으로서 결합도와 응집도를 합리적인 수준으로 유지할 수 있다.
01 데이터 중심의 영화 예매 시스템
객체의 상태 = 구현(구체적인 것)
객체의 상태가 객체 분할의 중심축이되면 캡슐화의 원칙이 무너지게 된다.
이는 변경에 취약한 구조를 가지게 한다.
데이터를 준비하자
영화를 예매하자
02 설계 트레이드오프
캡슐화
변경될 가능성이 높은 부분을
구현
안정적인 부분을
인터페이스
캡슐화는 구현을 인터페이스 뒤로 숨기는 것
응집도와 결합도
응집도가 높은 설계에서는 하나의 요구 사항 변경을 반영하기 위해
오직 하나의 모듈만 수정하면 된다.
(코드 변경하기가 쉬워진다)
결합도는 한 모듈이 변경되기 위해 다른 모듈의 변경을 요구하는 정도
퍼블릭 인터페이스를 수정했을 때만 다른 모듈에 영향을 미치는 경우에는 결합도가 낮다고 표현
즉 쉽게 변경할 수 있다면 높은 응집도를 가지고 낮은 결합도일 가능성이 높다.
03 데이터 중심의 영화 예매 시스템의 문제점
데이터 중심 설계의 문제점
캡슐화 위반
높은 결합도
낮은 응집도
캡슐화 위반
데이터 중심 설계 → 저장할 데이터에 초점을 맞춤
접근자와 수정자의 막연한 사용
추측에 의한 설계 전략
당영한 상황에서 사용될 수 있을 것이라는 막연한 추측을 기반으로 설계
높은 결합도
객체 내부 구현이 객체의 인터페이스에 드러난다는 것은 클라이언트가 구현에 강하게 결합된다는 것
데이터 중심 설계의 또 다른 문제는 제어 로직이 특정 객체 안에 집중됨
제어 로직을 가지고 있는 특정 객체는 변경에 지속적으로 영향을 받게된다.
낮은 응집도
서로 다른 이유로 변경되는 코드가 하나의 모듈 안에 공존할 때 모듈의 응집도가 낮다고 말한다.
변경을 수용하기 위해 하나 이상의 클래스를 수정해야 하는 것이 설계의 응집도가 낮다는 증거다.
04 자율적인 객체를 향해
캡슐화를 지켜라
의미 있는 메서드 = 책임져야 하는 무언가를 수행하는 메서드
private으로 설정했다고 해도 접근자와 수정자를 통해 속성을 외부로 제공하고 있다면 캡슐화를 위반하는 것
스스로 자신의 데이터를 책임지는 객체
데이터 보다 중요한 것은 책임을 정의하는 오퍼레이션이 더 중요
05 하지만 여전히 부족하다
캡슐화 위반
내부 구현의 변경이 외부로 퍼져나가는 파급 효과는 캡슐화가 부족하다는 명백한 증거
높은 결합도
결합도가 높다 → 한 객체의 구현을 변경할 때 다른 객체에게 변경의 영향이 전파될 확률이 높아진다
낮은 응집도
06 데이터 중심 설계의 문제점
데이터 중심 설계는 ...
너무 이른 시기에 데이터에 관해 결정하도록 강요
협력이라는 문맥을 고려하지 않고 객체를 고립시킨 채 오퍼레이션을 결정
데이터 중심 설계는 객체의 행동보다 상태에 초점을 맞춘다.
데이터는 구현의 일부
접근자와 수정자는 public 속성과 큰 차이가 없다
데이터 중심 설계는 객체를 고립시킨 채 오퍼레이션을 정의하도록 만든다.
협력이라는 문맥 안에서 필요한 책임을 결정하고 이를 수행할 적절한 객체를 결정하는 것
데이터 중심 설계는 구현이 결정된 상태에서 다른 객체의 협력 방법을 고민 → 이미 구현된 객체의 인터페이스를 억지로 끼워 맞추게 된다.
yshjft
꾸준히 나아가자 🐢
팔로우
이전 포스트
오브젝트 - 3장 역할, 책임,협력
다음 포스트
오브젝트 - 05 책임 할당하기
0개의 댓글
댓글 작성