디자인 패턴이란?
디자인 패턴은 소프트웨어 설계에서 반복적으로 발생하는 문제에 대한 재사용 가능한 해결책입니다. GoF(Gang of Four)가 1994년에 발표한 23가지 패턴이 표준으로 인정받고 있습니다.
GoF 패턴 3가지 분류
- 생성(Creational) 패턴: 객체 생성 방식을 추상화 (5가지)
- 구조(Structural) 패턴: 클래스와 객체를 조합해 더 큰 구조 형성 (7가지)
- 행동(Behavioral) 패턴: 객체 간 상호작용과 책임 분산 (11가지)
생성 패턴 핵심
싱글톤 (Singleton)
- 클래스 인스턴스를 하나만 생성하고 전역 접근점 제공
- 용도: DB 연결 풀, 로거, 설정 관리자
- 구현: private 생성자 + static 인스턴스 + getInstance() 메서드
팩토리 메서드 (Factory Method)
- 객체 생성을 서브클래스에 위임
- 생성할 구체적 클래스를 서브클래스가 결정
추상 팩토리 (Abstract Factory)
- 관련 객체들의 집합(패밀리)을 생성하는 인터페이스 제공
- 팩토리 메서드의 상위 개념
빌더 (Builder)
- 복잡한 객체를 단계별로 구성
- 용도: 여러 선택적 파라미터가 있는 객체 생성
프로토타입 (Prototype)
- 기존 객체를 복사하여 새 객체 생성
- 객체 생성 비용이 클 때 유용 (clone())
구조 패턴 핵심
어댑터 (Adapter)
- 호환되지 않는 인터페이스를 변환하여 함께 동작하도록 함
- 기존 클래스 수정 없이 다른 인터페이스와 연동
데코레이터 (Decorator)
- 객체에 동적으로 기능을 추가. 상속의 대안
- Java I/O 스트림이 대표적 사례
프록시 (Proxy)
- 실제 객체에 대한 대리자·접근 제어
- 용도: 지연 초기화, 접근 제어, 캐싱, 원격 프록시
파사드 (Facade)
컴포지트 (Composite)
- 객체들을 트리 구조로 구성하여 부분-전체 계층 표현
- 파일 시스템(파일+디렉터리) 구조가 대표 예
행동 패턴 핵심
옵서버 (Observer)
- 객체의 상태 변화를 구독자들에게 자동 통보
- 이벤트 핸들링, MVC의 모델-뷰 관계
전략 (Strategy)
- 알고리즘 군을 정의하고 캡슐화하여 교체 가능하게 함
- 런타임에 알고리즘 교체 가능
커맨드 (Command)
- 요청을 객체로 캡슐화. 실행 취소(Undo) 기능 구현에 활용
템플릿 메서드 (Template Method)
- 알고리즘의 골격을 부모 클래스에 정의, 세부 구현은 서브클래스에 위임
이터레이터 (Iterator)
- 컬렉션 내부 구조 노출 없이 순차 접근 방법 제공
시험 핵심 포인트
- 싱글톤: private 생성자, static 인스턴스, 스레드 안전성 고려
- 팩토리 메서드 vs 추상 팩토리: 단일 제품 vs 제품 패밀리
- 어댑터: 기존 인터페이스 변환 / 데코레이터: 기능 추가 / 프록시: 접근 제어
- 옵서버: pub-sub 패턴의 원형
- 전략 패턴: if-else 대신 다형성으로 알고리즘 교체
마무리
디자인 패턴은 이름과 용도를 매칭하는 문제가 주로 출제됩니다. 각 패턴을 실제 사례(싱글톤=DB 커넥션, 옵서버=이벤트 리스너)와 연결하여 암기하면 효율적입니다.