본문 바로가기

Design

(25)
[Design Pattern] Bridge Pattern 이번 장에서는 브릿지(Bridge) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 브릿지 패턴이란? 위키백과에 따른 정의는 아래와 같다. 구현부에서 추상층을 분리하여 각자 독립적으로 변형할 수 있게 하는 패턴이다. 쉽게 말해서 구현체와 구현체의 행위를 서로 다르게 작성하여 독립적으로 유지보수 하는 패턴이다. 필자는 대학생(구현체)과 대학생활(구현체의 행위)를 가지고 예시를 들어보겠다. GoF Design Pattern에 따르면 아래와 같은 Class Diagram이 그려진다. Absraction: 구현체들의 추상 클래스. RefinedAbstraction: Abstraction을 재정의한 클래스. Implementator: 구현체들의 행위를 정의한 인터..
[Design Pattern] Abstract Factory Pattern 이번 장에서는 추상 팩토리(Abstract Factory) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 추상 팩토리 패턴이란? 다양한 구성 요소 별로 '객체의 집합'을 생성하는 디자인 패턴. 서로 관련된 객체들을 하나로 묶어서 팩토리 클래스로 만들고 조건에 맞게 생성하도록 팩토리를 만들어서 객체를 생성하는 디자인 패턴. 대학생이 들어야하는 전공수업을 예시로 알아보도록 하겠다. 대학생을 학생들마다 학과를 가지고 있으며 학과에 따라서 학년에 맞는 전공수업이 정해져있다. 이는 대학생이 임의로 정할 수 없으며 학교에서 정한 규칙을 따라야한다. 추상 팩토리 패턴이란 서로 관련된 객체들을 하나로 묶는다고 하였는데 대학생과 전공수업을 하나로 묶어서 한명의 대학생을..
[Design Pattern] Builder Pattern 이번 장에서는 빌더(Builder) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 디자인 패턴은 데이터베이스에 접속하는 클라이언트를 생성하는 과정을 접목시켜서 알아도록한다. 필자는 빌더 패턴은 "사전적 정의의 빌더 패턴"과 "현업에서 사용하는 빌더 패턴" 두 가지가 있다고 생각한다. 이번 장에서는 두 가지의 패턴을 모두 다뤄보도록 한다. (필자는 Spring으로 개발을 해서 Lombok 어노테이션을 사용해서인지 "현업에서 사용하는 빌더 패턴"만 사용하였고 "사전적 정의의 빌더 패턴은 사용해본 적이 없다.") "현업에서 사용하는 빌더 패턴"이 궁금하다면 글의 하단부로 이동한다. 빌더 패턴이란? 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생..
[Design Pattern] Prototype Pattern 이번 장에서는 프로토타입(Prototype) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 프로토타입 패턴은 하나의 어플리케이션에서 여러 데이터베이스에 접속하는 경우 공통되는 정보는 복사하고 변경되어야하는 정보만 수정하는 방식으로 진행하며 프로토타입 적용 전과 후의 성능을 비교해본다. 프로토타입 패턴이란? 생성할 객체들의 타입이 프로토타입인 인스턴스로부터 결정되도록 하며, 인스턴스는 새 객체를 만들기 위해 자신을 복제하는 패턴이다. 쉽게 말해서 최초에 프로토타입 인스턴스를 생성하고 이후에 생성되는 인스턴스는 새로 만드는 것이 아니라 최초의 프로토타입 인스턴스를 복사하는 패턴이다. GoF Design Patterns에 따르면 아래와 같은 Class ..
[Design Pattern] Singleton Pattern 이번 장에서는 싱클톤(Singleton) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 싱글톤 패턴은 "데이터베이스" 클라이언트를 생성하고 생성된 객체를 재사용하는 과정을 통해 살펴보도록 한다. 싱글톤 패턴이란? 하나의 어플리케이션에서 단 하나의 인스턴스만 생성하서 사용하는 디자인 패턴이다. 고정된 메모리 영역을 사용하면서 한번의 생성으로 인스턴스 사용을 공유하기 때문에 메모리 낭비를 방지할 수 있다. 필자가 작성한 다른 디자인 패턴 글과는 다르게 이번에는 싱글톤 패턴의 단점을 보완하는 방법에 대해서 알아본다. OCP 위반등 여러가지 단점이 있지만 이번에 다룰 단점은 Multi Thread 환경에서 복수의 인스턴스가 생성될 수 있다는 점을 해결하는..
[Design Pattern] Factory Method Pattern 이번 장에서는 팩토리 메서드 패턴(Factory Method)에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 팩토리 메서드 패턴은 "데이터 베이스" 클라이언트를 생성하고 데이터를 Insert하는 과정을 접목시켜 알아보겠다. 팩토리 메서드 패턴이란? 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며 자식 클래스가 어떤 객체를 생성할지를 결정하도록 캡슐화한 패턴이다. 이전에 살펴보았던 템플릿 메서드 (링크)의 생성 패턴 버전으로 볼 수 있다. GoF Design Patterns에 따르면 아래와 같은 Class Diagram이 그려진다. Product: 생성될 객체들이 구현해야 할 기능을 명시한 인터페이스. ConcreteProduct: 객체가 생..
[Design Pattern] Template Method Pattern 이번 장에서는 템플릿 메소드(Template Method) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 템플릿 메소드 패턴은 "데이터 베이스"에 데이터를 Insert, Select하는 과정을 접목시켜 알아보겠다. 템플릿 메소드 패턴이란? 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴이라고 많은 곳에 나와있다. 조금 쉽게 풀어보면 확장 및 수정이 자주 일어나는 코드는 서브 클래스에서 구현하고 중복되고 공통적으로 사용되는 코드는 상위 클래스에서 관리한다. 쉽게 적는다고 적었는데도 쉽지가 않다. 그림을 보면서 알아보도록 하겠다. GoF Design Patterns에 따..
[Design Pattern] Adapter Pattern 이번 장에서는 어댑터(Adapter) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 필자는 모든 디자인 패턴을 우리 일상 생활에 접목시켜서 알아보려한다. 이번 어댑터 패턴은 "오프라인 화장품 매장"에 접목시켜 알아보겠다. 어댑터 패턴이란? 호환되지 않는 인터페이스를 클라이언트는 코드 변경없이 그대로 활용할 수 있다. 클라이언트가 사용하려는 인터페이스가 자신이 사용하는 방식과 맞지 않더라도 어댑터를 이용하여 사용할 수 있게 되는 것이다. GoF Design Patterns에 따르면 아래와 같은 Class Diagram이 그려진다. "오프라인 화장품 매장"에 접목시켜보면 아래와 같은 Class Diagram이 그려진다. 화장품을 구매하려는 고객(Custom..