15. GoF(Gang of Four) 디자인 패턴을 생성, 구조, 행동 패턴의 세 그룹으로 분류할 때, 구조 패턴이 아닌 것은?
① Adapter 패턴 ② Bridge 패턴
③ Builder 패턴 ④ Proxy 패턴
GoF(Gang of Four) 디자인 패턴: 구조 패턴과 틀린 선택지 분석
**디자인 패턴(Design Pattern)**은 소프트웨어 설계에서 자주 사용되는 해결 방법을 정리한 패턴입니다.
GoF(Gang of Four) 디자인 패턴은 에리히 감마(Erich Gamma) 등 4명의 연구자가 정리한 23가지 디자인 패턴으로, 소프트웨어 개발에서 널리 사용됩니다.
이번 글에서는 GoF 디자인 패턴의 분류를 설명하고, 문제에서 제시된 선택지 중 구조 패턴이 아닌 항목을 분석하겠습니다.
1. GoF(Gang of Four) 디자인 패턴의 3가지 그룹
GoF 디자인 패턴은 생성(Creational), 구조(Structural), 행동(Behavioral) 패턴의 3가지 그룹으로 분류됩니다.
✅ (1) 생성 패턴(Creational Pattern)
- 객체의 생성과 관련된 패턴으로, 객체 생성을 캡슐화하여 코드의 유연성을 높입니다.
- 대표적인 생성 패턴:
- Factory Method
- Abstract Factory
- Singleton
- Builder
- Prototype
✅ (2) 구조 패턴(Structural Pattern)
- 클래스나 객체의 구조를 조정하여 유연성을 높이는 패턴입니다.
- 대표적인 구조 패턴:
- Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
✅ (3) 행동 패턴(Behavioral Pattern)
- 객체 간의 상호작용 및 책임을 정의하는 패턴입니다.
- 대표적인 행동 패턴:
- Observer
- Strategy
- Command
- Iterator
- State
- Visitor
- Template Method
2. 문제에서 제시된 선택지 분석
패턴 분류 설명
① Adapter | ✅ 구조 패턴 | 인터페이스 변환을 통해 기존 코드와 호환성을 유지하는 패턴 |
② Bridge | ✅ 구조 패턴 | 구현과 추상화를 분리하여 독립적인 변경이 가능하도록 하는 패턴 |
③ Builder | ❌ 생성 패턴 | 객체 생성을 단계적으로 수행하는 패턴 (구조 패턴이 아님) |
④ Proxy | ✅ 구조 패턴 | 객체에 대한 접근을 제어하는 대리 객체를 사용하는 패턴 |
❌ 틀린 선택지: ③ Builder 패턴
- Builder 패턴은 객체 생성과 관련된 패턴으로, 생성 패턴(Creational Pattern)에 속합니다.
- 구조 패턴(Structural Pattern)은 클래스나 객체의 구조를 변경하는 것이 목적이지만, Builder 패턴은 객체 생성을 유연하게 하는 것이 목적입니다.
💡 Builder 패턴은 "객체 생성을 단계적으로 수행하는 패턴"이므로 구조 패턴이 아니라 생성 패턴입니다. 따라서 정답은 "③ Builder 패턴"입니다.
3. 각 패턴의 개념 및 예제
✅ (1) Adapter 패턴 (구조 패턴)
- 기존 클래스의 인터페이스를 변환하여 다른 클래스와 호환되도록 하는 패턴.
- 예제:
interface Target { void request(); } class Adaptee { void specificRequest() { System.out.println("Adaptee의 메소드 실행"); } } class Adapter implements Target { private Adaptee adaptee; public Adapter(Adaptee adaptee) { this.adaptee = adaptee; } @Override public void request() { adaptee.specificRequest(); } } public class Main { public static void main(String[] args) { Target adapter = new Adapter(new Adaptee()); adapter.request(); // "Adaptee의 메소드 실행" 출력 } }
✅ (2) Bridge 패턴 (구조 패턴)
- 구현과 추상화를 분리하여 독립적으로 확장할 수 있도록 하는 패턴.
- 예제:
interface Device { void turnOn(); void turnOff(); } class TV implements Device { public void turnOn() { System.out.println("TV On"); } public void turnOff() { System.out.println("TV Off"); } } class Remote { protected Device device; public Remote(Device device) { this.device = device; } public void power() { System.out.println("Remote power"); device.turnOn(); } } public class Main { public static void main(String[] args) { Remote remote = new Remote(new TV()); remote.power(); // "Remote power" -> "TV On" } }
✅ (3) Builder 패턴 (생성 패턴, ❌ 정답)
- 복잡한 객체 생성을 단계별로 수행하는 패턴.
- 예제:
class Car { private String engine; private int wheels; public Car(String engine, int wheels) { this.engine = engine; this.wheels = wheels; } } class CarBuilder { private String engine; private int wheels; public CarBuilder setEngine(String engine) { this.engine = engine; return this; } public CarBuilder setWheels(int wheels) { this.wheels = wheels; return this; } public Car build() { return new Car(engine, wheels); } } public class Main { public static void main(String[] args) { Car car = new CarBuilder().setEngine("V8").setWheels(4).build(); } }
- Builder 패턴은 "객체 생성"을 다루므로 구조 패턴이 아니라 생성 패턴(Creational Pattern)입니다.
✅ (4) Proxy 패턴 (구조 패턴)
- 원래 객체에 대한 접근을 제어하는 대리 객체(Proxy)를 제공하는 패턴.
- 예제:
interface Subject { void request(); } class RealSubject implements Subject { public void request() { System.out.println("RealSubject 요청 실행"); } } class Proxy implements Subject { private RealSubject realSubject; public Proxy() { this.realSubject = new RealSubject(); } public void request() { System.out.println("Proxy를 통해 접근"); realSubject.request(); } } public class Main { public static void main(String[] args) { Subject proxy = new Proxy(); proxy.request(); // "Proxy를 통해 접근" -> "RealSubject 요청 실행" } }
4. 정리
선택지 분류 설명
① Adapter | ✅ 구조 패턴 | 기존 인터페이스를 변환하여 호환성을 유지 |
② Bridge | ✅ 구조 패턴 | 구현과 추상화를 분리하여 확장성을 높임 |
③ Builder | ❌ 생성 패턴 | 객체 생성을 단계별로 수행하는 패턴 (구조 패턴 아님) |
④ Proxy | ✅ 구조 패턴 | 객체에 대한 접근을 제어하는 패턴 |
5. 결론
💡 GoF 디자인 패턴에서 "Builder 패턴"은 생성 패턴(Creational Pattern)에 속하며, 구조 패턴(Structural Pattern)이 아닙니다.
💡 문제에서 정답은 "③ Builder 패턴"입니다. 🚀
반응형