디자인 패턴
- 공통적으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴
- 개발하면서 발생하는 반복적인 문제들을 어떻게 해결할 것인지에 대한 해결 방안
- 객체 지향 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)를 방문하며 실행하는 패턴
# 인터프리터 패턴
- 주어진 언어의 문법을 위한 표현 수단을 정의하고 해당 언어로 구성된 문장을 해석하는 패턴
# 메멘토 패턴
- 객체의 상태 정보를 저장하고 필요에 따라 상태를 복원하는 패턴
# 중재자 패턴
- 한 집합에 속한 객체들의 상호작용을 캡슐화하는 객체를 정의한 패턴
# 템플릿 메서드 패턴
- 상위에서 인터페이스를 정의하고 하위에서 구체화 시키는 패턴 (유지보수 쉬워짐)
# 이터레이터 패턴
- 내부 구조를 노출하지 않으면서 해당 객체의 집합 원소에 순차적으로 접근하는 방법을 제공하는 패턴
'프레임워크(Framework) > Spring Boot' 카테고리의 다른 글
[Spring Boot] 스프링 부트 로드맵 (28) | 2024.02.13 |
---|---|
[Spring Boot] 관점 지향 프로그래밍 (AOP) (27) | 2024.02.02 |
[Spring Boot] 제어의 역전 (IoC), 의존성 주입 (DI) (26) | 2024.02.02 |
[Spring Boot] Spring Framework 동작 원리 (27) | 2024.02.02 |
[Spring Boot] MVC 패턴 (30) | 2024.02.02 |