GoF 디자인 패턴을 Kotlin으로 구현하며 학습한 내용을 정리합니다.
참고자료
인스턴스가 오직 하나만 존재하도록 보장하는 패턴
| 예제 | 설명 |
|---|---|
| Object 싱글톤 | object 키워드를 사용한 Kotlin 기본 싱글톤 |
| Eager Initialization | 클래스 로딩 시점에 즉시 초기화 |
| Lazy Initialization | 싱글톤 객체를 지연 초기화하는 방법 |
| Thread-Safe | thread-safe하게 싱글톤을 초기화하는 방법 |
| Double-Checked Locking | DCL을 통한 성능 최적화 |
| Static Inner Class | Companion object + inner class 방식 |
| Enum Class | Enum을 활용한 싱글톤 생성 |
📖 README →
객체 생성을 서브클래스에 위임하여 생성 로직을 분리하는 패턴
| 예제 | 설명 |
|---|---|
| Simple Factory Method | Simple Factory Method 기본 예제 |
| Factory Method Basic | GoF Factory Method 기본 구조 |
| Factory Method Reuse | 생성된 객체를 재사용하는 풀 예제 |
| ViewModelProvider.Factory | Android ViewModel에서의 활용 |
📖 README →
관련된 객체들의 군(family)을 생성하는 인터페이스를 제공하는 패턴
| 예제 | 설명 |
|---|---|
| Basic | Abstract Factory 기본 구조 |
| Factory Method의 한계 | Factory Method로 구현 시 문제점 |
| + Singleton | Abstract Factory + Singleton 조합 |
| + Factory Method | Abstract Factory + Factory Method 조합 |
📖 README →
복잡한 객체의 생성 과정을 단계별로 분리하는 패턴
| 예제 | 설명 |
|---|---|
| Builder Basic | 빌더 패턴 기본 구조 구현 |
| OkHttp | OkHttp 구조를 간소화한 빌더 + 팩토리 예제 |
| Named Argument | Kotlin 기본 인수 + named argument 활용 |
📖 README →
기존 객체를 복사하여 새로운 객체를 생성하는 패턴
| 예제 | 설명 |
|---|---|
| Deep Copy | 깊은 복사를 통한 객체 복제 |
| Shallow Copy | 얕은 복사의 동작과 주의점 |
📖 README →
객체에 동적으로 새로운 기능을 추가하는 패턴
| 예제 | 설명 |
|---|---|
| 상속의 한계 | 기능 확장 시 상속이 가진 문제점 |
| Decorator | NewsRepository에 로깅 + 캐싱 기능 추가 |
📖 README →
호환되지 않는 인터페이스를 연결해주는 패턴
| 예제 | 설명 |
|---|---|
| Object Adapter | 컴포지션 기반 어댑터 |
| Class Adapter | 상속 기반 어댑터 |
| Extension Function | 확장 함수로 Adapter Class 생략 |
📖 README →
추상화와 구현을 분리하여 독립적으로 확장하는 패턴
| 예제 | 설명 |
|---|---|
| 캐릭터 - 문제점 | Bridge 적용 전 클래스 폭발 문제 |
| 캐릭터 - 브리지 적용 | Bridge 적용 후 구조 개선 |
| 도형 - 문제점 | Shape × Color 조합 문제 |
| 도형 - 브리지 적용 | Bridge로 M×N → M+N 해결 |
📖 README →
복잡한 하위 시스템에 대한 단순화된 인터페이스를 제공하는 패턴
| 예제 | 설명 |
|---|---|
| Facade Basic | VideoPlay를 예시로 한 퍼사드 패턴 |
| 재귀적 퍼사드 | 비디오 변환 기능 확장 + 재귀적 퍼사드 |
📖 README →
공유를 통해 대량의 객체를 효율적으로 관리하는 패턴
| 예제 | 설명 |
|---|---|
| 문제점 | 경량패턴 미적용 시 메모리 문제 |
| 경량패턴 적용 | intrinsic state 공유로 해결 |
| Factory + Flyweight | Factory Method와 조합 |
📖 README →
다른 객체에 대한 접근을 제어하는 대리 객체를 제공하는 패턴
| 예제 | 설명 |
|---|---|
| 기본 프록시 | 프록시 패턴 기본 구조 |
| 가상 프록시 | 지연 초기화를 통한 리소스 절약 |
| 보호 프록시 | 권한에 따른 접근 제어 |
| 로깅 프록시 | 요청 전후 로그 기록 |
| 캐싱 프록시 | 동일 요청 결과 캐싱 |
📖 README →
실행 중(런타임)에 알고리즘(행위)을 선택하여 객체의 동작을 런타임에 변경할 수 있게하는 행동 패턴
| 예제 | 설명 |
|---|---|
| 기본 전략 패턴 | 기본 전략 패턴 예제 |
| 전략 + 브릿지 | 전략 패턴+브릿지 패턴 |
📖 README →
객체의 내부 상태가 바뀔 때, 객체의 행동이 함께 바뀌도록 하는 패턴
| 예제 | 설명 |
|---|---|
| 상태패턴 | VideoPlayer State |
📖 README →