πŸ§ͺ 컴퓨터과학 : CS

[λ””μžμΈνŒ¨ν„΄] λ””μžμΈ νŒ¨ν„΄(1) - λ””μžμΈ νŒ¨ν„΄μ€ 무엇인가?

개발자 HOON 2022. 12. 27. 00:39

 

🏝 1. λ””μžμΈ νŒ¨ν„΄(Design Pattern)μ΄λž€?

 

 

λ””μžμΈ νŒ¨ν„΄μ€ λ„λŒ€μ²΄ 무엇인가?


κ°œλ°œμ— λŒ€ν•΄ κΉŠμ€ 관심을 갖닀보면, λˆ„κ΅¬λ‚˜ ν•œ λ²ˆμ―€μ€ 'λ””μžμΈ νŒ¨ν„΄'μ΄λΌλŠ” 말을 듀어봀을 κ²ƒμž…λ‹ˆλ‹€.

λ„λŒ€μ²΄ λ””μžμΈ νŒ¨ν„΄μ΄λž€ 무엇이고, 이λ₯Ό ν•™μŠ΅ν•˜λ©΄ μ–΄λ–€ μž₯점이 μžˆμ„κΉŒμš”?

 

λ””μžμΈ νŒ¨ν„΄μ€ "자주 μ‚¬μš©ν•˜λŠ” 섀계 νŒ¨ν„΄μ„ μ •ν˜•ν™” ν•΄μ„œ 이λ₯Ό μœ ν˜•λ³„λ‘œ κ°€μž₯ 졜적의 λ°©λ²•μœΌλ‘œ κ°œλ°œμ„ ν•  수 μžˆλ„λ‘ μ •ν•΄λ‘” 섀계 μ•Œκ³ λ¦¬μ¦˜"κ³Ό λΉ„μŠ·ν•©λ‹ˆλ‹€.

μ•Œκ³ λ¦¬μ¦˜μ€ λͺ…ν™•ν•˜κ²Œ κ°€μž₯ λΉ λ₯΄κ³  효율적인 닡을 μ°ΎλŠ” 정닡이 μžˆλŠ” ν˜•νƒœμ΄μ§€λ§Œ, λ””μžμΈ νŒ¨ν„΄μ€ λͺ…ν™•ν•œ 정닡이 μžˆλŠ” ν˜•νƒœλŠ” μ•„λ‹ˆμ§€λ§Œ, ν”„λ‘œμ νŠΈμ˜ 상황에 맞좰 적용이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 섀계할 λ•ŒλŠ” 기쑴의 κ²½ν—˜μ΄ ꡉμž₯히 μ€‘μš”ν•˜μ§€λ§Œ, λ‰΄λΉ„λŠ” μ΄λŸ¬ν•œ κ²½ν—˜μ΄ μ—†μŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ κ²½ν—˜μ„ κ³΅μœ ν•˜κ³ μž λ‚˜μ˜¨ 것이 GoF λ””μžμΈ νŒ¨ν„΄μ΄λ©°, 총 23κ°€μ§€μ˜ νŒ¨ν„΄μ΄ μžˆμŠ΅λ‹ˆλ‹€.

 

객체 지ν–₯ 섀계 κ°œλ…μ— λ”°λ₯Έ 섀계 쀑에 μž¬μ‚¬μš©ν•  경우, μœ μš©ν•œ 섀계λ₯Ό λ””μžμΈ νŒ¨ν„΄μœΌλ‘œμ¨ μ •μ˜ν•΄λ‘” 것이 λ°”λ‘œ GoF λ””μžμΈ νŒ¨ν„΄μΈ 것이죠.

이λ₯Ό ν•™μŠ΅ν•¨μœΌλ‘œμ¨ κ²½ν—˜μ΄ λΆ€μ‘±ν•œ 뉴비 κ°œλ°œμžλΌλ„ 쒋은 μ†Œν”„νŠΈμ›¨μ–΄ 섀계가 κ°€λŠ₯μΌ€ ν•©λ‹ˆλ‹€.

 

λͺ¨λ“  λ””μžμΈ νŒ¨ν„΄μ„ μ•ŒκΈ°λŠ” μ–΄λ ΅μ§€λ§Œ, 이쀑에 많이 μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄ 및 μŠ€ν”„λ§μ—μ„œ 자주 μ‚¬μš©ν•˜λŠ” νŒ¨ν„΄μ„ μ΅νžŒλ‹€λ©΄ 도움이 λ˜μ§€ μ•Šμ„κΉŒ ν•˜λŠ” λ§ˆμŒμ— 정리λ₯Ό 해보렀 ν•©λ‹ˆλ‹€. 

 

<λ””μžμΈ νŒ¨ν„΄μ˜ μž₯점>
- 같이 ν˜‘μ—…ν•˜λŠ” κ°œλ°œμžκ°€ λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•œ λ‚΄μš©μ„ μˆ™μ§€ν•˜κ³  μžˆλ‹€λ©΄, κ°œλ°œμžκ°„μ˜ μ›ν™œν•œ μ†Œν†΅μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€.
- μ†Œν”„νŠΈμ›¨μ–΄ ꡬ쑰 νŒŒμ•…μ΄ 쉽고, μž¬μ‚¬μš©μ„ ν†΅ν•œ 개발 μ‹œκ°„μ„ 단좕할 수 μžˆμŠ΅λ‹ˆλ‹€.
- 섀계 λ³€κ²½ μš”μ²­μ— λŒ€ν•œ μœ μ—°ν•œ λŒ€μ²˜κ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
- μ—”ν„°ν”„λΌμ΄μ¦ˆ μ‹œμŠ€ν…œμ΄ ν™•μž₯될 λ•Œ μš©μ΄ν•˜κ³ , 개발 μ†Œμš” μ‹œκ°„ 및 μœ μ§€λ³΄μˆ˜ μ‹œκ°„ 단좕이 κ°€λŠ₯ν•©λ‹ˆλ‹€.

<λ””μžμΈ νŒ¨ν„΄μ˜ 단점>
- λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•΄ μˆ™μ§€ν•˜κΈ° μœ„ν•œ 초기 투자 λΉ„μš©μ˜ 뢀담이 λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€.
- 객체 지ν–₯ 섀계 및 κ΅¬ν˜„μ΄ ν•„μš”ν•˜λ―€λ‘œ, 객체 지ν–₯의 κ°œλ…μ— λŒ€ν•œ 이해가 λ°˜λ“œμ‹œ ν•„μš”ν•©λ‹ˆλ‹€.

 

 

 

🏝 2. λ””μžμΈ νŒ¨ν„΄(Design Pattern)의 μ’…λ₯˜

πŸͺ„ λ””μžμΈ νŒ¨ν„΄μ€ 크게 μ„Έ 가지 μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

> 2-1. 생성 νŒ¨ν„΄

객체λ₯Ό μƒμ„±ν•˜λŠ” 것과 κ΄€λ ¨λœ νŒ¨ν„΄μœΌλ‘œ, 객체의 생성과 변경이 전체 μ‹œμŠ€ν…œμ— λ―ΈμΉ˜λŠ” 영ν–₯을 μ΅œμ†Œν™” ν•˜κ³ , μ½”λ“œμ˜ μœ μ—°μ„±μ„ λ†’μ—¬μ€λ‹ˆλ‹€.

- νŒ©ν† λ¦¬ λ©”μ„œλ“œ
- μ‹±κΈ€ν„΄
- ν”„λ‘œν† νƒ€μž…
- λΉŒλ”
- 좔상 νŒ©ν† λ¦¬
- 체이닝 (GoF νŒ¨ν„΄μ€ μ•„λ‹˜, Lombok을 톡해 μ‚¬μš©)

 

 

> 2-2. ꡬ쑰 νŒ¨ν„΄

ν”„λ‘œκ·Έλž¨ λ‚΄μ˜ μžλ£Œκ΅¬μ‘°λ‚˜ μΈν„°νŽ˜μ΄μŠ€ ꡬ쑰 λ“± ν”„λ‘œκ·Έλž¨μ˜ ꡬ쑰λ₯Ό μ„€κ³„ν•˜λŠ” 데에 ν™œμš©λ  수 μžˆλŠ” νŒ¨ν„΄μ„ μ˜λ―Έν•©λ‹ˆλ‹€.

클래슀, κ°μ²΄λ“€μ˜ ꡬ성을 ν†΅ν•΄μ„œ 더 큰 ꡬ쑰λ₯Ό λ§Œλ“€ 수 있게 ν•©λ‹ˆλ‹€. 큰 규λͺ¨μ˜ μ‹œμŠ€ν…œμ—μ„œλŠ” λ§Žμ€ ν΄λž˜μŠ€λ“€μ΄ μ„œλ‘œ μ˜μ‘΄μ„±μ„ κ°€μ§€κ²Œ λ˜λŠ”λ°, 이런 λ³΅μž‘ν•œ ꡬ쑰λ₯Ό κ°œλ°œν•˜κΈ° μš©μ΄ν•˜κ²Œ λ§Œλ“€κ³  μœ μ§€λ³΄μˆ˜λ₯Ό λ”μš± 더 κ°„νŽΈν•˜κ²Œ λ§Œλ“€μ–΄ μ£ΌλŠ” 것이 λ°”λ‘œ 이 'ꡬ쑰 νŒ¨ν„΄'에 ν•΄λ‹Ήν•˜λŠ” κ²ƒλ“€μž…λ‹ˆλ‹€.

- μ–΄λŒ‘ν„° νŒ¨ν„΄
- μ»΄ν¬μ§€μ…˜ νŒ¨ν„΄
- λΈŒλ¦Ώμ§€ νŒ¨ν„΄
- λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄
- νΌμ‚¬λ“œ νŒ¨ν„΄
- ν”ŒλΌμ΄ μ›¨μ΄νŠΈ νŒ¨ν„΄
- ν”„λ‘μ‹œ νŒ¨ν„΄

 

 

> 2-3. ν–‰μœ„ νŒ¨ν„΄

반볡적으둜 μ‚¬μš©λ˜λŠ” κ°μ²΄λ“€μ˜ μƒν˜Έμž‘μš©μ„ νŒ¨ν„΄ν™” μ‹œν‚¨ κ²ƒμž…λ‹ˆλ‹€. ν΄λž˜μŠ€λ‚˜ 객체듀이 μƒν˜Έμž‘μš©ν•˜λŠ” 방법과 μ±…μž„μ„ λΆ„μ‚°ν•˜λŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. ν–‰μœ„ νŒ¨ν„΄μ€ ν–‰μœ„ κ΄€λ ¨ νŒ¨ν„΄μ„ μ‚¬μš©ν•΄μ„œ λ…λ¦½μ μœΌλ‘œ 일을 μ²˜λ¦¬ν•˜κ³ μž ν•  λ•Œ μ‚¬μš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

- ν…œν”Œλ¦Ώ λ©”μ„œλ“œ
- 인터프리터
- μ•„μ΄ν„°λ ˆμ΄ν„°
- μ˜΅μ €λ²„
- μ „λž΅
- 비지터
- μ±…μž„μ˜ 체인
- λͺ…λ Ή
- λ©”λ””ν…Œμ΄ν„°
- μƒνƒœ
- λ©”λ©˜ν†