본문 바로가기

분류 전체보기

(568)
[Design Pattern] Chain of Responsibility Pattern 이번 장에서는 연쇄 사슬(Chain of Responsibility) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 책임 연쇄 패턴이란? 위키백과에 따른 정의는 아래와 같다. 명령 객체와 일련의 처리 객체를 포함하는 디자인 패턴. 각각의 처리 객체는 명령 객체를 처리할 수 있는 연산의 집합이고, 체인 안의 처리 객체가 처리할 수 없는 명령은 다음 처리 객체로 넘겨진다. 쉽게 말하면 고객의 요청이 있고 이 요청을 처리 가능할 수도 있는 객체들이 있다고 가정할 때 고객이 객체를 지정해서 요청을 하더라도 지정받은 객체가 처리하지 못하는 경우 다음 객체에게 요청을 전달하여 처리하게 하는 디자인 패턴이다. 필자는 책임 연쇄 패턴을 데이터베이스에 적용할 예정이다...
[Design Pattern] Visitor Pattern 이번 장에서는 비지터(Visitor) 패턴에 대해서 알아본다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 비지터 패턴이란? 위키백과에 따른 정의는 아래와 같다. 알고리즘을 객체 구조에서 분리시키는 디자인 패턴. 구조를 수정하지 않고도 실질적으로 새로운 동작을 기존의 객체 구조에 추가할 수 있게되어 OCP(개방-폐쇄 원칙)를 지킬 수 있게 하는 패턴. 방문자가 방문 할 방문공간과 방문자를 나누어서 로직을 분리한다. 방문자가 방문한 이후의 행동은 방문자에게 위임하는 패턴. 필자는 카페와 바라는 방문공간에 성인과 미성년자가 방문자로 방문하는 상황을 예로들어 진행하겠다. GoF Design Pattern에 따르면 아래와 같은 Class Diagram이 그려진다. Visitor: 방문자 추..
[Design Pattern] Decorator Pattern 이번 장에서는 데코레이터(Decorator) 패턴에 대해서 알아본다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 데코레이터 패턴이란? 위키백과에 따른 정의는 아래와 같다. 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴으로, 기능 확장이 필요할 때 서브클래싱 대신 쓸 수 있는 유연한 대안이 되는 디자인 패턴. 쉽게 말해서 사용중인 객체에 추가 기능이 필요한 경우 해당 객체를 확장(상속)하는 것이 아니라 데코레이터를 통해 기능을 추가하는 패턴이다. 필자는 아래의 이미지에서 햄, 참치, 베지 샌드위치를 만드는 과정을 예시로 살펴볼 것이다. Gof Design Pattern에 따르면 아래와 같은 Class Diagram이 그려진다. Component: 실제 구현체와 Dec..
[Design Pattern] Composite Pattern 이번 장에서는 컴포지트(Composite) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 컴포지트 패턴이란? 위키백과에 따르면 아래와 같이 정의되어 있다. 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴으로 사용자가 단일 객체와 복합 객체 모두 동일하게 다루도록 한다. 쉬운 예시로 PC에서 Folder와 File이 있다. 이번에 필자가 예시로 사용할 것도 Java의 Package와 Java File이다. GoF Design Pattern에 따르면 아래와 같은 Class Diagram이 그려진다. Component: 구현체인 Leaf와 Composite의 추상 클래스 Leaf, Component: Component의 구현체 위의 구조..
[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 ..