본문 바로가기
프레임워크(Framework)/Spring Boot

[Spring Boot] 디자인 패턴(GoF)

by 송기동 2024. 1. 30.
728x90

디자인 패턴

- 공통적으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴

- 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안

- 객체 지향 4대 특성(캡슐화, 상속, 추상화, 다형성)과 설계 원칙(SOLID)을 기반으로 구현

 

#  디자인 패턴의 장점

1. 재사용성

2. 가독성

3. 유지보수성

4. 확장성

5. 안정성과 신뢰성

생성(Creational) 패턴 구조(Structural) 패턴 행위(Behavioral) 패턴
싱글톤(Singleton) 어탭터(Adapter) 옵저버(Observer)
팩토리 메서드(Factory Method) 브릿지(Bridge) 전략(Strategy)
추상 팩토리(Abstract Factory) 컴포지트(Composite) 커맨드(Command)
빌더(Builder) 데코레이터(Decorator) 상태(State)
프로토타입(Prototype) 퍼사드(Facade) 책임 연쇄(Chain of Responsibility)
  플라이웨이트(Flyweight) 방문자(Visitor)
  프록시(Proxy) 인터프리터(Interpreter)
    메멘토(Memento)
    중재자(Mediator)
    템플릿 메서드(Template Method)
    이터레이터(Iterator)

생성 패턴

#  싱글톤 패턴

- 한 클래스마다 인스턴스를 하나만 생성해서 인스턴스가 하나임을 보장하고 어느 곳에서도 접근할 수 있게 제공하는 패턴

#  팩토리 메서드 패턴

- 객체 생성을 서브클래스로 분리해서 위임하는 패턴

#  추상 팩토리 패턴

- 구체적인 클래스를 지정하지 않고 상황에 맞는 객체를 생성하기 위한 인터페이스를 제공하는 패턴

#  빌더 패턴

- 객체의 생성과 표현을 분리해 객체를 생성하는 패턴

# 프로토타입 패턴

- 원본 객체를 복사해 객체를 생성하는 패턴


구조 패턴

# 어댑터 패턴

- 클래스의 인터페이스를 의도하는 인터페이스로 변환하는 패턴

# 브릿지 패턴

- 추상화와 구현을 분리해서 각각 독립적으로 변형,확장 하는 패턴

# 컴포지트 패턴

- 여러 객체로 구성된 복합 객체와 단일 객체를 동일하게 다루어, 트리 구조의 객체를 구성하는 패턴

# 데코레이터 패턴

- 객체의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 하는 패턴

# 퍼사드 패턴

- 서브시스템의 인터페이스 집합들에 하나의 통합된 인터페이스를 제공하는 패턴

# 플라이웨이트 패턴

- 공유 가능한 객체를 통해 메모리 사용을 최적화하는 패턴

# 프록시 패턴

- 특정 객체를 직접 참조하지 않고 해당 객체를 대행(Proxy)하는 객체를 통해 접근하는 패턴


행위 패턴

# 옵저버 패턴

- 객체의 상태 변화를 관찰하는 관찰자들, 즉 옵저버 목록을 객체에 등록해

   상태가 변할때마다 메서드 등을 통해 객체가 직접 옵저버에게 통지하게 하는 디자인 패턴

# 전략 패턴

- 행동을 클래스로 캡슐화해서 동적으로 행동을 바꿀 수 있게 하는 패턴

# 커맨드 패턴

- 실행될 기능을 캡슐화해서 주어진 여러 기능을 실행하도록 클래스를 설계하는 패턴

# 상태 패턴

- 상태에 따라 객체가 행동을 변경하게 하는 패턴

# 책임 연쇄 패턴

- 요청 처리 객체가 둘 이상 존재하여 한 객체가 처리하지 못하면 다음 객체로 넘어가는 형태의 패턴

- 각 객체들이 고리(Chain)으로 묶여있어 요청이 해결될 때까지 고리를 따라 책임이 넘어감

- 느슨한 결합

# 방문자 패턴

- 실제 로직을 가지고 있는 객체(visitor)가 로직을 적용할 객체(element)를 방문하며 실행하는 패턴

# 인터프리터 패턴

- 주어진 언어의 문법을 위한 표현 수단을 정의하고 해당 언어로 구성된 문장을 해석하는 패턴

# 메멘토 패턴

- 객체의 상태 정보를 저장하고 필요에 따라 상태를 복원하는 패턴

# 중재자 패턴

- 한 집합에 속한 객체들의 상호작용을 캡슐화하는 객체를 정의한 패턴

# 템플릿 메서드 패턴

- 상위에서 인터페이스를 정의하고 하위에서 구체화 시키는 패턴 (유지보수 쉬워짐)

# 이터레이터 패턴

- 내부 구조를 노출하지 않으면서 해당 객체의 집합 원소에 순차적으로 접근하는 방법을 제공하는 패턴

 

728x90