단일 책임 원칙을 준는하는 객체에게 책임 이상의 업무를 부여하면?
- 만능 객체가 되낟한다
- 다른 객체에게 의뢰한다.
다른 객체에게 의뢰하는 것 = 다른 객체에게 메세지를 보내는 것
- 메세지 - 의뢰할 내용
- 오퍼레이션 - 메세지를 수신할 객체가 제공하는 서비스
- 메소드 - 오퍼레이션이 연결된 실제 처리기
객체의 생명 주기 전체에 걸친 의존성
- 상속(extends)
- 연관(association)
각 오포레이션 실행 시 임시적인 의존성
- 의존(dependency)
- 수정 여파 규모 증가
- 수정하기 어려운 구조 생성
- 순환 의존성
어떠한 경우에도 다운 캐스팅은 금지 폴리모피즘(추상 인터페이스) 사용
개념
- Control = flow control(흐름제어)
- 광의에서 흐름 제어 = 프로그램 실행 통제
- 동기흐름제어, 비동기 흐름제어 등
문제점
- 흐름 제어는 상태와 결합하여 진행됨
- 상태 통제와 흐름제어 = 알고리즘
- 변호에 취약하고 구현하기도 어려움
즉 내가 운전하는 것보다 사수가 운전는는게 낫다 => 제어 역전
대안
- 제어를 추상화하고
- 개별 제어의 차이점만 외부에서 주입받는다.
전략 패턴 & 템플릿 메소드 패턴 < 컴포지트 패턴 < 비지터 패턴보다 넓은 범위의 제어 역전을 실현함
추상 팩토리 메소드 패턴 왼쪽 패턴은 이미 만들어진 객체의 행위를 제어역전에 참여시킬 수 있지만 참여할 객체 자체를 생성할 수 없음. 참여할 객체를 상황에 맞게 생성하고 행위까지 위임하기 위해 추상팩토리 메소드를 사용함