정보처리기사 실기 디자인 패턴(GoF)(문제풀이)

정지범·3일 전

정보처리기사(실기)

목록 보기
13/19

🧩 GoF 디자인 패턴 정리

정보처리기사 실기에서 자주 출제되는 GoF 디자인 패턴을 문제 중심으로 정리한다.

GoF 디자인 패턴은 목적에 따라 크게 다음 세 종류로 구분한다.

생성 패턴(Creational)
구조 패턴(Structural)
행위 패턴(Behavioral)

📌 연습 문제

1. 생성 패턴 구분

다음 설명에 해당하는 생성 패턴을 순서대로 쓰시오.

ㄱ. 서로 어울리는 버튼, 창, 메뉴 같은 제품군을 구체 클래스 없이 한 세트로 만든다.
ㄴ. 같은 조립 절차를 사용해 서로 다른 형태의 복잡한 결과물을 만든다.
ㄷ. 이미 존재하는 원형 객체를 복제해 새 객체를 얻는다.
ㄹ. 클래스의 인스턴스를 하나만 만들고 여러 사용자가 같은 인스턴스에 접근한다.

풀이

ㄱ. 관련 객체들을 한 세트로 생성

서로 관련되거나 의존적인 객체들을 구체적인 클래스를 직접 지정하지 않고 제품군 단위로 생성한다.

관련 객체 제품군
버튼 + 창 + 메뉴
한 세트로 생성
→ Abstract Factory

ㄴ. 조립 과정을 이용해 복잡한 객체 생성

같은 생성 절차를 사용하면서 최종 결과물은 다르게 만들 수 있다.

복잡한 객체
단계별 조립
같은 과정 → 다른 결과
→ Builder

ㄷ. 기존 객체 복제

새로운 객체를 처음부터 만드는 대신 기존 객체를 복사하여 생성한다.

원형 객체
복제
Clone
→ Prototype

ㄹ. 인스턴스를 하나만 생성

프로그램 전체에서 객체를 하나만 생성하고 같은 객체를 공유한다.

인스턴스 1개
공유
전역 접근
→ Singleton

✅ 답

ㄱ : Abstract Factory
ㄴ : Builder
ㄷ : Prototype
ㄹ : Singleton

2. Adapter · Bridge

다음 두 상황에 해당하는 구조 패턴을 순서대로 쓰시오.

ㄱ. 이미 만들어진 결제 모듈의 인터페이스가 새 서비스의 규격과 맞지 않아 중간 변환 객체를 끼웠다.
ㄴ. 리모컨 종류와 가전제품 종류가 앞으로 각각 늘어날 수 있어 두 계층을 분리하고 연결 객체를 뒀다.

풀이

ㄱ. 인터페이스 변환

기존 클래스 자체를 수정하지 않고 중간 객체를 이용하여 원하는 인터페이스로 변환한다.

기존 인터페이스
↓
변환
↓
새 인터페이스

→ Adapter

ㄴ. 추상화와 구현 분리

기능을 담당하는 계층과 실제 구현을 담당하는 계층을 분리하여 각각 독립적으로 확장할 수 있게 한다.

추상화 계층 ↔ 구현 계층

서로 독립적으로 확장
→ Bridge

✅ 답

ㄱ : Adapter
ㄴ : Bridge

3. Proxy · Decorator · Facade

다음 역할에 해당하는 패턴을 순서대로 쓰시오.

ㄱ. 실제 객체 앞에서 권한을 검사하고 필요할 때만 실제 객체를 만든다.
ㄴ. 기존 인터페이스를 유지하면서 감싼 객체에 기능을 겹쳐 더한다.
ㄷ. 복잡한 여러 하위 시스템을 단순한 하나의 진입 창구로 감춘다.

풀이

ㄱ. 실제 객체 대신 대리 객체 사용

클라이언트가 실제 객체에 직접 접근하지 않고 대리 객체를 거치게 한다.

접근 제어
권한 검사
지연 생성
대리 객체

→ Proxy

ㄴ. 객체를 감싸 기능 추가

기존 객체의 인터페이스는 유지하면서 객체를 감싸 새로운 기능을 추가한다.

기존 객체
↓
Decorator로 감싸기
↓
기능 추가

→ Decorator

ㄷ. 복잡한 시스템에 단순한 창구 제공

여러 개의 복잡한 하위 시스템을 직접 호출하는 대신 하나의 단순한 인터페이스를 제공한다.

복잡한 여러 시스템
↓
하나의 단순한 창구
→ Facade

✅ 답

ㄱ : Proxy
ㄴ : Decorator
ㄷ : Facade

4. Observer · Mediator

한 뉴스 채널의 새 소식이 등록된 구독자 모두에게 자동 전송되는 방식과, 여러 항공기의 요청을 관제탑 하나가 받아 충돌 없이 조정하는 방식에 해당하는 패턴을 순서대로 쓰시오.

풀이

뉴스 채널과 구독자

한 객체의 상태가 변경되면 해당 객체를 구독하고 있는 여러 객체에 자동으로 알린다.

Publisher
↓
Observer 1
Observer 2
Observer 3
상태 변화
구독자에게 자동 알림
1 : N

→ Observer

항공기와 관제탑

객체들이 서로 직접 통신하지 않고 중간의 중재 객체를 통해 통신한다.

항공기 A ─┐
항공기 B ─┼→ 관제탑 → 조정
항공기 C ─┘
중앙 중재자
객체 간 직접 통신 감소

→ Mediator

✅ 답

Observer, Mediator

5. Strategy · State

내비게이션 사용자가 최소 거리와 최단 시간 계산법 가운데 하나를 선택하는 경우와, 주문 객체가 결제 대기, 결제 완료, 취소라는 내부 상태에 따라 같은 요청에 다르게 반응하는 경우의 패턴을 순서대로 쓰시오.

풀이

알고리즘을 선택

여러 알고리즘을 각각 객체로 만들어 필요에 따라 교체한다.

최단 거리 알고리즘
최단 시간 알고리즘

사용자가 선택
→ Strategy

객체 상태에 따라 행동 변화

같은 객체라도 내부 상태가 달라지면 행동이 달라진다.

결제 대기
결제 완료
취소

상태에 따라 행동 변경
→ State

✅ 답

Strategy, State

6. 행위 패턴 구분

다음 설명에 해당하는 행위 패턴을 순서대로 쓰시오.

ㄱ. 요청을 객체로 만들어 저장, 대기열 처리, 취소를 가능하게 한다.
ㄴ. 요청을 처리할 객체를 만날 때까지 처리자 사슬을 따라 넘긴다.
ㄷ. 컬렉션 내부 표현을 노출하지 않고 원소에 차례로 접근한다.
ㄹ. 객체 구조를 바꾸지 않고 원소에 적용할 새 연산을 별도 객체로 추가한다.
ㅁ. 상위 클래스가 알고리즘 골격을 정하고 하위 클래스가 일부 단계를 재정의한다.

풀이

ㄱ. 요청을 객체로 캡슐화

실행할 요청 자체를 하나의 객체로 만든다.

요청 객체화
저장
Queue
Undo

→ Command

ㄴ. 처리자에게 계속 전달

현재 객체가 처리할 수 없으면 다음 처리자에게 요청을 넘긴다.

요청
↓
처리자 A
↓
처리자 B
↓
처리자 C

→ Chain of Responsibility

ㄷ. 컬렉션 순회

컬렉션의 내부 구조를 직접 노출하지 않고 요소를 하나씩 접근한다.

hasNext()
next()

→ Iterator

ㄹ. 객체 구조는 그대로 두고 연산 추가

기존 객체 구조를 수정하지 않으면서 새로운 연산을 추가한다.

객체 구조 유지
새로운 연산 추가
각 객체 방문

→ Visitor

ㅁ. 알고리즘의 전체 틀 제공

상위 클래스에서 알고리즘의 전체 흐름을 정의하고 세부 단계만 하위 클래스에서 구현한다.

전체 흐름 → 부모 클래스
일부 단계 → 자식 클래스

→ Template Method

✅ 답

ㄱ : Command
ㄴ : Chain of Responsibility
ㄷ : Iterator
ㄹ : Visitor
ㅁ : Template Method

📚 2020~2026년 관련 기출문제

📌 2020년 2회 10번

다음 보기가 설명하는 패턴을 쓰시오.
영문 Full-Name으로 작성하시오.

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방법으로 일대 다의 의존성을 가지며 상호작용하는 객체 사이에서는 가능하면 느슨하게 결합하는 디자인을 사용해야 한다.

풀이

핵심 키워드는

한 객체의 상태 변화
다른 객체들에게 자동 전달
1 : N
느슨한 결합

이다.

이는 Observer Pattern의 특징이다.

✅ 답

Observer Pattern

📌 2020년 4회 2번

목적에 따른 디자인 패턴의 유형에는 생성, 구조, ( )이/가 있다.
괄호 ( ) 안에 알맞은 유형을 쓰시오.

풀이

GoF 디자인 패턴은 목적에 따라 세 가지로 분류한다.

생성 패턴
구조 패턴
행위 패턴

✅ 답

행위

📌 2021년 2회 13번

괄호 ( ) 안에 알맞은 단어를 쓰시오.

디자인 패턴 중에서 ( ) 패턴은 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것으로, 클래스나 객체들이 상호작용하는 방법이다. 알고리즘의 패턴에는 Interpreter, Observer, Command가 있다.

풀이

문제에서

객체들의 상호작용
책임 분배
Observer
Command
Interpreter

가 등장한다.

이들은 모두 행위 패턴에 속한다.

✅ 답

행위(Behavioral)

📌 2021년 3회 16번

다음 설명에 해당하는 디자인 패턴을 쓰시오.

( ) 패턴은 객체지향 디자인 패턴이다.

부모(상위) 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며,

자식(하위) 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴이기도 하다.

부모(상위) 클래스 코드에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.

풀이

객체 생성 자체는 상위 클래스에서 정의하지만

어떤 객체를 만들 것인가?

는 하위 클래스에서 결정한다.

객체 생성
↓
하위 클래스가 결정

→ Factory Method

✅ 답

Factory Method

📌 2022년 3회 3번

다음은 디자인 패턴에 대한 설명이다. 괄호 안에 알맞은 답을 작성하시오.

(1)은/는 기능을 처리하는 추상화 계층과 실제 구현을 담당하는 구현 계층을 분리하여, 두 계층이 독립적으로 변경될 수 있도록 하는 패턴이다.

구현뿐 아니라 추상화도 독립적인 확장이 필요할 때 사용한다.

기능 계층과 구현 계층을 연결하는 다리 역할을 하며, 기능 확장과 구현 변경을 서로 분리할 수 있다.

(2)은/는 한 객체의 상태가 변화하면 그 객체에 의존하는 다른 객체들에게 변화된 상태를 전달해주는 패턴이다.

일대다 관계를 가지며, 주로 분산된 시스템 간에 이벤트를 생성, 발행(Publish)하고 이를 수신(Subscribe)해야 할 때 이용한다.

풀이

① 추상화와 구현 분리

추상화 계층
↕
구현 계층

독립적 확장
→ Bridge

② 상태 변화 자동 전달

상태 변화
Publish / Subscribe
1 : N

→ Observer

✅ 답

(1) Bridge
(2) Observer Pattern

📌 2023년 1회 11번

다음 설명에 해당하는 디자인 패턴을 쓰시오.

실제 객체를 직접 참조하는 대신 대리 객체를 앞에 둔다. 대리 객체는 접근 제어, 지연 생성, 로깅 같은 부가 작업을 처리한 뒤 실제 객체에 요청을 전달한다.

풀이

핵심 키워드는

대리 객체
접근 제어
지연 생성
로깅

이다.

이는 Proxy 패턴이다.

✅ 답

Proxy

📌 2023년 2회 11번

디자인 패턴 설명을 읽고 ①과 ②에 들어갈 패턴을 쓰시오.

① 클래스의 인스턴스를 하나만 만들고 어디서든 그 인스턴스에 접근하게 한다.

② 객체 구조의 원소를 바꾸지 않고 새로운 연산을 추가하며, 각 원소를 방문해 작업을 수행한다.

풀이

① 인스턴스 하나

객체 1개
공유
전역 접근

→ Singleton

② 구조를 바꾸지 않고 연산 추가

객체 구조 유지
새로운 연산 추가
원소 방문

→ Visitor

✅ 답

① Singleton
② Visitor

📌 2024년 1회 20번

다음 설명에 해당하는 GoF 디자인 패턴을 쓰시오.

구체적인 클래스를 지정하지 않고 서로 관련되거나 의존적인 객체들의 제품군을 생성하는 인터페이스를 제공한다. 제품군 전체를 일관되게 교체해야 할 때 사용한다.

풀이

핵심은

구체 클래스 지정 X
관련 객체 제품군
제품군 전체 생성

이다.

이는 Abstract Factory이다.

✅ 답

Abstract Factory

📌 2024년 2회 10번

다음 설명에 해당하는 GoF 디자인 패턴을 쓰시오.

컬렉션의 내부 표현을 노출하지 않고 원소를 차례대로 접근할 수 있게 한다. hasNext와 next 같은 동작으로 순회 책임을 별도 객체에 맡긴다.

풀이

컬렉션
순차 접근
hasNext()
next()

가 핵심이다.

이는 Iterator 패턴이다.

✅ 답

Iterator

📌 2024년 3회 6번

괄호에 공통으로 들어갈 GoF 디자인 패턴 분류를 쓰시오.

( ) 패턴은 객체들이 상호작용하는 방법과 책임 분배를 정의한다. 객체 사이의 통신 방법을 다루고 알고리즘을 캡슐화해 결합도를 낮춘다. Chain of Responsibility, Command, Observer가 여기에 속한다.

풀이

Chain of Responsibility
Command
Observer

는 모두 행위 패턴이다.

✅ 답

행위

📌 2025년 1회 14번

다음 설명에 해당하는 디자인 패턴을 쓰시오.

호환되지 않는 인터페이스를 가진 기존 객체를 감싸 클라이언트가 원하는 인터페이스로 바꿔 준다. 기존 클래스의 내부 코드는 수정하지 않는다.

풀이

기존 객체 수정 X
호환되지 않는 인터페이스
원하는 인터페이스로 변환

따라서 Adapter이다.

✅ 답

Adapter

📌 2025년 2회 7번

다음 설명에 해당하는 디자인 패턴을 쓰시오.

실제 객체를 바로 사용하지 않는다. 그 객체를 대신하는 대리 객체가 접근을 제어하고 부가 기능도 맡는다. 실제 객체의 생성을 늦추거나 접근 권한을 확인할 때 쓴다.

풀이

대리 객체
접근 권한
지연 생성

이 나오면 Proxy이다.

✅ 답

Proxy

📌 2026년 1회 2번

다음 설명에 해당하는 디자인 패턴을 각각 쓰시오.

① 기능의 클래스 계층과 구현의 클래스 계층을 분리하고, 두 계층을 연결하여 서로 독립적으로 확장할 수 있게 한다.

② 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 상태 변화를 자동으로 알린다.

풀이

① 기능과 구현 분리

추상화 ↔ 구현
독립적 확장

→ Bridge

② 상태 변화 자동 알림

한 객체의 상태 변화
↓
여러 객체에 알림

→ Observer

✅ 답

① Bridge
② Observer

📌 2026년 2회 17번

다음 설명에 해당하는 디자인 패턴을 보기에서 골라 쓰시오.

구체적인 클래스를 명시하지 않고 서로 관련되거나 의존적인 객체들의 집합을 생성하기 위한 인터페이스를 제공한다. Kit라고도 한다.

ㄱ. Builder
ㄴ. Factory Method
ㄷ. Abstract Factory
ㄹ. Prototype

풀이

관련 객체들의 집합
제품군
구체 클래스 명시 X
Kit

이 나오면 Abstract Factory이다.

✅ 답

ㄷ. Abstract Factory

📌 GoF 디자인 패턴 분류

GoF 디자인 패턴은 총 23개이며 크게 세 종류로 나눈다.

분류목적
생성 패턴객체를 어떻게 생성할 것인가
구조 패턴객체와 클래스를 어떻게 구성할 것인가
행위 패턴객체들이 어떻게 동작하고 협력할 것인가

🏗️ 생성 패턴

객체의 생성 방식과 관련된 패턴이다.

패턴핵심 키워드
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구조 변경 없이 연산 추가

🧠 생성 패턴 암기

생성 패턴 5개는

추빌팩프싱

처럼 묶어서 기억할 수 있다.

추 → Abstract Factory
빌 → Builder
팩 → Factory Method
프 → Prototype
싱 → Singleton

시험에서는 이름 자체보다 키워드 연결이 더 중요하다.

제품군       → Abstract Factory
조립         → Builder
하위 클래스  → Factory Method
복제         → Prototype
하나만       → Singleton

🧠 헷갈리기 쉬운 구조 패턴

Adapter vs Bridge

Adapter

이미 존재하는 두 인터페이스가 서로 맞지 않을 때 사용한다.

기존 인터페이스
→ 변환
→ 원하는 인터페이스
Adapter = 변환기

Bridge

처음부터 기능과 구현을 분리해서 둘 다 독립적으로 확장한다.

추상화 ↔ 구현
Bridge = 두 계층을 연결하는 다리

Proxy vs Decorator

둘 다 객체를 감싼다는 점 때문에 헷갈리기 쉽다.

Proxy

목적은 접근 제어이다.

권한 검사
지연 생성
접근 제어
대리 객체

Decorator

목적은 기능 추가이다.

기존 객체
+ 기능
+ 기능
+ 기능

따라서

Proxy     = 대신 접근
Decorator = 기능 추가

라고 기억하면 된다.


Facade

Facade는 여러 복잡한 기능을 하나의 단순한 창구로 제공한다.

복잡한 시스템 여러 개
↓
Facade
↓
사용자
Facade = 안내 데스크

라고 생각하면 쉽다.


🧠 Observer vs Mediator

Observer

한 객체의 변화가 여러 객체에게 자동 전파된다.

1 → N
유튜브 채널 → 구독자
뉴스 채널 → 구독자

Mediator

여러 객체가 서로 직접 통신하지 않고 중앙 중재자를 거친다.

A ─┐
B ─┼→ Mediator
C ─┘
관제탑
채팅방 서버
중앙 조정자

🧠 Strategy vs State

둘 다 동작이 바뀐다는 점에서 헷갈릴 수 있다.

Strategy

사용할 알고리즘을 선택한다.

최단 거리
최단 시간
통행료 최소

→ Strategy

즉

Strategy = 어떤 방법을 사용할까?

State

객체의 현재 상태 때문에 행동이 달라진다.

대기
결제 완료
취소

즉

State = 지금 상태가 무엇인가?

🧠 행위 패턴 핵심 키워드

시험에서는 설명 속 단어를 보고 바로 패턴을 떠올리는 것이 중요하다.

요청 객체화
저장 / 취소 / Queue
→ Command
처리할 때까지 다음 객체로 전달
→ Chain of Responsibility
hasNext / next
컬렉션 순회
→ Iterator
중앙에서 객체들을 조정
→ Mediator
상태 변화 자동 알림
1 : N
Publish / Subscribe
→ Observer
상태에 따라 행동 변경
→ State
알고리즘 선택 / 교체
→ Strategy
알고리즘 골격은 부모
세부 단계는 자식
→ Template Method
객체 구조 변경 X
새로운 연산 추가
→ Visitor

🔥 시험 직전 최종 암기

생성

Abstract Factory
→ 관련 객체 제품군

Builder
→ 단계별 조립

Factory Method
→ 하위 클래스가 생성 결정

Prototype
→ 복제

Singleton
→ 인스턴스 하나

구조

Adapter
→ 인터페이스 변환

Bridge
→ 추상화 / 구현 분리

Decorator
→ 기능 추가

Facade
→ 단순한 통합 창구

Proxy
→ 대리 객체 / 접근 제어

행위

Observer
→ 상태 변화 자동 알림

Mediator
→ 중앙 중재자

Strategy
→ 알고리즘 선택

State
→ 상태에 따라 행동 변경

Command
→ 요청 객체화

Chain of Responsibility
→ 처리자 사슬

Iterator
→ 순차 접근

Visitor
→ 구조 변경 없이 연산 추가

Template Method
→ 부모가 골격, 자식이 세부 구현

🔥 한 줄로 기억하기

객체를 만든다
→ 생성 패턴

객체를 연결하고 조립한다
→ 구조 패턴

객체가 서로 행동하고 협력한다
→ 행위 패턴
profile
성실하자:)

0개의 댓글