Tech & Programming/Pattern & Design 5

템플릿 메소드 패턴(template method pattern) 이란?

이번에는 템플릿 메소드 패턴(template method pattern)에 대해서 알아보도록 하겠습니다.이전글들과 마찬가지로 Head First Design Pattern 책을 참고했습니다. 템플릿 메소드 패턴에서는 메소드에서 알고리즘의 골격을 정의합니다.알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정단계를 재정의 할 수 있습니다. 즉, 템플릿 메소트 패턴은 알고리즘 틀을 만들기 위한 것입니다.아래 예제 소스코드는 커피, 차를 만드는 과정을 프로그램 한 것입니다. 커피, 차를 만드는 일련의 과정을 메소드로 정의합니다.그리고, 이 메소드 중 하나 이상이 추상메소드로 정의되며, 그 추상 메소드는 서브클래스에서..

팩토리 패턴(Factory Pattern) 이란?

이번 시간에는 팩토리 패턴(Factory Pattern)에 대해서 알아보도록 하겠습니다. 원칙 : 바뀔 수 있는 부분을 찾아내서 바뀌지 않는 부분하고 분리시켜야 한다. new를 사용하는 것은 구상클래스의 인스턴스를 만드는 것입니다. 구상클래스를 바탕으로 코딩을 하면 나중에 코드를 수정해야할 가능성이 높아지고, 유연성이 떨어지게 됩니다. 그 이유는 바로 변화에 약하기 때문입니다. 인터페이스에 맞춰서 코딩을 하면 시스템에서 일어날 수 있는 여러가지 변화를 이겨낼 수 있습니다. 이렇게 구상클래스의 인스턴스를 만드는 부분을 찾아서 분리/캡슐화 하기 위해서 바로 팩토리 패턴을 씁니다.팩토리 메소드 패턴에서는 객체를 생성하기 위한 인터페이스를 정의하는데, 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정하게 만..

프록시 패턴(proxy pattern) 이란?

이번에는 프록시 패턴(proxy pattern)에 대해서 알아보도록 하겠습니다. 프록시 패턴은 어떤 객체에 대한 접근을 제어하는 용도로 대리인이나 대변인에 해당하는 객체를 제공하는 패턴입니다. 주로 프록시 패턴은 RealSubject 가 원격 시스템에서 돌아가거나, 그 객체의 생성 비용이 많이 들어 실제 사용 시점에 객체를 생성하거나, 실제 객체에 접근을 제한 및 제어를 해야 할 때 등 의 경우에 사용 됩니다. 프록시 패턴의 UML은 아래와 같습니다. Proxy 에는 RealSubject에 대한 레퍼런스가 들어있습니다. 그리고, Proxy 와 RealSubject 는 똑같은 인터페이스(Subejct)를 구현하기 때문에 RealSubejct 객체가 들어갈 자리면 어디든지 Proxy 를 대신 쓸 수 있습니다..

스테이트 패턴(State Pattern) 이란?

이번 시간에는 스테이트 패턴(State Patter)에 대해서 알아보겠습니다. 사탕 뽑기 기계 프로그램을 구현한다고 가정하면 사탕뽑기 기계는 '동전없음', '동전있음', '상품배출', '상품품절' 상태를 가질 것입니다.그리고, 사탕뽑기의 각 상태는 아래와 같은 행위를 통해서 다른 상태로 변이하게 됩니다. 이 행위들과 상태를 코드로 구현하면 아래와 같이 구현할 수 있을껍니다. public class GumBallMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; private int numberOfGumBall = 0;..

이터레이터 패턴 (Iterator Pattern) 이란?

2019년은 리펙토링 및 소스코드의 품질, 설계 공부에 초점을 맞춰서 책을 읽고, 공부를 하고 있습니다.그 중 Head First Design Patterns 책을 보고 패턴에 대해 공부한 내용들을 조금씩 정리해서 시리즈로 꾸준히 올려보도록 하겠습니다. 금일은 이터레이터(iterator) 패턴입니다. 이터레이터(iterator) 패턴은 컬렉션 구현방법을 노출 시키지 않으면서도 그 집합체 안에 들어 있는 모든 항목에 접근할 수 있게 해주는 방법을 제공해 줍니다. 이터레이터(iterator) 패턴을 사용하면 객체안의 항목 또는 컬렉션 객체 안에 들어있는 모든 항목에 접근하는 방식을 통일할 수 있습니다. 이렇게 접근 방식을 통일하게 되면 어떤 종류의 객체에 대해서도 사용할 수 있는 다형적인 코드를 만들 수 있..