자격증/정보처리기사

정보처리기사 디자인 패턴 외우는 법

work01 2025. 2. 19. 13:09

🔥 디자인 패턴 (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 = "택배 기사 방문"


🔥 최종 정리

생성 패턴 → 공장에서 제품을 생산하는 방법
구조 패턴 → 건물 설계 (객체와 객체 연결)
행위 패턴 → 역할 분배 (객체 간 협력)

💡 **"이 패턴이 어떤 문제를 해결하는가?"**를 생각하면 외우기 쉬움!
💡 "비유와 사례를 떠올리면서 암기하면 확실하게 기억됨!"

반응형