디자인 패턴은 개발자들이 코드를 더 구조적이고 효율적으로 작성하도록 돕는 중요한 개념입니다.
이 글에서는 자주 사용되는 디자인 패턴을 유형별로 정리하여 한눈에 알아볼 수 있도록 준비했습니다. 😊
디자인 패턴이란?
디자인 패턴은 소프트웨어 개발에서 반복적으로 나타나는 문제를 해결하기 위한 재사용 가능한 설계 템플릿입니다.
이는 **GoF(Gang of Four)**의 책에서 처음 체계적으로 소개되었으며, 크게 세 가지 유형으로 분류됩니다.
- 생성 패턴 (Creational Patterns): 객체 생성과 관련된 문제 해결
- 구조 패턴 (Structural Patterns): 클래스와 객체를 효율적으로 구성
- 행동 패턴 (Behavioral Patterns): 객체 간 상호작용과 역할 분담에 초점
생성 패턴 (Creational Patterns)
객체 생성 과정을 캡슐화하여 유연성과 확장성을 높이는 패턴입니다.
1. 싱글톤(Singleton)
하나의 인스턴스만 생성되도록 보장합니다.
활용 사례: DB 연결, 설정 관리
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2. 팩토리 메서드(Factory Method)
- 객체 생성을 서브클래스에 위임
- 활용 사례: ShapeFactory를 사용해 다양한 Shape 객체 생성
3. 빌더(Builder)
- 복잡한 객체 생성을 단계적으로 처리
- 활용 사례: StringBuilder
4. 프로토타입(Prototype)
- 기존 객체를 복사하여 새로운 객체 생성
- 활용 사례: 성능이 중요한 대량 객체 생성
5. 추상 팩토리(Abstract Factory)
- 관련된 객체들을 묶어 일관된 방식으로 생성
- 활용 사례: GUI 컴포넌트 생성
구조 패턴 (Structural Patterns)
클래스와 객체를 효율적으로 조합하여 더 나은 구조를 만드는 패턴입니다.
1. 어댑터(Adapter)
- 호환되지 않는 인터페이스를 연결
- 활용 사례: InputStreamReader
2. 브리지(Bridge)
- 추상화와 구현을 분리하여 독립적으로 확장 가능
3. 컴포지트(Composite)
- 트리 구조로 객체를 구성하여 단일 객체와 복합 객체를 동일하게 처리
4. 데코레이터(Decorator)
- 객체에 동적으로 기능 추가
- 활용 사례: BufferedReader
5. 파사드(Facade)
- 복잡한 시스템의 간단한 인터페이스 제공
6. 플라이웨이트(Flyweight)
- 공유를 통해 메모리 사용 최소화
7. 프록시(Proxy)
- 객체 접근 제어
- 활용 사례: JPA Lazy Loading
행동 패턴 (Behavioral Patterns)
객체 간 상호작용과 역할 분담을 효율적으로 관리하는 패턴입니다.
1. 책임 연쇄(Chain of Responsibility)
- 요청을 여러 객체에 전달하며 처리
2. 커맨드(Command)
- 요청을 객체로 캡슐화하여 실행을 나중으로 연기
3. 인터프리터(Interpreter)
- 문법 표현을 위한 패턴
4. 이터레이터(Iterator)
- 컬렉션 요소를 순차적으로 접근
- 활용 사례: for-each 루프
5. 중재자(Mediator)
- 객체 간 상호작용을 조정하는 중재 역할
6. 메멘토(Memento)
- 객체 상태를 저장 및 복원
7. 옵서버(Observer)
- 상태 변화 시 구독자에게 알림
- 활용 사례: Event Listener
8. 상태(State)
- 객체 상태에 따라 행동이 바뀜
9. 전략(Strategy)
- 알고리즘을 캡슐화하여 교체 가능
- 활용 사례: 결제 수단 전략 구현
10. 템플릿 메서드(Template Method)
- 알고리즘 구조를 정의하고, 세부 처리를 서브클래스에서 구현
11. 방문자(Visitor)
- 객체 구조를 변경하지 않고 새로운 연산 추가
💡 패턴 선택 시 패턴 자체보다는 문제 해결에 초점을 맞춰야 합니다.
디자인 패턴은 애플리케이션 설계를 더욱 효율적이고 유지보수하기 쉽게 만들어 줍니다. 실무에 적용하면서 점차 익숙해지는 것을 목표로 해보세요!
'Architecture > DesignPatterns' 카테고리의 다른 글
| [만들면서 배우는 클린 아키텍처] 03 코드 구성하기 (2) | 2024.12.22 |
|---|---|
| [만들면서 배우는 클린 아키텍처] 02 의존성 역전하기 (1) | 2024.12.19 |
| [만들면서 배우는 클린 아키텍처] 01 계층형 아키텍처의 문제는 무엇일까? (3) | 2024.12.15 |
| CQRS 패턴: 데이터 읽기와 쓰기를 분리하여 성능과 확장성 극대화하기 (1) | 2024.11.14 |
| [디자인 패턴] 도메인 모델 패턴 vs 트랜잭션 스크립트 패턴 (2) | 2024.11.13 |