스물두줄

정보관리기술사 · 개념서 · 소프트웨어 공학

디자인 패턴

설명 영상 디자인 패턴 · 2:30

왜 배우는가: 디자인 패턴은 객체지향 설계에서 반복되는 설계 문제의 검증된 해법을 이름으로 공유하게 해 주어, 설계 협업과 재사용의 기반이 된다. 정보관리기술사 시험에서는 GoF 분류 체계와 패턴 개념을 묻는 문항이 반복해서 출제되므로 분류 기준과 용어를 정확히 익혀 둘 필요가 있다.

출제 이력: 제104회 3교시 1번, 제87회 3교시 1번

1. 한 줄 정의와 핵심 키워드

디자인 패턴은 객체지향 설계에서 반복되는 설계 문제를 해결하는 전형적인 해결 방식을 이름과 구조로 정리한 것이다.

  • 디자인 패턴(Design Pattern)
  • GoF(Gang of Four)
  • 생성 패턴(Creational Pattern)
  • 구조 패턴(Structural Pattern)
  • 행동 패턴(Behavioral Pattern)
  • 클래스 패턴과 객체 패턴
  • 화이트박스 재사용과 블랙박스 재사용
  • 위임(Delegation)

2. 개념 풀이

쉬운 말로 하면 디자인 패턴은 설계 문제에 대한 '검증된 정답의 모양'이다. 같은 문제를 여러 번 겪은 개발자들이 해결 방식을 이름 붙여 정리해 두면, 다음 설계자는 처음부터 다시 고민하지 않고 그 이름으로 구조를 주고받을 수 있다.

정식 정의는 다음과 같다. 디자인 패턴은 모듈의 세분화된 역할이나 모듈 간 인터페이스 구현 방식을 설계할 때 참조할 수 있는 전형적인 해결 방식이다. 패턴은 설계 문제, 해결 방법, 적용 시점, 결과를 함께 담는다.

GoF(Gang of Four) 는 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides 네 명을 가리킨다. 이들은 저서에서 패턴을 체계적으로 정리했고, 이 23개 패턴을 디자인 패턴 카탈로그라고 부른다.

생성 패턴(Creational Pattern) 은 객체의 생성 과정에 관여한다. 객체를 어떤 클래스로 만들지 감추어 생성 코드의 결합도를 낮춘다.

구조 패턴(Structural Pattern) 은 클래스나 객체를 합성하는 방법을 다룬다. 인터페이스를 맞추거나 객체들을 큰 구조로 묶는 데 쓴다.

행동 패턴(Behavioral Pattern) 은 객체들이 상호작용하는 방법과 책임을 나누는 방법을 다룬다.

클래스 패턴과 객체 패턴 은 패턴을 적용하는 범위를 나타낸다. 클래스 패턴은 상속으로 클래스 간 관계를 정하며 컴파일 타임에 정적으로 결정된다. 객체 패턴은 객체 간 관계를 다루며 런타임에 바뀔 수 있다.

디자인 패턴과 아키텍처 패턴은 설계 범위가 다르다. 아키텍처 패턴은 전체 시스템의 구조를 정하는 상위 수준 참조 모델이고, 디자인 패턴은 서브시스템 안 컴포넌트 사이의 관계를 설계하는 참조 모델이다.

3. 등장 배경과 필요성

소프트웨어가 커지면서 같은 구조 문제가 여러 프로젝트에서 반복되었다. 개발자마다 다른 방식으로 해결하면 유지보수가 어렵고 설계 의도를 전달하기 힘들다. 디자인 패턴은 이 공통 해법에 이름을 붙여 설계 언어로 쓰게 했다.

GoF의 저서는 객체지향 설계에서 재사용 가능한 해법을 체계적으로 정리한 자료로 평가된다. 이 책이 제시한 23개 패턴은 이후 객체지향 설계 교육과 실무의 기본 어휘가 되었다.

패턴의 가치는 설계 재사용에 있다. 같은 문제를 같은 방식으로 풀면 구현, 변경, 테스트, 재사용이 쉬워진다. 또한 패턴은 한 번 정해진 모양이 요구사항 변화에 따라 다른 패턴으로 바뀌는 성질이 있어, 설계 결정 과정을 추적하는 기준으로도 쓰인다.

GoF 분류의 두 축은 목적과 범위다. 목적은 생성, 구조, 행동의 세 갈래이고, 범위는 클래스냐 객체냐의 구분이다. 이 두 축을 함께 쓰면 23개 패턴의 위치를 한 표로 정리할 수 있다.

생성·구조·행동으로 분류된다 — 총 23개

{"type":"block","title":"GoF 패턴 분류 구조","tip":"3열 표 모양으로 목적과 범위를 그린다","nodes":[{"id":"a","label":"GoF 23개 패턴","sub":"디자인 패턴 카탈로그"},{"id":"b","label":"목적 분류","sub":"생성·구조·행동"},{"id":"c","label":"범위 분류","sub":"클래스·객체"}],"edges":[{"from":"a","to":"b","label":"1차","arrow":true},{"from":"a","to":"c","label":"2차","arrow":true}]}

4. 구성요소·원리·절차

디자인 패턴은 목적과 범위에 따라 분류되며, 각 패턴은 의도(Intent), 참여자(Participant), 협력(Collaboration) 으로 기술된다. 구조를 이해하는 가장 빠른 방법은 역할 표를 외우는 것이다.

디자인 패턴은 목적(생성·구조·행동)과 범위(클래스·객체)의 두 축으로 분류된다.

구분생성 패턴구조 패턴행동 패턴
목적객체 생성 과정 관여클래스·객체 합성상호작용과 책임 분산
클래스 범위팩토리 메소드적응자(클래스)해석자, 템플릿 메소드
객체 범위추상 팩토리 등적응자(객체) 등책임 연쇄 등

위 표는 GoF 23개 패턴을 생성 5개, 구조 7개, 행동 11개로 나눈 구도다. 클래스 패턴은 상속을 이용해 컴파일 타임에 정적으로 결정되고, 객체 패턴은 합성을 이용해 런타임에 동적으로 바뀐다. 두 범위의 차이가 학습의 핵심이다.

인터프리터 패턴의 구성요소는 다음과 같다. Context는 해석할 문장을 저장하고 토큰화한다. Abstract Expression은 해석 인터페이스다. Terminal Expression은 문장의 종결 기호를, Non-Terminal Expression은 연산자나 하위 문장을 해석한다. Client는 구문 트리를 구성해 해석을 시작한다.

인터프리터 패턴의 절차는 다음과 같다.

  • Client가 Context에 입력 문자열을 넘긴다.
  • Context가 공백 단위로 토큰화해 보관한다.
  • Client가 Non-Terminal Expression으로 구문 트리를 구성한다.
  • 루트 노드의 interpret() 를 호출한다.
  • 각 노드는 자식 노드의 interpret() 결과를 받아 자신의 연산을 수행하고 값을 반환한다.

후위 표기 1 1 + 의 해석 흐름은 아래 도식과 같다. 흐름의 결론은 재귀 호출로 하위 노드를 먼저 평가하는 것이다. 이 구조는 컴포지트 패턴과 같은 트리 형태다.

인터프리터 패턴 해석 절차

화이트박스·블랙박스 재사용과 위임은 패턴 설계의 전제다. 상속은 부모 구현이 공개되므로 화이트박스 재사용이고, 합성은 인터페이스만 노출하므로 블랙박스 재사용이다. 위임은 합성을 상속만큼 강력하게 만드는 기법이다. 설계 원칙으로는 상속보다 합성을 우선한다.

5. 관련 법령·기준·표준

디자인 패턴은 법령이나 고시의 대상이 아니다. 따라서 조항 번호는 없다. 기준이 되는 것은 GoF 카탈로그의 분류 체계다. 정보관리기술사 답안에서는 아래 값을 외운다.

구분기준값근거
패턴 수GoF 카탈로그23개GoF 원저
목적별 분류생성·구조·행동생성·구조·행동으로 분류GoF 원저
최초 제시Design Patterns 출간GoF 원저GoF 원저
상속 재사용화이트박스 재사용부모 구현 공개GoF 원저
합성 재사용블랙박스 재사용인터페이스만 공개GoF 원저
분류 범위클래스·객체클래스는 정적, 객체는 동적GoF 원저

위 기준은 GoF 원서 기준이다. 개정된 기준서는 없으므로 개정 연혁은 쓰지 않는다. 관련 표준으로는 ISO/IEC 25010 등 품질 모델이 있으나 패턴 분류와 직접 연결되지 않으므로 본 절에서는 다루지 않는다.

한국어 위키백과와 한국 교육 자료도 GoF 분류를 같은 방식으로 설명한다. 다만 자료마다 디자인 패턴 개수를 23개로 쓰는 점은 동일하다.

6. 유형과 비교

디자인 패턴은 목적(Purpose)과 범위(Scope)라는 두 축으로 나뉜다. 목적은 생성(Creational), 구조(Structural), 행동(Behavioral) 세 갈래이고, 범위는 클래스(Class)와 객체(Object)로 나뉜다. 두 축을 교차하면 같은 목적 안에서도 적용 대상과 결정 시점이 달라진다.

구분클래스 패턴객체 패턴
관계 대상클래스와 서브클래스객체 간 연관
결정 시점컴파일 타임(정적)런타임(동적)
주요 수단상속합성·위임
대표 예팩토리 메소드, 템플릿 메소드추상 팩토리, 전략

위 표는 범위 축의 차이를 보여준다. 클래스 패턴은 상속으로 구조가 고정되므로 변경이 어렵다. 객체 패턴은 참조를 바꿔 끼우므로 실행 중에도 행동을 바꿀 수 있다.

이어지는 내용

로그인하면 하루 2페이지까지 무료로 전체를 읽을 수 있습니다.

앱에서 이 단원 읽기