Skip to content
난이도 출제 빈출문제은행 6

디자인 패턴: 생성·구조 ​

디자인 패턴(design pattern)은 설계에서 자주 부딪히는 문제와 그 해법을 이름 붙여 정리한 것이다. 이름이 있으면 "여기는 어댑터로 감싸자"처럼 한 단어로 설계 의도를 주고받을 수 있다. 가장 유명한 목록은 감마(Erich Gamma) 등 네 명, 이른바 GoF(Gang of Four, 4인방)가 1994년 책 『Design Patterns』에 정리한 23개다. 시험은 패턴 설명을 주고 이름을 쓰게 하거나 생성·구조·행위 중 어디에 속하는지 묻는다. 이 문서는 생성 5개와 구조 7개를, 행위 11개는 다음 문서에서 다룬다.

세 분류 ​

패턴 하나는 이름만 있는 게 아니라 어떤 문제와 배경에서 쓰는지, 실제 적용 사례, 재사용할 수 있는 예제 코드까지 묶어 설명한다. GoF는 패턴을 목적에 따라 셋으로 나눈다. 생성 패턴(creational pattern) 은 객체를 만드는 과정을 감춰 어떤 구체 클래스를 쓰는지 바깥이 몰라도 되게 한다. 구조 패턴(structural pattern) 은 클래스와 객체를 조합해 더 큰 구조를 만든다. 행위 패턴(behavioral pattern) 은 객체들이 책임을 나누고 서로 소통하는 방법을 다룬다. 개수는 5·7·11이다.

생성 패턴 5개 ​

패턴한 줄 의도시험 단서
추상 팩토리(abstract factory)관련된 객체 묶음을 구체 클래스 없이 생성제품군, 한 번에 교체
빌더(builder)복잡한 객체를 단계별로 조립생성 과정과 표현 분리
팩토리 메서드(factory method)생성할 클래스를 서브 클래스가 결정가상 생성자(서브 클래스가 만들 객체를 정한다는 별명)
프로토타입(prototype)원본 객체를 복제해 생성복제, 생성 비용이 클 때
싱글톤(singleton)인스턴스를 하나만 두고 어디서나 공유하나뿐, 메모리 낭비 방지

팩토리 메서드와 추상 팩토리가 가장 헷갈린다. 팩토리 메서드는 객체 하나를 만드는 메서드를 서브 클래스가 정의하게 하고, 추상 팩토리는 버튼·창·메뉴처럼 서로 어울리는 객체 여러 개를 한 공장이 통째로 만들게 한다.

싱글톤은 생성자를 막고 정적 메서드로만 인스턴스를 얻게 한다. 아래 코드에서 두 번 요청해도 생성자는 한 번만 실행된다(Java 21로 실행해 확인).

java
class Config {
    private static Config instance;
    static int created = 0;
    private Config() { created++; }
    static Config getInstance() {
        if (instance == null) instance = new Config();
        return instance;
    }
}
// Config.getInstance() == Config.getInstance() → true, created → 1

구조 패턴 7개 ​

패턴한 줄 의도시험 단서
어댑터(adapter)맞지 않는 인터페이스를 변환해 연결호환성, 변환기
브리지(bridge)추상층과 구현부를 분리해 따로 확장기능과 구현을 두 계층으로
컴포지트(composite)부분과 전체를 같은 방식으로 다룸트리 구조, 폴더 안의 폴더
데코레이터(decorator)객체를 덧씌워 기능을 동적으로 추가덧붙이기, 포장
퍼사드(facade)복잡한 하위 시스템에 단순한 창구 제공통합 인터페이스
플라이웨이트(flyweight)공유 가능한 부분을 나눠 써 메모리 절약공유, 대량의 유사 객체
프록시(proxy)대리 객체가 접근을 제어대리자, 지연 로딩

모양이 비슷한 쌍을 구분해 두면 점수가 된다. 어댑터는 이미 있는 것을 맞춰 끼우는 것이고, 브리지는 처음부터 두 계층으로 나눠 설계하는 것이다. 데코레이터와 프록시는 둘 다 같은 인터페이스로 감싸지만, 데코레이터는 기능을 더하고 프록시는 접근을 제어한다. 퍼사드는 여러 하위 객체 앞에 창구 하나를 두는 것이라 한 객체를 감싸는 둘과 다르다.

시험 포인트 ​

  • 분류 개수 생성 5 · 구조 7 · 행위 11, 합계 23.
  • 생성 5개: 추상 팩토리·빌더·팩토리 메서드·프로토타입·싱글톤.
  • 구조 7개: 어댑터·브리지·컴포지트·데코레이터·퍼사드·플라이웨이트·프록시.
  • "하위 클래스가 생성할 객체를 결정, 가상 생성자" → 팩토리 메서드. "원본 복제" → 프로토타입.
  • "호환되지 않는 인터페이스 변환" → 어댑터. "구현부와 추상층 분리" → 브리지.
  • "부가 기능을 덧붙여 동적 확장" → 데코레이터. "대리자" → 프록시.

관련 문서