정보처리기사 디자인 패턴 외우는 법
🔥 디자인 패턴 (Design Pattern) 개요
디자인 패턴(Design Pattern)은 소프트웨어 설계에서 자주 등장하는 문제를 해결하기 위한 표준화된 설계 방법론입니다.
즉, 소프트웨어 개발에서 발생하는 공통적인 문제를 효율적으로 해결할 수 있도록 정리된 설계 방식이라고 볼 수 있습니다.
✅ 디자인 패턴을 사용하면?
✔ 코드 재사용성이 증가
✔ 유지보수가 용이
✔ 개발 속도가 빨라지고, 설계 품질이 향상
💡 디자인 패턴은 크게 3가지 유형으로 나뉩니다.
1️⃣ 생성 패턴 (Creational Patterns) → 객체 생성 관련
2️⃣ 구조 패턴 (Structural Patterns) → 클래스/객체 간 관계 정의
3️⃣ 행위 패턴 (Behavioral Patterns) → 객체 간 협력 및 역할 분배
🚀 1. 생성 패턴 (Creational Patterns)
객체 생성과 관련된 패턴으로, 객체를 효율적으로 생성하는 방법을 제공하는 패턴들입니다.
패턴설명예제
Factory Method | 객체 생성을 하위 클래스에서 담당 (객체 생성 책임 분리) | CarFactory.createCar() |
Abstract Factory | 관련된 객체들을 한 번에 생성할 수 있도록 하는 팩토리 | GUIFactory.createButton(), createTextBox() |
Singleton | 하나의 인스턴스만 생성되도록 제한 | Database.getInstance() |
Prototype | 기존 객체를 복제하여 새로운 객체 생성 | object.clone() |
Builder | 복잡한 객체 생성을 단계별로 수행 | StringBuilder.append() |
✅ 시험에서 출제 가능 포인트:
✔ "하나의 객체만 생성해야 하는 패턴?" → Singleton
✔ "객체 생성을 서브클래스에서 담당하는 패턴?" → Factory Method
✔ "복잡한 객체를 단계별로 생성하는 패턴?" → Builder
🛠️ 2. 구조 패턴 (Structural Patterns)
클래스나 객체 간의 관계를 설계하는 패턴으로, 객체 조합 방식, 클래스 상속을 최적화하는 패턴들입니다.
패턴설명예제
Adapter | 서로 다른 인터페이스를 변환하여 연결 | USB to Ethernet Adapter |
Bridge | 구현과 추상을 분리하여 독립적으로 확장 가능하게 함 | Shape(Color color) |
Composite | 객체들을 트리 구조로 구성하여 계층적으로 관리 | 파일 시스템(폴더/파일 구조) |
Decorator | 기존 객체에 새로운 기능을 추가하는 패턴 | BufferedReader(new FileReader()) |
Facade | 복잡한 서브시스템을 단순화하여 제공 | JDBC Connection |
Flyweight | 객체를 공유하여 메모리 사용을 줄이는 패턴 | 문자열 풀(String Pool) |
Proxy | 실제 객체 대신 대리 객체를 사용하여 접근을 제어 | 스마트 프록시(가상 프록시) |
✅ 시험에서 출제 가능 포인트:
✔ "서로 다른 인터페이스를 연결하는 패턴?" → Adapter
✔ "구현과 추상을 분리하는 패턴?" → Bridge
✔ "객체를 계층적으로 구성하여 관리하는 패턴?" → Composite
✔ "기존 객체에 동적으로 기능을 추가하는 패턴?" → Decorator
✔ "복잡한 서브시스템을 단순하게 제공하는 패턴?" → Facade
🤝 3. 행위 패턴 (Behavioral Patterns)
객체 간의 협력과 책임 분배를 다루는 패턴으로, 객체 간 상호작용 및 통신을 최적화하는 패턴들입니다.
패턴설명예제
Chain of Responsibility | 요청을 여러 객체가 처리하도록 연결 | 이벤트 핸들러 체인 |
Command | 요청을 객체로 캡슐화하여 실행 | Undo/Redo 기능 |
Interpreter | 언어의 문법을 정의하고 해석하는 패턴 | SQL 파서 |
Iterator | 컬렉션 요소를 순차적으로 접근하는 패턴 | Iterator pattern in Java |
Mediator | 객체 간 직접 통신을 막고, 중재자를 통해 통신 | 채팅방 시스템 |
Memento | 객체의 상태를 저장하고 복원 | Ctrl+Z(Undo 기능) |
Observer | 한 객체의 상태 변화가 다른 객체들에게 자동으로 전파 | 이벤트 리스너 |
State | 객체의 상태에 따라 다른 동작을 수행 | TCP 연결 상태 변화 |
Strategy | 알고리즘을 객체로 캡슐화하여 교체 가능하게 함 | 정렬 알고리즘 선택 |
Template Method | 알고리즘의 구조를 정의하고, 세부 구현은 하위 클래스에서 처리 | 프레임워크의 후킹 메서드 |
Visitor | 객체 구조를 변경하지 않고, 새로운 기능을 추가 | XML 파서 |
✅ 시험에서 출제 가능 포인트:
✔ "객체 간의 직접 통신을 막고 중재자가 조정하는 패턴?" → Mediator
✔ "객체의 상태가 변하면 자동으로 다른 객체에게 전파하는 패턴?" → Observer
✔ "알고리즘을 캡슐화하여 쉽게 변경할 수 있도록 하는 패턴?" → Strategy
✔ "요청을 객체로 캡슐화하여 실행하는 패턴?" → Command
✔ "객체의 상태를 저장하고 복원하는 패턴?" → Memento
🎯 디자인 패턴 시험 대비 정리
✅ 객체 생성이 중요한 패턴? → Factory, Singleton, Builder
✅ 클래스/객체 간 관계가 중요한 패턴? → Adapter, Bridge, Composite, Facade
✅ 객체 간 협력이 중요한 패턴? → Observer, Mediator, Command, Strategy
🔥 최종 정리
✔ 디자인 패턴은 3가지 카테고리 (생성, 구조, 행위 패턴)로 나뉨!
✔ 시험에서 가장 잘 나오는 패턴: Singleton, Factory, Observer, Strategy, Mediator, Command
✔ 패턴의 핵심 개념을 문제에서 묻는 경우가 많으므로, 각각의 역할을 정확히 이해해야 함!
💡 **"이 패턴이 어떤 문제를 해결하는가?"**를 항상 생각하면서 공부하면 더 쉽게 외울 수 있음!
🔥 디자인 패턴을 쉽게 외우는 법!
디자인 패턴이 어렵게 느껴지는 이유는 추상적인 개념을 외우려고 하기 때문입니다.
그래서 실제 사례나 비유를 사용해서 한 번에 이해할 수 있도록 정리해드리겠습니다!
🚀 1. 생성 패턴 (Creational Patterns)
👷 공장에서 물건을 찍어내는 방법을 다루는 패턴!
"객체를 어떻게 만들까?"
패턴쉽게 이해하는 비유예제
Factory Method | 햄버거 가게: 주문하면 "치즈버거", "불고기버거"를 자동으로 만들어줌 🍔 | BurgerFactory.createBurger("Cheese") |
Abstract Factory | 햄버거 세트 메뉴: 버거, 감자튀김, 음료를 한 번에 제공 🍟 | McDonaldsFactory.createSet("Big Mac") |
Singleton | 왕좌의 게임 - 철왕좌: 왕은 단 한 명만 있어야 함 👑 | Database.getInstance() |
Prototype | 클론 기술: 기존 사람(객체) 복제해서 새 사람 생성 🧬 | robot.clone() |
Builder | 레고 조립: 여러 부품을 하나씩 조립해서 완성 🏗️ | LegoBuilder.addBlock("Head").addBlock("Body").build() |
✅ 외우는 포인트:
✔ Factory = "햄버거 가게, 주문하면 알아서 만듦"
✔ Abstract Factory = "세트 메뉴처럼 묶어서 제공"
✔ Singleton = "왕좌의 게임, 왕은 하나!"
✔ Prototype = "클론 복제"
✔ Builder = "레고 조립"
🛠️ 2. 구조 패턴 (Structural Patterns)
🏗️ 건물 설계하는 패턴!
"객체와 객체를 어떻게 연결할까?"
패턴쉽게 이해하는 비유예제
Adapter | 220V 변압기: 한국(220V) vs 미국(110V) 전기 다름 → 변압기가 변환 ⚡ | USBtoEthernetAdapter |
Bridge | 리모컨 - TV: 삼성 TV, LG TV 어떤 제품이든 리모컨으로 조작 가능 📺 | TVRemote(SamsungTV) |
Composite | 폴더와 파일 시스템: 폴더 안에 폴더가 또 들어가는 구조 📂 | Folder.addFile(new File()) |
Decorator | 피자 토핑 추가: 기본 피자에 치즈, 올리브 등 추가 가능 🍕 | new Cheese(new PlainPizza()) |
Facade | 호텔 컨시어지 서비스: "방 예약 + 공항 픽업 + 음식 주문" 한 번에 처리 🏨 | HotelService.bookRoom() |
Flyweight | 게임 캐릭터 아바타: 같은 캐릭터는 메모리를 공유해서 절약 🎮 | CharacterFactory.getCharacter("Orc") |
Proxy | 대리운전 기사: 본인 대신 운전해주는 역할 🚗 | new DriverProxy().drive() |
✅ 외우는 포인트:
✔ Adapter = "220V 변압기"
✔ Bridge = "리모컨 - TV 연결"
✔ Composite = "폴더와 파일 구조"
✔ Decorator = "피자 토핑 추가"
✔ Facade = "호텔 컨시어지, 여러 서비스 한 번에 처리"
✔ Flyweight = "게임 캐릭터 아바타, 메모리 절약"
✔ Proxy = "대리운전 기사"
🤝 3. 행위 패턴 (Behavioral Patterns)
🎭 사람들 간의 역할을 조정하는 패턴!
"객체들이 어떻게 협력할까?"
패턴쉽게 이해하는 비유예제
Chain of Responsibility | 우체부 시스템: 편지를 담당자별로 전달 📬 | logger.handleRequest("ERROR") |
Command | 음식 주문: 웨이터가 주문을 받아서 주방에 전달 🍽️ | new OrderCommand(kitchen, "Pizza").execute() |
Interpreter | 구글 번역기: 문장을 해석해서 변환 🈳 | new SQLInterpreter().interpret("SELECT * FROM users") |
Iterator | 유튜브 다음 영상 자동 재생: 리스트를 하나씩 순회 ▶️ | playlist.getNextVideo() |
Mediator | 채팅방: 유저들끼리 직접 대화 X → 중간에서 채팅방이 조정 💬 | chatroom.sendMessage(user, "Hello!") |
Memento | Ctrl + Z (실행 취소): 이전 상태로 되돌리기 🔄 | game.saveState() |
Observer | 유튜브 구독 알림: 채널을 구독하면 영상이 올라올 때 알림이 감 🔔 | user.subscribe(channel) |
State | 신호등 시스템: 상태(빨강, 초록, 노랑)에 따라 다른 동작 🚦 | light.changeState("Red") |
Strategy | 택배 배송 선택: 빠른 배송, 일반 배송 등 선택 가능 📦 | shipping.setStrategy(new FastShipping()) |
Template Method | 라면 끓이기 레시피: 물 끓이기 → 스프 넣기 → 면 넣기 🍜 | new Ramen().cook() |
Visitor | 택배 기사 방문: 집집마다 택배를 배달하는 방식 📮 | new Postman().visit(House) |
✅ 외우는 포인트:
✔ Chain of Responsibility = "우체부 시스템, 단계별 전달"
✔ Command = "음식 주문, 웨이터가 주방에 전달"
✔ Interpreter = "구글 번역기, 언어 해석"
✔ Iterator = "유튜브 자동 재생"
✔ Mediator = "채팅방이 중재자 역할"
✔ Memento = "Ctrl + Z 실행 취소"
✔ Observer = "유튜브 구독 알림"
✔ State = "신호등 시스템, 상태 따라 동작 변경"
✔ Strategy = "택배 배송 선택, 알고리즘 교체"
✔ Template Method = "라면 끓이기 레시피"
✔ Visitor = "택배 기사 방문"
🔥 최종 정리
✔ 생성 패턴 → 공장에서 제품을 생산하는 방법
✔ 구조 패턴 → 건물 설계 (객체와 객체 연결)
✔ 행위 패턴 → 역할 분배 (객체 간 협력)
💡 **"이 패턴이 어떤 문제를 해결하는가?"**를 생각하면 외우기 쉬움!
💡 "비유와 사례를 떠올리면서 암기하면 확실하게 기억됨!"