본문 바로가기

디자인패턴10

브릿지 패턴 (Bridge Pattern) 사용 의도 추상화와 구현을 분리하여 유연함을 증가시키고 재사용성을 증가시킵니다. 예시 메시지를 보내는 어플리케이션을 개발한다고 가정해봅니다. TextMessage 와 EmailMessage 를 보내는 어플리케이션을 개발하는 과정에서 아래와 같은 설계를 하였습니다. 구조 Message 메시지에 대한 추상화 클래스 TextMessage / EmailMessage 상세한 메시지 (Text / Email) 에 대한 추상클래스 TextMessageSender / EmailMessageSender TextMessage 와 EmailMessage 를 보내는 클래스 단점 추상화인 Message (Client 에 제공) 와 TextMessageSender (구현체) 가 너무 밀접하게 통합되어있습니다. 추상화에 선택적으로.. 2021. 6. 18.
어댑터 패턴 (Adapter pattern) 사용 의도 클래스의 인터페이스를 사용자가 기대하는 인터페이스로 적응시킵니다. 구조 합성을 이용한 패턴과, 상속을 이용한 패턴 2가지 Adapter Pattern 이 있습니다. GOF pattern 설명 Client 외부 Library 를 사용하려는 클라이언트이다. Target Adapter 가 구현하는 인터페이스거나 혹은 상속하는 클래스 Adapter RestTemplate 의 기능을 사용하여 사용자가 기대하는 인터페이스로 변환해주는 Adapter Adaptee 외부 Library UserAdaptee 로 외부에 호출하여 유저의 정보를 가져온 뒤 유저의 등급을 VIP 로 작업해야 하는 경우 작업 수행 주체 외부에서 유저의 정보를 가져오는 작업 UserAdaptee 유저에게 VIP 등급을 부여하는 작업 V.. 2021. 6. 12.
단일체 패턴 (Singleton Pattern) 사용의도 단 하나의 인스턴스만이 필요하고, 이를 접근하는 경우 사용합니다. 생성방식 1. Eager Initialization 바이트코드(.class파일) -> native code(JVM이 실행할 수 있는 코드) 로 변환하는 과정에서 ClassLoader 가 클래스를 로딩 할 때, Initializing 과정에서 static 변수가 할당되고, static 블록이 수행되는 것을 이용하여 구현합니다. 참고 public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() { return INSTANCE; } } 코드.. 2021. 6. 5.
원형패턴 (Prototype Pattern) 사용의도 미리 원형(Prototype) 으로 초기화 해 둔 뒤, 이를 복제해서 사용합니다. boilerplatecode 를 제거할 수 있습니다. 이를 복제해서 사용하므로써, 인스턴스화 하는 클래스를 런타임에 초기화하여 생성합니다. 미리 원형으로 초기화한다. 어떠한 객체를 미리 생성해두는 것을 말합니다. 이를 복제해서 사용한다. 생성해둔 객체를 복사하여 사용한다는 뜻입니다. 인스턴스화 하는 클래스를 런타임에 초기화하여 생성한다. 복제한 클래스들 여러개를 합성(Composition) 하여 갖고있는 인스턴스를 런타임에 생성한다는 뜻입니다. 구조 예시) 비행기의 부품을 선택하여, 완제품인 비행기를 만드는 게임 완제품인 비행기 를 만들기위해서 부품으로 엔진 날개 를 선택해야 한다고 가정합니다. @AllArgsCo.. 2021. 6. 3.