GoF 디자인 패턴
패턴 이름보다 바꾸려는 대상과 객체 사이 역할을 먼저 찾는다.
실기 학습 목표
패턴 이름보다 바꾸려는 대상과 객체 사이 역할을 먼저 찾는다.
핵심 이론
생성 패턴: Abstract Factory(관련 제품군), Builder(단계적 조립), Factory Method(하위 클래스가 생성 타입 결정), Prototype(원형 복제), Singleton(인스턴스 접근의 단일화).
구조 패턴: Adapter(규격 변환), Bridge(추상과 구현 축 분리), Composite(부분·전체 트리 동일 취급), Decorator(객체 감싸 기능 추가), Facade(간단한 통합 창구), Flyweight(내재 상태 공유), Proxy(대리 접근).
행위 패턴: Chain of Responsibility(처리자 사슬), Command(요청 객체), Interpreter(문법 해석), Iterator(순회), Mediator(상호작용 중재), Memento(상태 저장·복원), Observer(변경 통지), State(상태별 행동), Strategy(알고리즘 교환), Template Method(절차 틀), Visitor(요소별 연산 분리).
Adapter와 Bridge는 각각 기존 규격 호환과 독립 확장이 목적이다. Strategy는 알고리즘 교체, State는 상태 변화에 따른 행동이다. Factory Method와 Abstract Factory는 생성 결정의 위임과 제품군 생성이라는 차이를 본다.
패턴은 해결하려는 변화에서 출발한다
생성은 객체를 만드는 방법, 구조는 객체를 연결하는 방법, 행위는 책임과 협력을 나누는 방법에 초점을 둔다. 문제의 동사에 밑줄을 긋듯 표시하면 이름을 회상하기 쉽다. 변환한다·감싼다·공유한다·통지한다·교환한다는 서로 다른 설계 목적이다.
| 혼동하는 패턴 | 결정적인 구별 |
|---|---|
| Adapter / Facade | 기존 규격을 맞춤 / 여러 기능의 간단한 창구 |
| Bridge / Adapter | 두 변화 축을 독립 확장 / 기존 규격 불일치 해결 |
| Strategy / State | 알고리즘 교환 / 상태에 따른 행동 변화 |
| Factory Method / Abstract Factory | 생성 결정을 하위 타입에 위임 / 관련 제품군 생성 |
| Composite / Flyweight | 부분·전체를 같은 방식으로 처리 / 공통 상태 공유 |
할인 계산 객체를 바꿔 끼우는 사례라면 교환 가능한 알고리즘이므로 Strategy다. 구독한 객체들에게 값 변경을 알리면 Observer다. 요청을 객체로 만들어 실행·보관·취소의 단위로 다루면 Command다. 한 사례를 여러 패턴 이름으로 무작정 나열하지 말고 지문이 강조한 목적 하나를 선택한다. 장문 구현을 암기하는 대신 이 비교와 핵심 단서를 익힌다.
풀이 예시
배송 요금 계산기는 거리 기반, 무게 기반, 정액 계산 객체 중 하나를 주입받는다. 계산기는 공통 cost()만 호출하고 실행 중에 계산 객체를 다른 것으로 교체할 수 있다. 알고리즘들을 같은 계약 아래 교환 가능하게 만든 패턴을 쓰시오.
예시 정답
Strategy
풀이 과정
서로 다른 계산 알고리즘을 캡슐화하고 공통 인터페이스를 통해 선택·교체하는 전략 패턴이다. 객체 내부 상태 전이에 따라 행동이 바뀌는 State 패턴을 묻는 상황이 아니다.
답안 점검
위 풀이 예시의 답을 가린 뒤, 핵심 이론의 규칙을 적용해 직접 풀어 보세요. 코드와 계산 문제는 중간값·단위·최종 출력의 순서를, 용어 문제는 지문의 핵심 단서와 답의 의미를 점검하세요. 해설과 다른 부분이 있으면 어느 조건을 놓쳤는지 확인하고 연결된 실기 문제로 다시 연습하세요.