본문 바로가기

Design/Design Pattern

(24)
[Design Pattern] Mediator Pattern 이번 장에서는 중재자(Mediator) 패턴에 대해서 알아본다. 샘플 코드는 [여기 (링크)] 프로젝트의 테스트 코드로 정리해두었다. 중재자 패턴이란? 위키백과에 따른 정의는 아래와 같다. 객체들의 집합이 상호작용하는지를 함축해놓은 객체를 정의한다. 이 패턴은 프로그램의 실행 행위를 변경할 수 있기 때문에 행위 패턴으로 간주된다. 중재자 패턴을 사용하면 객체 간 통신은 중재자 객체 안에 함축된다. 객체들은 더 이상 다른 객체와 서로 직접 통신하지 않으며 대신 중재자를 통해 통신한다. 이를 통해 객체 간 의존성을 줄일 수 있으므로 결합도를 감소시킨다. 필자는 채팅 어플을 사용하는 사용자들과 채팅 서버(중재자)를 예시로 진행할 예정이다. GoF Design Patterns에 따르면 아래와 같은 Class D..
[Design Pattern] Observer Pattern 이번 장에서는 옵저버(Observer) 패턴에 대해서 알아본다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 옵저버 패턴이란? 위키백과에 따른 정의는 아래와 같다. 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버들의 목록을 객체에 등록하여 상태 변화가 있을 때마다 메서드 등을 통해 객체가 직접 목록의 각 옵저버에게 통지하도록 하는 디자인 패턴이다. 주로 분산 이벤트 핸들링 시스템을 구현하는 데 사용된다. 발행/구독 모델로 알려져 있기도 하다. 설명이 쉽게 잘 나와있어서 쉽게 풀어 쓸 필요는 없을 듯하다. 중요한 점은 옵저버가 관찰하는 것이 아니라 관찰 당하는 객체가 자신의 변화를 옵저버에게 통지한다는 점이다. 필자는 서버 객체와 개발자 객체를 만들어 서버의 리소스 사용량이 일정 수..
[Design Pattern] Facade Pattern 이번 장에서는 퍼사드(Facade) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 퍼사드 패턴이란? 위키백과에 따른 정의는 아래와 같다. Facade (외관)은 "건물의 정면"을 의미한다. 클래스 라이브러리 같은 어떤 소프트웨어의 다른 커다란 코드 부분에 대한 간략화된 인터페이스를 제공하는 객체이다. 쉽게 말하면 실제로 복잡하게 작동하는 로직이 있을 때 복잡한 로직을 수행하는 외관(Facade)를 두고 클라이언트는 외관을 호출하여 처리하게 하는 패턴이다. 필자는 CI/CD의 복잡한 모든 단계를 개발자가 직접하는 호출해서 진행하는 과정을 Facade 객체인 CICDFramework를 생성하여 복잡한 단계 수행을 Facade 객체에게 위임하는 상황을 예로들..
[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: 구현체들의 행위를 정의한 인터..