※ 디자인 원칙
◎ 바뀌는 부분은 캡슐화한다.
- 어플리케이션에서 달라지는 부분을 찾아내고, 달라지지 않는 부분과 분리한다.
- 코드를 변경하는 과정에서 의도치 않게 발생하는 일을 줄이면서 시스템의 유연성을 향상시킬 수 있다.
- 예시
- 도식
◎ 상속보다는 구성을 활용한다.
- 상속의 문제점
- 특정 부분에서 중복되는 코드가 발생함
ex) 날 수 있는 오리들와 날 수 없는 오리들이 있을 때 날 때의 코드를 변경하려면 모든 날 수 있는 오리 Class들의 코드를 전부 변경해야 한다.
- 바뀌는 부분은 캡슐화하여 구성을 사용한다면
- 알고리즘군을 별도의 클래스 집합으로 캡슐화할 수 있음
- 구성 요소로 사용하는 객체에서 올바른 행동 인터페이스를 구현하기만 하면 실행 시에 행동을 바꿀 수 있다.
- 예시
◎ 구현보다는 인터페이스에 맞춰 프로그래밍 한다.
- 인터페이스에 맞춰 프로그래밍 한다
→ “상위 형식에 맞춰 프로그래밍 한다”
- 변수를 선언할 때 보통 추상 클래스나 인터페이스 같은 상위 형식으로 선언
- 객체에 변수를 대입할 때 상위 형식을 구체적으로 구현한 형식이라면 어떤 객체든 넣을 수 있기 때문이다.
- 변수를 선언하는 클래스에서 실제 객체의 형식은 몰라도 된다.
- 추상 데이터 타입을 통해 같은 형식의 시그니처로 요청할 수 있기 때문에 용이하다.
※ 객체지향 패턴
◎ 전략 패턴
- 알고리즘 군을 정의하고 캡슐화해서 각각의 알고리즘 군을 수정해서 쓸 수 있게 해줍니다.