본문 바로가기

디자인패턴6

Bridge Pattern (브릿지 패턴) Bridge Pattern (브릿지 패턴) 브릿지 패턴은 기능의 클래스 계층과 구현의 클래스 계층을 bridge 처럼 연결하는 역할을 한다. 구현부에서는 추상 계층을 분리하여 독립적인 변경이 가능하도록 한다. Example 1 TV 모델에 상관없이 동작하는 만능 리모컨을 개발한다고 하자. 리모컨 자체는 똑같이 추상화 부분을 바탕으로 하지만 TV 모델마다 다른 구현이 들어가야 한다. 이 때 리모컨의 기능이 추가되면 RemoteControl을 상속 받는 모든 클래스가 변경이 되어야 한다. 여기서 우리는 TV도 바뀔 수 있고, 리모컨도 바뀔 수 있을 때에 대한 상황을 고려해야 한다. 브릿지 패턴을 사용하면 아래와 같이 기능 부분과 구현 부분을 서로 다른 클래스 계층 구조로 분리할 수 있다. 왼쪽은 리모컨을 나.. 2023. 3. 24.
Builder Pattern (빌더 패턴) Builder Pattern (빌더 패턴) Builder Pattern은 객체 생성 시 복잡한 과정을 간소화 하기 위한 디자인 패턴 중 하나이다. 이 패턴은 객체의 생성과정을 단계별로 분리하고, 이 단계들을 수행하는 Builder 클래스를 만들어 객체를 생성한다. 따라서 Builder 패턴에서 객체를 생성하는 역할을 담당하는 Builder 클래스는 크게 두 가지 유형의 인터페이스를 가져야 하는데, 하나는 객체의 각 부분을 생성하기 위한 인터페이스이고, 다른 하나는 부분별로 생성된 것들을 조합해서 전체 객체를 구성한 뒤 이를 return 해주기 위한 인터페이스 이다. Structure Builder : Product을 생성하는 Abstract Interface 이다. ConcreteBuilder : 구체 .. 2023. 3. 23.
Singleton Pattern (싱글톤 패턴) Singleton Pattern (싱글톤 패턴) Singleton Pattern은 유일하게 하나의 인스턴스만 존재하도록 보장하며, 생성된 인스턴스는 전역변수를 참조하는 것 처럼 어디서든 참조할 수 있다. Implementations Coin 인스턴스는 private static으로 선언하고, 외부에서는 getInstance()를 통해서만 사용할 수 있도록 한다. public class Coin { private static final int ADD_MORE_COIN = 10; private int coin; private static Coin instance = new Coin(); // eagerly loads the singleton private Coin() { // private to preven.. 2023. 2. 3.
Factory Method Pattern (팩토리 메소드 패턴) Factory Method Pattern (팩토리 메소드 패턴) 부모클래스에서는 객체 생성의 인터페이스만 제공하고, 구체적인 객체 생성은 자식 클래스에서 한다. 즉, 자식 클래스가 어떤 객체를 생성할 지 결정한다. 이를 이용하면 기존코드를 수정하지 않고(인터페이스 동일) 인스턴스를 생성하는 부분을 확장시킬 수 있다. 팩토리 메소드 패턴은 "생성"에 사용된다는 점만 다를 뿐 궁극적으로는 템플릿 메소드 패턴과 동일하다. Structure Creator : 부모 클래스로 객체 생성 인터페이스를 제공한다. ConcreateCreator : Creator를 상속받는 구체 클래스로 실제 인스턴스 생성을 수행한다. Product : ConcreateCrator에 의해 생성되는 결과물이다. 확장성을 위해 Product.. 2023. 2. 2.
Factory Pattern (팩토리 패턴) Factory Pattern (팩토리 패턴) 서로 관련성이 있거나 책임이 같은 클래스들을 "생성"해주는 클래스를 객체 생성관정 중간에 두어 복잡도를 줄이는 방법이다. 즉, 비슷한 객체를 공장(factory)에서 찍어내듯이 생성해주는 역할을 하는 클래스를 따로 두는 것을 말한다. 이러한 역할을 하는 클래스의 클래스명 자체에 명시적으로 Factory를 붙여주기도 한다. Example 아래는 image type에 따르는 Reader를 생성하는 JAVA 예제이다. public class ImageReaderFactory { public static ImageReader createImageReader(ImageInputStreamProcessor iisp) { if (iisp.isGIF()) { return n.. 2023. 2. 2.