디자인 패턴, 왜 공부해야 할까?
디자인 패턴은 소프트웨어 설계 시 발생하는 공통적인 문제들에 대한 '선배 개발자들의 모범 답안'입니다. 정보처리기사 실기 시험에서는 용어의 정의를 묻는 문제가 자주 출제되는데, 단순히 암기하는 것을 넘어 각 패턴이 어떤 문제를 해결하려고 하는가에 집중하면 훨씬 기억에 오래 남습니다.
효율적인 학습을 위해 GoF(Gang of Four)의 분류법에 따라 생성, 구조, 행위 세 가지 그룹으로 나누어 정리해 보겠습니다.
🏗️ 1. 생성 패턴 (Creational Patterns)
객체의 생성과 관련된 패턴으로, 객체의 생성 방식을 캡슐화하여 시스템의 유연성을 높입니다.
| 패턴명 | 핵심 정의 (암기 키워드) |
|---|---|
| 추상 팩토리 | 인터페이스를 통해 연관된 객체들의 그룹을 추상적으로 표현하고 생성 |
| 빌더 | 작게 분리된 인스턴스를 건축하듯이 조합하여 객체를 생성 |
| 팩토리 메소드 | 객체 생성을 서브 클래스에서 처리하도록 분리하여 캡슐화 |
| 프로토타입 | 원본 객체를 복제하는 방법으로 객체를 생성 |
| 싱글톤 | 한 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시 참조는 불가능 |
🌉 2. 구조 패턴 (Structural Patterns)
클래스나 객체를 조합하여 더 큰 구조를 만드는 패턴입니다.
| 패턴명 | 핵심 정의 (암기 키워드) |
|---|---|
| 어댑터 | 호환성이 없는 클래스들의 인터페이스를 다른 클래스가 이용할 수 있게 변환 |
| 브리지 | 구현부에서 추상층을 분리하여 서로 독립적으로 확장할 수 있도록 구성 |
| 컴포지트 | 여러 객체를 가진 복합 객체와 단일 객체를 구분 없이 다루고자 할 때 사용 |
| 데코레이터 | 객체 간의 결합을 통해 능동적으로 기능들을 확장할 수 있는 패턴 |
| 퍼사드 | 상위에 인터페이스를 구성하여 서브 클래스들의 기능을 간편하게 사용 |
| 플라이웨이트 | 인스턴스를 가능한 한 공유하여 사용함으로써 메모리를 절약 |
| 프록시 | 클래스나 객체들을 조합하는 대리자(Proxy) 역할로 복잡한 시스템 개발 용이 |
🔄 3. 행위 패턴 (Behavioral Patterns)
객체나 클래스 사이의 알고리즘이나 책임 분배에 관련된 패턴입니다.
| 패턴명 | 핵심 정의 (암기 키워드) |
|---|---|
| 책임 연쇄 | 한 객체가 처리하지 못하면 다음 객체로 요청을 넘기는 형태의 패턴 |
| 커맨드 | 요청을 객체 형태로 캡슐화하여 재이용하거나 로그를 남길 수 있게 저장 |
| 인터프리터 | 언어에 문법 표현을 정의하는 패턴 |
| 반복자 | 접근이 잦은 객체에 대해 동일한 인터페이스를 사용하도록 하는 패턴 |
| 중재자 | 객체들 간의 복잡한 상호작용을 캡슐화하여 객체로 정의 |
| 메멘토 | 특정 시점의 객체 내부 상태를 객체화하여 상태를 돌리는 기능 제공 |
| 옵서버 | 객체의 상태 변화를 상속되어 있는 다른 객체들에게 전달하는 패턴 |
| 상태 | 객체의 상태에 따라 동일한 동작을 다르게 처리해야 할 때 사용 |
| 전략 | 동일 계열의 알고리즘들을 캡슐화하여 상호 교환할 수 있게 정의 |
| 템플릿 메소드 | 상위 클래스에서 골격을 정의하고 하위 클래스에서 세부 처리를 구체화 |
| 방문자 | 데이터 구조에서 처리 기능을 분리하여 별도의 클래스로 구성 |
💡 합격을 위한 마지막 팁!
정보처리기사 실기 시험에서는 단답형으로 나오기 때문에 정확한 용어 스펠링(영문/국문)을 익히는 것이 중요합니다. 특히 대리자 = 프록시, 복제 = 프로토타입, 건축 = 빌더와 같이 각 패턴의 핵심 설명을 대표하는 단어들을 매칭하는 것이 합격의 지름길입니다. 이 포스팅이 여러분의 합격에 큰 보탬이 되길 바랍니다!