IT Knowledge/Architecture/images/디자인-패턴-diagram.svg
📐 “요리 레시피처럼, 프로그래밍에도 ‘이럴 땐 이렇게!’ 검증된 방법이 있어요.”
디자인 패턴이 뭐예요?
쉬운 비유: 요리 레시피
계란프라이 만들기:
- 팬 달구기
- 기름 두르기
- 계란 깨서 넣기
- 익으면 완성!
레시피 없이 하면? → 기름 없이 해서 눌어붙고, 팬 안 달궈서 질척함 😭
레시피대로 하면? → 누가 해도 성공! ✨
디자인 패턴 = 프로그래밍 레시피!
왜 필요해요?
| 없을 때 | 있을 때 |
|---|---|
| 매번 처음부터 고민 | ”아, 이건 싱글톤으로!” |
| 실수하기 쉬움 | 검증된 방법 사용 |
| 시간 오래 걸림 | 빠르게 해결 |
패턴의 3가지 종류
| 종류 | 하는 일 | 비유 |
|---|---|---|
| 생성 패턴 | 물건 만들기 | 공장 |
| 구조 패턴 | 연결하기 | 레고 조립 |
| 행위 패턴 | 소통하기 | 대화 |
생성 패턴: 물건 만들기
싱글톤 (Singleton)
“하나만 있어야 해!”
| 비유 | 프로그래밍 |
|---|---|
| 나라에 대통령은 한 명! | 설정 관리자는 하나! |
| 두 명이면 혼란 | 두 개면 충돌 |
언제 써요?
- 설정 관리
- DB 연결
- 로그 기록
팩토리 (Factory)
“공장에서 찍어내기”
| 비유 | 프로그래밍 |
|---|---|
| ”세단 주세요” → 세단 나옴 | ”PDF 주세요” → PDF 만들기 |
| ”SUV 주세요” → SUV 나옴 | ”엑셀 주세요” → 엑셀 만들기 |
언제 써요?
- 종류별로 객체 만들 때
- 어떤 종류인지 나중에 결정할 때
구조 패턴: 연결하기
어댑터 (Adapter)
“변환 플러그”
| 비유 | 프로그래밍 |
|---|---|
| 한국 플러그 → 어댑터 → 유럽 콘센트 | 옛날 코드 → 어댑터 → 새 코드 |
언제 써요?
- 호환 안 되는 것 연결할 때
- 옛날 코드 재활용할 때
데코레이터 (Decorator)
“토핑 추가”
| 비유 | 프로그래밍 |
|---|---|
| 아이스크림 + 초코 + 견과류 | 기본 기능 + 로그 + 보안 |
언제 써요?
- 기능을 점점 추가할 때
- 기본은 그대로, 옵션만 붙일 때
행위 패턴: 소통하기
옵저버 (Observer)
“구독/알림”
| 비유 | 프로그래밍 |
|---|---|
| 유튜버가 영상 올림 | 데이터가 바뀜 |
| 구독자들에게 알림! | 관련된 화면들 업데이트! |
언제 써요?
- 변화를 여러 곳에 알릴 때
- 뉴스레터, 알림 기능
전략 (Strategy)
“방법 바꾸기”
| 비유 | 프로그래밍 |
|---|---|
| 네비게이션: 자동차/도보/대중교통 | 결제: 카드/페이/계좌이체 |
| 같은 목적지, 다른 방법 | 같은 결과, 다른 방법 |
언제 써요?
- 방법이 여러 개일 때
- 나중에 방법을 바꿀 수 있을 때
언제 어떤 패턴?
| 상황 | 추천 패턴 |
|---|---|
| 객체 하나만 있어야 함 | 싱글톤 |
| 종류별로 객체 만들기 | 팩토리 |
| 호환 안 되는 것 연결 | 어댑터 |
| 기능 추가하기 | 데코레이터 |
| 변화 알려주기 | 옵저버 |
| 방법 바꾸기 | 전략 |
주의사항
| 하지 마세요 | 이렇게 하세요 |
|---|---|
| 모든 패턴 암기 | 필요할 때 찾아보기 |
| 간단한 문제에 복잡한 패턴 | 상황에 맞게 선택 |
| ”이게 정답!" | "이 상황에 맞을 것 같아” |
핵심 정리
- 디자인 패턴 = 프로그래밍 레시피
- 3가지 종류 = 생성, 구조, 행위
- 사용법 = 암기 ❌, 이해하고 필요할 때 적용 ✅
더 알아보기
더 많은 패턴들:
- 빌더: 복잡한 객체 단계별 만들기
- 프록시: 대리인 세우기
- 커맨드: 명령을 객체로
- 상태: 상태에 따라 다르게
참고: Refactoring Guru - 그림으로 보는 패턴