λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
개발 팁/μ„œλΉ„μŠ€ & μ•„ν‚€ν…μ²˜

GoF λ””μžμΈ νŒ¨ν„΄

by 1mj 2022. 9. 16.

λ””μžμΈ νŒ¨ν„΄

과거의 μ†Œν”„νŠΈμ›¨μ–΄ 개발 κ³Όμ •μ—μ„œ μΆ•μ λœ λ…Έν•˜μš°μ— 이름을 λΆ™μ—¬ 이후에 μž¬μ‚¬μš©ν•˜κΈ° 쒋은 ν˜•νƒœλ‘œ νŠΉμ • κ·œμ•½μ„ λ§Œλ“€μ–΄ μ •λ¦¬ν•œ 것이닀.

각기 λ‹€λ₯Έ μ†Œν”„νŠΈμ›¨μ–΄ λͺ¨λ“ˆμ΄λ‚˜ κΈ°λŠ₯을 가진 μ‘μš© μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œλ“€μ„ κ°œλ°œν•  λ•Œ μ„œλ‘œ κ³΅ν†΅λ˜λŠ” 섀계 문제 및 해결책이 μžˆλ‹€. μ΄λŸ¬ν•œ μœ μ‚¬μ μ„ νŒ¨ν„΄μ΄λΌκ³  ν•œλ‹€. λ””μžμΈ νŒ¨ν„΄μ€ λͺ¨λ“ˆμ˜ μ„ΈλΆ„ν™”λœ μ—­ν• μ΄λ‚˜ λͺ¨λ“ˆ κ°„μ˜ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ 방식을 섀계할 λ•Œ μ°Έμ‘°ν•  수 μžˆλŠ” μ „ν˜•μ μΈ ν•΄κ²° 방식이닀.

 

GoF(Gang of Four) λ””μžμΈ νŒ¨ν„΄

1995λ…„ 23개 νŒ¨ν„΄μ„ μˆ˜λ‘ν•œ <<'GoF'(Gang of Fours). Design Patterns: Elements of Reusable Object-Oriented Software>> λ…Όλ¬Έμ—μ„œ λ””μžμΈ νŒ¨ν„΄μ„ κ΅¬μ²΄ν™”ν•˜μ˜€λ‹€. λͺ©μ μ— 따라 생성 νŒ¨ν„΄ 5개, ꡬ쑰 νŒ¨ν„΄ 7개, ν–‰μœ„ νŒ¨ν„΄ 11개둜 κ΅¬μ„±λœλ‹€.

 

λͺ©μ μ— 따라

  • 객체의 생성 과정에 κ΄€μ—¬ν•˜λŠ” 생성 νŒ¨ν„΄
  • 객체의 합성에 κ΄€μ—¬ν•˜λŠ” ꡬ쑰 νŒ¨ν„΄
  • 객체가 μƒν˜Έμž‘μš©ν•˜λŠ” λ°©λ²•μ΄λ‚˜ 관심사λ₯Ό λΆ„λ¦¬ν•˜λŠ” 방법에 κ΄€μ—¬ν•˜λŠ” 행동 νŒ¨ν„΄

λ²”μœ„μ— 따라

  • ν΄λž˜μŠ€μ™€ μ„œλΈŒ 클래슀 κ°„μ˜ 관련성을 닀루며 컴파일 νƒ€μž„μ— μ •μ μœΌλ‘œ κ²°μ •λ˜λŠ” ν΄λž˜μŠ€μ— μ μš©ν•˜λŠ” 경우
  • 객체 κ°„μ˜ 관련성을 닀루고 λŸ°νƒ€μž„μ— λ³€κ²½λ˜λŠ” 동적인 성격을 κ°€μ§€λŠ” 객체에 μ μš©ν•˜λŠ” 경우

 

생성 νŒ¨ν„΄ (Creational)

- 객체의 μΈμŠ€ν„΄μŠ€ 과정을 μΆ”μƒν™”ν•˜λŠ” 방법이닀.

- 객체의 생성과 μ°Έμ‘° 과정을 μΊ‘μŠν™”ν•˜μ—¬ 객체가 μƒμ„±λ˜κ±°λ‚˜ λ³€κ²½λ˜μ–΄λ„ ν”„λ‘œκ·Έλž¨ ꡬ쑰에 영ν–₯을 받지 μ•Šλ„λ‘ ν•œλ‹€. 

 

ꡬ쑰 νŒ¨ν„΄ (Structural)

- ν”„λ‘œκ·Έλž¨ λ‚΄μ˜ 자료ꡬ쑰 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€ ꡬ쑰 λ“± ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰λ₯Ό μ„€κ³„ν•˜λŠ”λ° ν™œμš©ν•˜λŠ” νŒ¨ν„΄λ“€μ΄λ‹€.

 

ν–‰μœ„ νŒ¨ν„΄ (Behavioral)

- 반볡적으둜 μ‚¬μš©λ˜λŠ” κ°μ²΄λ“€μ˜ μƒν˜Έμž‘μš©μ„ νŒ¨ν„΄ν™”ν•œ 것이닀.

- 결합도λ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 것에 쀑점을 λ‘”λ‹€.

 

생성 νŒ¨ν„΄ ꡬ쑰 νŒ¨ν„΄ ν–‰μœ„ νŒ¨ν„΄
좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄ (Abstract Factory)
λΉŒλ” νŒ¨ν„΄ (Builder)
νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄ (Factory Method)
ν”„λ‘œν† νƒ€μž… νŒ¨ν„΄ (Prototype)
μ‹±κΈ€ν„΄ νŒ¨ν„΄ (Singleton)
μ–΄λŒ‘ν„° νŒ¨ν„΄ (Adapter)
λΈŒλ¦¬μ§€ νŒ¨ν„΄ (Bridge)
μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄ (Composite)
λ°μ»€λ ˆμ΄ν„° νŒ¨ν„΄ (Decorator)
νΌμ‚¬λ“œ νŒ¨ν„΄ (Facade)
ν”ŒλΌμ΄μ›¨μ΄νŠΈ νŒ¨ν„΄ (Flyweight)
ν”„λ‘μ‹œ νŒ¨ν„΄ (Proxy)
μ±…μž„μ—°μ‡„ νŒ¨ν„΄ (Chain of Responsibility)
μ»€λ§¨λ“œ νŒ¨ν„΄ (Command)
인터프리터 νŒ¨ν„΄ (Interpreter)
미디에이터 νŒ¨ν„΄ (Mediator)
λ©”λ©˜ν†  νŒ¨ν„΄ (Memento)
μ˜΅μ €λ²„ νŒ¨ν„΄ (Observer)
ν…Œμ΄νŠΈ νŒ¨ν„΄ (State)
μŠ€νŠΈλ ˆν‹°μ§€ νŒ¨ν„΄ (Strategy)
ν…œν”Œλ¦Ώλ©”μ„œλ“œ νŒ¨ν„΄ (Template Method)
비지터 νŒ¨ν„΄ (Visitor)

 

좜처

https://4z7l.github.io/2020/12/25/design_pattern_GoF.html

https://coding-factory.tistory.com/708

'개발 팁 > μ„œλΉ„μŠ€ & μ•„ν‚€ν…μ²˜' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

생성 νŒ¨ν„΄  (0) 2022.10.28
ν΄λΌμš°λ“œ μ»΄ν“¨νŒ…κ³Ό IaaS/PaaS/SaaS  (0) 2022.05.01
DevOps  (0) 2022.03.23
ν•˜λ“œμ›¨μ–΄ 가상화 μ’…λ₯˜  (0) 2022.03.22
docker  (0) 2022.03.11

λŒ“κΈ€