πŸ“Certificate/Engineer Information Processing

[μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬(μ‹€κΈ°)] λ””μžμΈ νŒ¨ν„΄ - [ν–‰μœ„ νŒ¨ν„΄]

Sun A 2024. 10. 1. 10:23

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

GoF(Gang of Four)이 처음 μ œμ•ˆν•˜μ—¬ κ΅¬μ²΄ν™”λœ 것

  • μ„œλΈŒμ‹œμŠ€ν…œμ— μ†ν•˜λŠ” μ»΄ν¬λ„ŒνŠΈλ“€κ³Ό κ·Έ 관계λ₯Ό μ„€κ³„ν•˜κΈ° μœ„ν•œ μ°Έμ‘° λͺ¨λΈ
  • 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° 섀계 μ‹œ 자주 λ°œμƒν•˜λŠ” λ¬Έμ œμ— λŒ€ν•œ 반볡적 ν•΄κ²° 방법
    • cf) μ•„ν‚€ν…μ²˜ νŒ¨ν„΄ : 전체 μ‹œμŠ€ν…œμ˜ ꡬ쑰λ₯Ό 섀계

 

ν–‰μœ„ νŒ¨ν„΄μ΄λž€?

객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ€‘μ‹¬μœΌλ‘œ μ„€κ³„λ˜λ©°, 객체듀 κ°„μ˜ μ—­ν• , μ±…μž„ 및 행동에 λŒ€ν•œ νŒ¨ν„΄μ„ μ œκ³΅ν•œλ‹€.

μ΄λŸ¬ν•œ νŒ¨ν„΄μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν–‰μœ„λ₯Ό κ΅¬μ‘°ν™”ν•˜κ³  κ΄€λ¦¬ν•˜λŠ” 데 도움이 λœλ‹€.

Chain of Responsibility
μ±…μž„ μ‚¬μŠ¬
- ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ— λŒ€ν•œ μ„Έμ„Έν•œ 처리λ₯Ό ν•˜λ‚˜μ˜ 객체가 λͺ½λ•… ν•˜λŠ” 것이 μ•„λ‹Œ, μ—¬λŸ¬ 개의 처리 κ°μ²΄λ“€λ‘œ λ‚˜λˆ„κ³ , 이듀을 μ‚¬μŠ¬μ²˜λŸΌ μ—°κ²°ν•΄ μ§‘ν•© μ•ˆμ—μ„œ μ—°μ‡„μ μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” 행동 νŒ¨ν„΄μ„ 의미

- 처리 κ°€λŠ₯ν•œ 객체가 λ‘˜ 이상 μ‘΄μž¬ν•˜μ—¬ ν•œ 객체 λ‚΄ 처리 λΆˆκ°€ μ‹œ λ‹€μŒ 객체둜 이관

- μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” 객체듀을 μ²΄μΈ ν˜•νƒœλ‘œ μ—°κ²°ν•˜μ—¬ μš”μ²­μ„ μˆœμ„œλŒ€λ‘œ 전달
- κ°μ²΄λŠ” μš”μ²­μ„ μ²˜λ¦¬ν•  수 μžˆλŠ” μ§€ νŒλ‹¨ν•˜κ³ , μ²˜λ¦¬ν•  수 μ—†μœΌλ©΄ λ‹€μŒ 객체둜 전달

- κ°œλ°œν•  λ•Œ, μ •μ μœΌλ‘œ κΈ°λŠ₯을 ν•˜λ“œ μ½”λ”©ν•˜λ©΄ κΈ°λŠ₯ 처리 μ—°κ²° μˆ˜μ •μ΄ λΆˆκ°€ν•¨

=> ν•œ μš”μ²­μ„ 2개 μ΄μƒμ˜ κ°μ²΄μ—μ„œ 처리 
2개 μ΄μƒμ˜ 객체
Command
μ»€λ§¨λ“œ
Command 뜻
: n. λͺ…λ Ή, v. λͺ…λ Ήν•˜λ‹€, v. μ§€μ‹œν•˜λ‹€

- μš”μ²­ λͺ…령어듀을 좔상/ꡬ체 클래슀둜 뢄리 ν›„ λ‹¨μˆœν™”/μΊ‘μŠν™” 

- μš”μ²­μ„ 객체둜 μΊ‘μŠν™”ν•˜μ—¬ μš”μ²­μžμ™€ 처리자λ₯Ό 뢄리
- λͺ…λ Ή, μš”μ²­μž, ν΄λΌμ΄μ–ΈνŠΈ, μˆ˜μ‹ μžλ‘œ ꡬ뢄

- μ‹€ν–‰κΈ°λŠ₯을 μΊ‘μŠν™” -> μ£Όμ–΄μ§„ μ—¬λŸ¬ κΈ°λŠ₯을 μ‹€ν–‰
- μž¬μ‚¬μš©μ„±μ΄ λ†’μŒ

- 좔상 ν΄λž˜μŠ€μ— λ©”μ„œλ“œλ₯Ό λ§Œλ“€μ–΄λ‘κ³  각 λͺ…령에 따라 μ„œλΈŒ 클래슀λ₯Ό μ„ νƒλ˜μ–΄ 싀행됨
μš”μ²­μž, 처리자
Interpreter
인터프리터
Interpreter 뜻
: n. 톡역사, n. 해석 ν”„λ‘œκ·Έλž¨

- 언어에 문법 ν‘œν˜„ μ •μ˜

- 문법 κ·œμΉ™μ„ 기반으둜 λ¬Έμž₯을 해석
- ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ˜ 문법을 해석

- 해석을 클래슀λ₯Ό μž‘μ„±ν–ˆκΈ° λ•Œλ¬Έμ— μ—¬λŸ¬ ν˜•νƒœμ˜ μ–Έμ–΄ ꡬ문을 해석
- 문법 자체λ₯Ό μΊ‘μŠν™”ν•˜μ—¬ μ‚¬μš©
μ–Έμ–΄ ꡬ문, 해석, μΊ‘μŠν™”
Iterator
μ΄ν„Έλ ˆμ΄ν„°
Iterator 뜻
: 반볡자

- 접근이 λΉˆλ²ˆν•œ 객체에 λŒ€ν•΄ 동일 μΈν„°νŽ˜μ΄μŠ€ μ‚¬μš©

- μš”μ†Œλ“€μ„ 순차적으둜 μ ‘κ·Όν•˜κ³  μ²˜λ¦¬ν•  수 있음

- λ‚΄λΆ€ ꡬ쑰λ₯Ό λ…ΈμΆœν•˜μ§€ μ•Šκ³  λ³΅μž‘ν•œ κ°μ²΄λ“€μ˜ μ›μ†Œλ“€μ„ 순차적으둜 μ ‘κ·Ό κ°€λŠ₯ν•˜κ²Œ ν•΄μ£ΌλŠ” ν–‰μœ„ νŒ¨ν„΄

- λͺ¨λ“  ν•­λͺ©μ— μ ‘κ·Όν•˜λŠ” 방법
반볡
Mediator
메디에이터
Mediator 뜻
: μ€‘μž¬μΈ, μ‘°μ •κ΄€

- 객체듀 κ°„ λ³΅μž‘ν•œ μƒν˜Έμž‘μš©μ„ μΊ‘μŠν™”ν•˜μ—¬ 객체둜 μ •μ˜ ν›„ μ€‘μž¬

- μ—¬λŸ¬ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ€‘μ•™μ§‘μ€‘μ μœΌλ‘œ 관리
- 객체 κ°„μ˜ ν†΅μ œμ™€ μ§€μ‹œμ˜ 역할을 ν•˜λŠ” μ€‘μž¬μžλ₯Ό 두어 객체지ν–₯의 λͺ©ν‘œλ₯Ό 달성

- 객체 μˆ˜κ°€ λ§Žμ•„ λ³΅μž‘ν•΄μ§„ μƒνƒœλ₯Ό κ°€μ •
- μ€‘μž¬μžκ°€ ν†΅μ‹ λΉˆλ„λ₯Ό μ€„μž„
- μƒν˜Έμž‘μš©μ˜ μœ μ—°ν•œ 변경을 지원
μ€‘μž¬μž, μ€‘κ°„μ—μ„œ ν†΅μ œ, μƒν˜Έμž‘μš©
Memento
κΈ°λ…ν’ˆ
Memento 뜻
: (μ‚¬λžŒ, μž₯μ†Œλ₯Ό κΈ°μ–΅ν•˜κΈ° μœ„ν•œ) κΈ°λ…ν’ˆ

- 객체듀 μ΄μ „μ˜ νŠΉμ • μ‹œμ μ˜ μƒνƒœλ‘œ μ €μž₯ν•˜κ³  볡원 (μΊ‘μŠν™” μœ μ§€)

- 객체의 이전 μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  볡원할 수 μžˆλ„λ‘ 함
- 클래슀 섀계 관점객체 정보λ₯Ό μ €μž₯ν•  ν•„μš”κ°€ μžˆμ„ λ•Œ 적용

- μž‘μ—…μ·¨μ†Œ(undo) κΈ°λŠ₯을 κ°œλ°œν•  λ•Œ ν•„μš”ν•œ νŒ¨ν„΄
μ €μž₯ν•˜κ³  볡원, 클래슀 관점, Undo
Observer
μ˜΅μ €λ²„
Observer 뜻
: λ³΄λŠ” μ‚¬λžŒ, λͺ©κ²©μž, κ΄€μ°°μž, κ΄€μΈ‘μž

- ν•œ 객체 μƒνƒœ λ³€ν™” μ‹œ μƒμ†λ˜μ–΄ μžˆλŠ” 객체듀에 λ³€ν™” 전달

- 객체의 μƒνƒœ λ³€ν™”λ₯Ό κ΄€μ°°ν•˜κ³  싢은 λ‹€λ₯Έ κ°μ²΄λ“€μ—κ²Œ μžλ™μœΌλ‘œ μ•Œλ¦Ό
- μΌλŒ€λ‹€μ˜ 객체 의쑴 관계λ₯Ό μ •μ˜
- ν•œ 객체의 μƒνƒœκ°€ λ³€ν™”λ˜μ—ˆμ„ λ•Œ, μ˜μ‘΄κ΄€κ³„μ— μžˆλŠ” λ‹€λ₯Έ κ°μ²΄λ“€μ—κ²Œ μžλ™μ μœΌλ‘œ λ³€ν™” 톡지

- ν•œ 객체의 μƒνƒœκ°€ λ°”λ€ŒλŠ” μ§€ μ—Όνƒν•˜λ‹€κ°€, λ°”λ€Œλ©΄ κ·Έ 객체에 μ˜μ‘΄ν•˜λŠ” κ°μ²΄λ“€μ—κ²Œ 연락
- μžλ™μœΌλ‘œ λ‚΄μš©μ΄ κ°±μ‹ λ˜λŠ” 방법
연락, κ°±μ‹ 
State
μŠ€ν…Œμ΄νŠΈ
State 뜻
: μƒνƒœ

- 객체의 μƒνƒœμ— 따라 λ™μΌν•œ λ™μž‘μœΌλ‘œ λ‹€λ₯΄κ²Œ 처리

- 객체 λ‚΄λΆ€ μƒνƒœμ— 따라 객체의 λ™μž‘μ„ λ³€κ²½
- 객체의 μƒνƒœλ₯Ό μΊ‘μŠν™”

- μΊ‘μŠν™”ν•œ μƒνƒœλ₯Ό μ°Έμ‘°ν•˜κ²Œ 함

- μƒνƒœμ— 따라 λ‹€λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆλ„λ‘ ν–‰μœ„ λ‚΄μš©μ„ λ³€κ²½
μƒνƒœ μΊ‘μŠν™”
Strategy
μŠ€νŠΈλ ˆμ΄νŠΈμ§€
Strategy 뜻
: κ³„νš, μ „λž΅, 수립

- 동일 계열 μ•Œκ³ λ¦¬μ¦˜μ„ κ°œλ³„μ μœΌλ‘œ μΊ‘μŠν™”ν•˜μ—¬ μƒν˜Έ κ΅ν™˜

- μ•Œκ³ λ¦¬μ¦˜ ꡰ을 μ •μ˜ν•˜κ³  같은 μ•Œκ³ λ¦¬μ¦˜μ„ 각각 ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— μΊ‘μŠν™” ν•„μš”ν•  λ•Œ μ„œλ‘œ κ΅ν™˜ν•΄μ„œ μ‚¬μš©ν•  수 있게 ν•˜λŠ” νŒ¨ν„΄

λ™μ μœΌλ‘œ ν–‰μœ„λ₯Ό 자유둭게 λ°”κΏ€ 수 μžˆλŠ” νŒ¨ν„΄
- ν–‰μœ„ 객체λ₯Ό μΊ‘μŠν™”ν•˜μ—¬ λ™μ μœΌλ‘œ ν–‰μœ„λ₯Ό 자유둭게 λ³€ν™˜
μ•Œκ³ λ¦¬μ¦˜κ΅°
Template Method
ν…œν”Œλ¦Ώ λ©”μ†Œλ“œ
- μƒμœ„ ν΄λž˜μŠ€μ—μ„œλŠ” μΆ”μƒμ μœΌλ‘œ ν‘œν˜„ν•˜κ³  ꡬ체적인 λ‚΄μš©μ€ ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ κ²°μ •

- μ—¬λŸ¬ ν΄λž˜μŠ€μ—μ„œ 곡톡 μ‚¬μš© λ©”μ„œλ“œλ₯Ό μƒμœ„ ν΄λž˜μŠ€μ—μ„œ μ •μ˜ν•˜κ³ , ν•˜μœ„ ν΄λž˜μŠ€λ§ˆλ‹€ λ‹€λ₯΄κ²Œ κ΅¬ν˜„ν•΄μ•Όν•˜λŠ” μ„ΈλΆ€ 사항을 κ°œλ³„ κ΅¬ν˜„

- μ•Œκ³ λ¦¬μ¦˜μ˜ 핡심적인 골격은 κ·ΈλŒ€λ‘œ μœ μ§€ / 일뢀 λ‹¨κ³„λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ꡬ체적으둜 κ΅¬ν˜„

μ½”λ“œμ˜ 양을 쀄이고 μœ μ§€λ³΄μˆ˜λ₯Ό μš©μ΄ν•˜κ²Œ ν•˜λŠ” νŒ¨ν„΄

- μ–΄λ–€ 처리λ₯Ό ν•˜λŠ” 일뢀뢄을 μ„œλΈŒ 클래슀둜 μΊ‘μŠν™”
- 전체 μˆ˜ν–‰ν•˜λŠ” 과정은 λ°”κΎΈμ§€ μ•ŠμŒ

* μƒμ„±μ˜ Factory Method와 ν—·κ°ˆλ¦¬μ§€ 말 것
μ•Œκ³ λ¦¬μ¦˜, μ„œλΈŒ 클래슀, μΊ‘μŠν™”, 좔상-골격, ν•˜μœ„-μ„ΈλΆ€μ²˜λ¦¬
Visitor
λΉ„μ‹œν„°
Visitor 뜻
: 방문객, μ†λ‹˜

- 각 클래슀 데이터 κ΅¬μ‘°λ‘œλΆ€ν„° 처리/μ—°μ‚° κΈ°λŠ₯을 λΆ„λ¦¬ν•˜μ—¬ λ³„λ„μ˜ 클래슀λ₯Ό λ§Œλ“€κ³ , ν•΄λ‹Ή 클래슀 λ©”μ„œλ“œκ°€ 각 클래슀λ₯Ό λŒμ•„λ‹€λ‹ˆλ©° νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰
=> 객체 ꡬ쑰 λ³€κ²½ X / μƒˆλ‘œμš΄ μ—°μ‚° κΈ°λŠ₯만 μΆ”κ°€

- 객체 ꡬ쑰λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  객체에 μƒˆλ‘œμš΄ μ—°μ‚° μΆ”κ°€
- 데이터 κ΅¬μ‘°μ—μ„œ 처리 κΈ°λŠ₯을 뢄리

- λΆ„λ¦¬ν•œ 처리 κΈ°λŠ₯을 λ³„λ„μ˜ 클래슀둜 λ§Œλ“€μ–΄λ‘ 

- 이 클래슀의 λ©”μ„œλ“œκ°€ 각 클래슀λ₯Ό λŒμ•„λ‹€λ‹ˆλ©΄μ„œ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰

- 객체의 κ΅¬μ‘°λŠ” λ³€κ²½ν•˜μ§€ μ•ŠμœΌλ©΄μ„œ κΈ°λŠ₯만 λ”°λ‘œ μˆ˜ν–‰ν•  수 있음
μƒˆλ‘œμš΄ μ—°μ‚° μΆ”κ°€, λŒμ•„λ‹€λ‹˜, κΈ°λŠ₯만 μˆ˜ν–‰