디자인 패턴(Design Pattern)이란,
반복적으로 발생하는 소프트웨어 설계 문제를 해결하기 위한 ‘검증된 설계 방법’이다.
즉, 어떤 문제를 어떻게 해결하면 좋은지에 대한 ‘재사용 가능한 해결 템플릿’이다.
객체지향 설계 원칙에 기반하여 만들어짐
특정 언어나 기술에 한정되지 않고, 설계 아이디어 자체에 중점
| 장점 항목 | 설명 |
|---|---|
| 재사용성 증가 | 반복되는 설계를 피하고, 코드 재사용이 가능함 |
| 유지보수성 향상 | 구조가 명확하여 협업 및 유지보수가 쉬움 |
| 확장성 향상 | 요구사항 변경 시 유연하게 대처 가능 |
| 커뮤니케이션 수단 제공 | "싱글톤 패턴 쓰자"처럼 설계를 패턴 명으로 간결하게 표현 가능 |
| 검증된 방법론 사용 | 오랜 시간 동안 검증된 설계 방식이기 때문에 안정적 |
| 단점 항목 | 설명 |
|---|---|
| 과도한 사용 시 복잡도 증가 | 단순한 문제에 패턴을 억지로 적용하면 오히려 비효율적 |
| 러닝 커브 | 패턴에 대한 이해가 부족하면 오용할 수 있음 |
| 초기 설계 비용 | 설계에 많은 시간이 들 수 있음, 작은 프로젝트엔 과할 수 있음 |
| 패턴 이름 | 목적 | 게임 예시 |
|---|---|---|
| Singleton (싱글톤) | 하나의 인스턴스만 존재하도록 보장 | GameManager, AudioManager, UIManager |
| State (상태) | 객체 상태에 따라 다른 행동 정의 | 플레이어 상태 관리 (Idle, Run, Attack 등) |
| Observer (옵저버) | 이벤트 기반 처리 / 변화 감지 | 체력 UI 업데이트, 퀘스트 트리거 반응 |
| Command (커맨드) | 명령을 캡슐화하여 실행/취소 가능 | 유닛 명령 시스템, Undo/Redo |
| Strategy (전략) | 알고리즘을 런타임에 교체 가능 | AI의 행동 패턴 (공격 전략 교체 등) |
| Factory (팩토리) | 객체 생성을 분리하여 유연하게 관리 | 무기, 몬스터, 스킬 등의 생성 시스템 |
| Object Pool (오브젝트 풀) | 자주 생성/삭제되는 객체를 재사용 | 총알, 이펙트, 몬스터 리스폰 등 |
| Component (컴포넌트) | 객체 기능을 동적으로 조합 가능 | Unity의 컴포넌트 기반 설계 (Transform, Collider 등) |
무분별하게 디자인 패턴을 적용하지 말고 상황에 맞게 적절하게 사용하자!
디자인 패턴은 정답이 아닌 ‘효율적인 선택지’ !!
그러기 위해서 패턴들에 대한 공부와 이해도를 위해 글을 작성할 예정이다.