책에서 공부한 내용들을 활용해 복합 패턴으로 하나의 프로그램을 만들어보자.public interface Quackable { public void quack();}먼저 위와 같은 기본적인 인터페이스가 있고public class Duck implements Quackable { public void quack() { ... }}그 인터페이스를 implements 받아 오리 객체를 만드는 클래스가 존재한다.Adapter Pattern그런데 여기서 오리가 아닌 거위 객체가 추가 되었다.public class Goose { public void honk() { ... }}거위는 quack이 아닌 honk 메소드를 가지고 있다.여기서 어댑터 패턴을 사용한다.public clas..
Design Pattern

템플릿 메소드 패턴(Template Method Pattern)템플릿 메소드 패턴(Template Method Pattern)은 알고리즘의 골격을 정의한다.알고리즘의 일부 단계를 서브클래스에서 구현할 수 있다.알고리즘의 구조는 유지하며 특정 단계만 서브클래스에서 재정의할 수 있다.비슷한 형태의 클래스, 즉 중복되는 코드가 있는 클래스들의 공통된 부분을 추상화해서 또 다른 base 클래스로 만드는 것이다. 한 마디로 프로그램의 '틀'이라고 볼 수 있다.스타버즈라는 카페의 커피와 티 레시피는 거의 흡사하다. 이 중 공통된 부분을 묶어서 하나의 베이스로 만든다.void perpareRecipe() { boilWater(); brew(); pourInCup(); addCondiments()..

Adapter Pattern어댑터 패턴(Adapter Pattern)은 특정 클래스 인터페이스를 클래스에서 요구하는 다른 인터페이스로 변환하여, 호환되지 않는 클래스를 사용할 수 있도록 한다.Adapter?어댑터란, 우리가 해외를 갈 때 110V로 변환하기 위해 챙기는 어댑터와 목적이 거의 동일하다.어떠한 인터페이스를 클라이언트에서 요구하는 형태로 변환하는 역할을 한다.예를 어떠한 업체의 라이브러리를 사용하는데, 이 라이브러리에서 지원하는 인터페이스와 기존의 인터페이스가 호환되지 않는다고 가정해보자. 더군다나 기존의 코드를 수정할 수 없는 상황이라면? 이 두 가지를 적응 시켜주는 것이 어댑터의 역할이다. 어댑터 사용 방법public class MallardDuck implements Duck { publ..

데코레이터 패턴이란?데코레이터 패턴(Decorator Pattern)은 객체에 추가 요소를 동적으로 추가할 수 있다.상속으로 확장하는 것보다 새로운 인스턴스 객체를 만들어 감싸는 데코레이터 패턴이 유연성 측면에서 더 좋다. Starbuzz Coffee 예제Starbuzz라는 초대형 커피 전문점이 있다.이 카페의 초기 주문 시스템은 이렇게 되어 있었다.초창기에는 4가지의 커피 종류가 있었다. 점점 시간이 지날 수록 커피에 휘핑, 우유, 모카 등을 추가하는 손님이 생겨났고 하나씩 확장하다 보니 오른쪽 그림과 같은 다이어그램이 만들어졌다.한 눈에 봐도 문제가 많은 걸 알 수 있다.인스턴스 변수와 상속을 통해 이를 해결하고자 했다.boolean타입의 인스턴스 변수를 만들고 이에 대한 getter와 setter를..

옵저버 패턴이란?옵저버 패턴(Observer Pattern)은 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다(one-to-many) 의존성을 정의한다. 옵저버 패턴에는 하나의 subject(상태를 저장하고 있는 객체)가 있고 object(상태를 전달받는 객체)로 이루어진 observer가 존재한다.subject의 값이 변경될 때마다 observers로 묶여있는 그룹에 속해 있는 object들에게 변경 사항을 알려준다. (혹은 object들이 가져온다)본 교재에서는 이를 그림으로 직관적이게 나타냈다.Duck이라는 object가 observer에 등록을 요청한다. subject는 이를 받아들여 duck object를 observer 그룹에 넣..