Search
Duplicate

Design Pattern

생성일
2023/02/27 07:18
νƒœκ·Έ
λ””μžμΈνŒ¨ν„΄

Design Pattern

μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈ νŒ¨ν„΄(SW Design Pattern)은 μ†Œν”„νŠΈμ›¨μ–΄ κ³΅ν•™μ˜ μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈμ—μ„œ νŠΉμ • λ¬Έλ§₯μ—μ„œ κ³΅ν†΅μ μœΌλ‘œ λ°œμƒν•˜λŠ” λ¬Έμ œμ— λŒ€ν•œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 해결책이닀.
β€œλ°”ν€΄λ₯Ό λ‹€μ‹œ 발λͺ…ν•˜μ§€ 마라(Don’t reinvent the wheel)” 이 κ΄€μš©μ  μ–΄κ΅¬λŠ” 이미 발λͺ…λ˜μ—ˆκ³  운영적 결함이 μžˆλ‹€κ³  κ°„μ£Όλ˜μ§€ μ•ŠλŠ” κ²ƒμ˜ 재발λͺ… μ‹œλ„λŠ” λΆˆν•„μš”ν•˜λ‹€λŠ” μ˜λ―Έμ΄λ‹€. 이전에 λ‹€λ₯Έ μ‚¬λžŒλ“€μ— μ˜ν•΄ λ§Œλ“€μ–΄μ‘Œκ±°λ‚˜ μ΅œμ ν™”λœ 기초적인 방식을 λ³΅μ œν•˜λΌλŠ” 것이닀.
β€’
λ””μžμΈ νŒ¨ν„΄μ€ ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄λ‚˜ μ‹œμŠ€ν…œμ„ λ””μžμΈν•  λ•Œ μ‚¬μš©ν•˜λ©°, μ‹€μ œμ μœΌλ‘œ κ΅¬ν˜„λœ λ‚΄μš©μ΄ μ•„λ‹ˆλΌ 문제 해결을 μœ„ν•œ ν˜•μ‹ν™”λœ κ΄€ν–‰ 이자 ν…œν”Œλ¦Ώμ΄λ‹€.
β€’
기쑴에 잘 μ •λ¦¬λœ λ””μžμΈ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±, ν˜Έν™˜μ„±, μœ μ§€ λ³΄μˆ˜μ„±μ„ 보μž₯ν•  수 μžˆλ‹€.
β‡’ λ””μžμΈ νŒ¨ν„΄μ€ SOLD 원칙에 κΈ°λ°˜ν•œλ‹€

역사

건좕적 κ°œλ…μœΌλ‘œμ„œμ˜ νŒ¨ν„΄μ—μ„œ μ‹œμž‘ν•˜μ—¬ 1987λ…„λΆ€ν„° μ‹€ν—˜λ˜κ³  μ •λ¦¬λ˜μ–΄μ™”μœΌλ©°, 1994λ…„ GoF*의 Design Patterns: Elements of Reusable Object-Oriented Software 이 좜판되고 인기λ₯Ό λŒμ—ˆλ‹€.
β€’
Design Patterns μ±…μ˜ μ €μž Erich Gamma, Richard Helm, Ralph Johnson, John Vlissdesκ°€ GoF(Gang of Four, 사인방)둜 λΆˆλ¦°λ‹€.
λ””μžμΈ νŒ¨ν„΄μ€ μ»¨ν…μŠ€νŠΈ, 문제, 해결을 κΈ°μˆ ν•œλ‹€.

μ»¨ν…μŠ€νŠΈ (context)

β€’
λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 상황을 κΈ°μˆ ν•œλ‹€.
β€’
즉, νŒ¨ν„΄μ΄ 적용될 수 μžˆλŠ” 상황, μœ μš©ν•˜μ§€ μ•Šμ€ 상황 등을 λ‚˜νƒ€λ‚Έλ‹€.

문제 (problem)

β€’
νŒ¨ν„΄μœΌλ‘œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” μ—¬λŸ¬ λ””μžμΈ μ΄μŠˆλ“€μ„ κΈ°μˆ ν•œλ‹€.

ν•΄κ²° (solution)

β€’
문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•œ 섀계(μš”μ†Œ, μš”μ†Œκ°„μ˜ 관계, μ±…μž„, ν˜‘λ ₯ 관계 λ“±)λ₯Ό κΈ°μˆ ν•œλ‹€.
β€’
μ΄λ•Œ, 해결은 ꡬ체적인 κ΅¬ν˜„ λ°©λ²•μ΄λ‚˜ 언어에 μ˜μ‘΄μ μ΄μ§€ μ•ŠμœΌλ©°, λ‹€μ–‘ν•œ 상황에 μ μš©ν•  수 μžˆλŠ” μΌμ’…μ˜ ν…œν”Œλ¦Ώμ΄λ‹€.
GoF의 λ””μžμΈ νŒ¨ν„΄μ—μ„œλŠ” 객체지ν–₯적 λ””μžμΈ νŒ¨ν„΄μ„ 생성 νŒ¨ν„΄(Creational Pattern) , ꡬ쑰 νŒ¨ν„΄(Structural Pattern) , 행동 νŒ¨ν„΄ (Behavioral Pattern) 3κ°€μ§€λ‘œ κ΅¬λΆ„ν•œλ‹€.
생성 νŒ¨ν„΄
ꡬ쑰 νŒ¨ν„΄
행동 νŒ¨ν„΄
Singleton
Adapter
Chain-of-responsibility
Abstract Factory
Bridge
Command
Builder
Composite
Interpreter
Prototype
Decorator
Iterator
Facade
Mediator
Flyweight
Memento
Proxy
Observer
State
Strategy
Template Method
Visitor

생성 νŒ¨ν„΄ (Creational Pattern)

β€’
생성 νŒ¨ν„΄μ€ 객체의 생성 λ©”μ»€λ‹ˆμ¦˜μ„ 닀룬닀.
β€’
객체의 생성 및 쑰합이 ν”„λ‘œκ·Έλž¨μ— 영ν–₯을 λΌμΉ˜μ§€ μ•Šλ„λ‘ λΆ„λ¦¬ν•˜μ—¬ μœ μ—°μ„±μ„ 높이고,
β€’
μ½”λ“œμ˜ μœ μ§€/보수λ₯Ό μ‰½κ²Œν•˜κΈ° μœ„ν•œ λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.

ꡬ쑰 νŒ¨ν„΄ (Structural Pattern)

β€’
ꡬ쑰 νŒ¨ν„΄μ€ ν΄λž˜μŠ€λ‚˜ 객체 λ“±μ˜ μš”μ†Œλ“€μ˜ 관계λ₯Ό μš©μ΄ν•˜κ²Œ κ΅¬μ‘°ν™”ν•˜κΈ° μœ„ν•œ λ””μžμΈ νŒ¨ν„΄μ΄λ‹€.
β€’
μš”μ†Œλ“€μ„ μ‘°ν•©ν•˜μ—¬ 더 큰 ꡬ쑰λ₯Ό λ§Œλ“€ 수 있게 ν•œλ‹€.

행동 νŒ¨ν„΄ (Behavioral Pattern)

β€’
ν–‰μœ„ νŒ¨ν„΄μ€ ν΄λž˜μŠ€λ‚˜ κ°μ²΄λ“€μ˜ μƒν˜Έμž‘μš©μ„ μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜, μ±…μž„ λΆ„λ°° 등을 μ •μ˜ν•˜λŠ” νŒ¨ν„΄μ΄λ‹€.

ref)