컴퓨터/컴퓨터 관련 지식

디자인패턴 - 디자인패턴(Design Pattern)에 대하여 알아보자

달서비 2025. 5. 6. 19:03

프로그래밍 - pixabay

정보처리기사를 공부할 때 디자인패턴이라는 개념을 접하게 되었습니다. 소프트웨어를 만들 때 여러 개발자가 협업하고 코드를 효율적으로 관리하기 위한 하나의 방법입니다. 

디자인 패턴이 왜 중요하고 GoF(Gang of Four)의 23가지 디자인 패턴을 간단한 설명과 함께 알아보려고 합니다.

 

왜 디자인패턴이 필요할까?

여러 사람이 함께 하나의 소프트웨어를 개발할 때 큰 어려움 중 하나는 다른 사람의 코드를 이해하는 것입니다. 다른 사람이 작성한 코드를 파악하고 수정하거나 기능을 추가하는 과정은 자칫하면 예상치 못한 버그를 발생시키거나 성능을 저하할 수도 있습니다. 디자인 패턴은 소프트웨어 설계 문제에 대한 검증된 해결 방법 모음이자 개발자 간의 효율적인 의사소통 방법입니다. 특정 패턴을 적용했다는 것만으로도 코드의 구조와 의도를 쉽게 파악할 수 있게 해줍니다.

 

 

GoF 디자인 패턴 23가지

디자인 패턴 분야에서 핵심적인 내용은 Design Patterns: Elements of Reusable Object-Oriented Software에서 소개된 23가지 패턴입니다. 이 패턴은 크게 세 가지로 나누어집니다.

  1. 생성 패턴 : 객체 생성 방식을 다룹니다. 객체를 생성하는 과정을 추상화하여 시스템이 특정 클래스에 직접적으로 의존하지 않도록 유연성을 제공합니다. (5가지)
  2. 구조 패턴 : 클래스나 객체를 조합하여 더 큰 구조를 만듭니다. 여러 객체나 클래스 사이의 관계를 어떻게 구성할지에 대한 문제를 다룹니다. (7가지)
  3. 행위 패턴 : 객체간의 알고리즘이나 상호작용 방식을 다룹니다. 객체들이 서로 어떻게 상호작용 하는지에 대한 방법을 다룹니다. (11가지)

 

1. 생성 패턴 (Creational Patterns)

객체 생성하는 방식에 대한 패턴들입니다.

패턴 이름 설명 예시
Singleton 오직 하나의 인스턴스만 존재하도록 보장 게임 설정창은 한 개밖에 없도록 합니다. 
(전역에서 하나의 인스턴스만 유지)
Factory Method 객체 생성을 서브클래스에 위임 스타크래프트에서 배럭에는 마린, 파이어벳, 메딕, 고스트만 나옵니다. 
(어떤 유닛이 생성될지는 건물(서브클래스)이 결정)
Abstract Factory 관련된 객체들을 하나의 팩토리에서 생성 게임 시작 시 테란을 선택하면 테란의 테크트리 전체(건물, 유닛 등)가 고정됩니다. (마인드 컨트롤 제외)
(관련된 객체 세트를 일괄 생성)
Builder 복잡한 객체 생성을 단계별로 분리 햄버거를 만들 때 번 + 패티 + 치즈 + 소스 등 부품을 조립해서 완성합니다.
(객체를 단계별로 구성)
Prototype 객체를 복제(clone)하여 생성 캐릭터 커스터마이징 후 프리셋으로 저장하고, 나중에 복제해서 새 캐릭터로 생성합니다. 
(기존 객체 복사로 새 객체 생성)

 

2. 구조 패턴 (Structural Patterns)

클래스와 객체를 조합하여 더 큰 구조를 만드는 데 도움을 줍니다.

패턴 이름 설명 예시
Adapter 호환되지 않는 인터페이스를 맞춤 닌텐도 스위치2에서 스위치1 하위 버전의 게임을 지원합니다. 
(호환되지 않는 인터페이스 연결)
Bridge 구현과 추상화를 분리 스킬 + 무기 조합
(기능과 구현을 분리해서 독립적으로 확장)
Composite 트리 구조로 구성된 객체를 동일하게 다룸 캡처를 위해 UI 버튼, 미니맵, 체력바를 'UI 그룹'으로 묶고 한 번에 활성화/비활성화할 수 있습니다. 
(객체를 동일하게 다룸)
Decorator 객체에 기능을 동적으로 추가 인챈트를 하여 아이템에 속성을 부여합니다. 
(기존 객체에 기능을 덧붙임)
Facade 복잡한 시스템을 단순화하는 인터페이스 제공 자동 전투 버튼 
(복잡한 시스템을 간단한 인터페이스로 제공)
Flyweight 동일한 객체를 공유하여 메모리 절약 슈퍼마리오 게임이 40kb인 이유 중 하나는 타일을 공유해서 넣습니다. 
(메모리를 절약하며 반복 객체 관리)
Proxy 객체 접근 제어 (대리인 역할) 유료 아이템 미리보기에서는 실제 아이템이 아닌 미리보기 전용 화면을 보여줍니다. 
(객체에 대한 접근 제어 또는 대리 역할 수행)

 

3. 행위 패턴 (Behavioral Patterns)

객체 간의 상호작용, 알고리즘을 다루는 패턴들입니다.

패턴 이름 설명 예시
Observer 상태 변화 시 자동으로 알림 전파 레이드 보스 등장 시 공지창을 통해 모두에게 알립니다. 
(상태 변화 알림 전파)
Strategy 알고리즘을 객체로 캡슐화하여 
교체 능하게 함
전투 시 원거리에서는 활, 가까운 거리에서는 검을 이용하여 공격합니다. 
(상황에 따라 알고리즘을 교체)
Command  요청을 객체로 캡슐화 메이플스토리 스킬 매크로를 선입력하여 여러 스킬을 한 번의 버튼으로 부를 수 있습니다.
(명령을 객체로 저장 및 실행)
Iterator 컬렉션을 순차적으로 접근 퀘스트 의뢰를 받은 순서대로 화면에 나옵니다. 
(컬렉션을 순차적으로 접근)
Mediator 객체 간 상호작용을 중재자에게 위임 채팅창에 욕설이 있는 경우 *로 가공되어 보내집니다. 
(객체 간 직접 통신 대신 중재자 사용)
Memento  객체 상태를 저장하고 복원 세이브 로드 기능
(객체의 상태를 저장하고 복원)
State 상태에 따라 객체의 행동 변경 동물철권에서 캐릭터 변신 전후 공격 패턴이 달라집니다. 
(상태에 따라 행동 변경)
Template Method 알고리즘의 구조를 정의하고 일부 단계를 
서브클래스에 위임
인스턴트 던전의 경우 보스는 같으나 맵 구조는 랜덤으로 나옵니다. 
(알고리즘의 틀 고정, 일부만 구현)
Chain of Responsibility 요청을 처리할 객체를 연결된 체인으로 구성 길드 가입 신청을 부길마가 먼저 확인하고, 처리가 어려우면 길드장에게 넘깁니다. 
(책임에 따라 요청 처리)
Interpreter 문법 표현을 위한 구조 정의 마인크래프트에서 레드스톤을 이용한 회로를 통해 다양한 기능을 구성할 수 있습니다. 
(언어/명령어 해석기처럼 구조 정의)
Visitor  객체 구조를 변경하지 않고 기능 추가 캐릭터의 모든 행위에 로그를 남깁니다. 
(구조 변경 없이 새로운 연산(기능) 추가)

 

마지막으로

잘 알려진 디자인 패턴을 사용하면 협업 과정에서 코드의 의도와 구조를 빠르게 파악할 수 있어, 유지보수성이 크게 향상됩니다.