ν‹°μŠ€ν† λ¦¬ λ·°

λ°˜μ‘ν˜•

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

λ””μžμΈ νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ—μ„œ 자주 λ°œμƒν•˜λŠ” λ¬Έμ œλ“€μ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 개발된, κ²€μ¦λœ μž¬μ‚¬μš© κ°€λŠ₯ν•œ 섀계 κ΅¬μ‘°μž…λ‹ˆλ‹€.

λ””μžμΈ νŒ¨ν„΄μ€ 객체 지ν–₯ 섀계 원칙 SOLID을 기반으둜 ν•˜λ©°, μ†Œν”„νŠΈμ›¨μ–΄μ˜ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성을 λ†’μ΄λŠ” 데 도움이 λ©λ‹ˆλ‹€. 각 λ””μžμΈ νŒ¨ν„΄μ€ νŠΉμ • μƒν™©μ—μ„œ μ–΄λ–»κ²Œ 클래슀λ₯Ό κ΅¬μ„±ν•˜κ³  μƒν˜Έμž‘μš©ν•΄μ•Ό ν•˜λŠ”μ§€μ— λŒ€ν•œ λͺ…ν™•ν•œ 방법을 μ œμ‹œν•©λ‹ˆλ‹€.

λ””μžμΈ νŒ¨ν„΄μ€ 크게 생성, ꡬ쑰, ν–‰μœ„λ‘œ λΆ„λ₯˜λ©λ‹ˆλ‹€.

1. 생성 νŒ¨ν„΄ (Creational Patterns)

생성 νŒ¨ν„΄μ€ 객체 생성 λ©”μ»€λ‹ˆμ¦˜μ— 쀑점을 두어, 객체 생성 κ³Όμ •μ—μ„œμ˜ λ³΅μž‘μ„±μ„ 숨기고, μœ μ—°μ„±μ„ μ œκ³΅ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. 객체λ₯Ό μ–΄λ–»κ²Œ μƒμ„±ν•˜κ³  관리할 것인가에 λŒ€ν•œ 방법을 λ‹€λ£Ήλ‹ˆλ‹€.

  • μ‹±κΈ€ν„΄ νŒ¨ν„΄ (Singleton Pattern): 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜λ§Œ μƒμ„±ν•˜κ³ , κ·Έ μΈμŠ€ν„΄μŠ€λ₯Ό μ–΄λ””μ„œλ“ μ§€ μ ‘κ·Όν•  수 μžˆλ„λ‘ ν•˜λŠ” νŒ¨ν„΄.
  • νŒ©ν† λ¦¬ λ©”μ„œλ“œ νŒ¨ν„΄ (Factory Method Pattern): 객체 μƒμ„±μ˜ μ±…μž„μ„ μ„œλΈŒν΄λž˜μŠ€μ— μœ„μž„ν•˜μ—¬, μ–΄λ–€ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό 생성할지 μ„œλΈŒν΄λž˜μŠ€κ°€ κ²°μ •ν•˜λ„λ‘ ν•˜λŠ” νŒ¨ν„΄.
  • 좔상 νŒ©ν† λ¦¬ νŒ¨ν„΄ (Abstract Factory Pattern): μ„œλ‘œ κ΄€λ ¨λœ κ°μ²΄λ“€μ˜ ꡰ을 생성할 수 μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” νŒ¨ν„΄.
  • λΉŒλ” νŒ¨ν„΄ (Builder Pattern): λ³΅μž‘ν•œ 객체의 생성 과정을 λ‹¨κ³„λ³„λ‘œ λΆ„λ¦¬ν•˜μ—¬, 객체의 생성과정을 더 μœ μ—°ν•˜κ²Œ ν•˜λŠ” νŒ¨ν„΄.
  • ν”„λ‘œν† νƒ€μž… νŒ¨ν„΄ (Prototype Pattern): 객체λ₯Ό μƒˆλ‘œ μƒμ„±ν•˜λŠ” λŒ€μ‹  이미 μ‘΄μž¬ν•˜λŠ” 객체λ₯Ό λ³΅μ œν•˜μ—¬ μƒˆλ‘œμš΄ 객체λ₯Ό μƒμ„±ν•˜λŠ” νŒ¨ν„΄.

2. ꡬ쑰 νŒ¨ν„΄ (Structural Patterns)

ꡬ쑰 νŒ¨ν„΄μ€ ν΄λž˜μŠ€μ™€ 객체 κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜μ—¬, 더 큰 ꡬ쑰λ₯Ό ν˜•μ„±ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. 객체와 클래슀의 ꡬ성 방식을 닀루어, κ·Έλ“€μ˜ 관계와 ꡬ쑰λ₯Ό μ‰½κ²Œ λ³€κ²½ν•  수 있게 ν•©λ‹ˆλ‹€.

  • μ–΄λŒ‘ν„° νŒ¨ν„΄ (Adapter Pattern): 클래슀의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ³€ν™˜ν•˜μ—¬, ν˜Έν™˜λ˜μ§€ μ•ŠλŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 가진 ν΄λž˜μŠ€λ“€μ΄ ν•¨κ»˜ λ™μž‘ν•  수 μžˆλ„λ‘ ν•˜λŠ” νŒ¨ν„΄.
  • λ°μ½”λ ˆμ΄ν„° νŒ¨ν„΄ (Decorator Pattern): 객체에 λ™μ μœΌλ‘œ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 μžˆλŠ” νŒ¨ν„΄μœΌλ‘œ, 기쑴의 객체λ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³ λ„ κΈ°λŠ₯을 ν™•μž₯ν•  수 있음.
  • ν”„λ‘μ‹œ νŒ¨ν„΄ (Proxy Pattern): μ‹€μ œ 객체에 λŒ€ν•œ λŒ€λ¦¬ 객체λ₯Ό μ œκ³΅ν•˜μ—¬, 객체에 접근을 μ œμ–΄ν•˜λŠ” νŒ¨ν„΄.
  • λΈŒλ¦¬μ§€ νŒ¨ν„΄ (Bridge Pattern): 좔상화와 κ΅¬ν˜„μ„ λΆ„λ¦¬ν•˜μ—¬ 각각 λ…λ¦½μ μœΌλ‘œ λ³€ν™”ν•  수 μžˆλ„λ‘ μ„€κ³„ν•˜λŠ” νŒ¨ν„΄.
  • μ»΄ν¬μ§€νŠΈ νŒ¨ν„΄ (Composite Pattern): 객체듀을 트리 ꡬ쑰둜 κ΅¬μ„±ν•˜μ—¬ λΆ€λΆ„-전체 계측을 ν‘œν˜„ν•˜λŠ” νŒ¨ν„΄. ν΄λΌμ΄μ–ΈνŠΈκ°€ κ°œλ³„ 객체와 볡합 객체λ₯Ό λ™μΌν•˜κ²Œ λ‹€λ£° 수 있음.
  • νΌμ‚¬λ“œ νŒ¨ν„΄ (Facade Pattern): λ³΅μž‘ν•œ μ„œλΈŒ μ‹œμŠ€ν…œμ— λŒ€ν•œ λ‹¨μˆœν™”λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” νŒ¨ν„΄.

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

ν–‰μœ„ νŒ¨ν„΄μ€ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ •μ˜ν•˜κ³ , 객체듀 κ°„μ˜ 톡신과 μ±…μž„ 뢄담을 μ„€κ³„ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. 객체듀 κ°„μ˜ ν˜‘λ ₯ λ°©μ‹μ΄λ‚˜ 흐름을 λ‹€λ£Ήλ‹ˆλ‹€.

  • μ˜΅μ €λ²„ νŒ¨ν„΄ (Observer Pattern): ν•œ 객체의 μƒνƒœ λ³€ν™”κ°€ μžˆμ„ λ•Œ, μ˜μ‘΄ν•˜λŠ” λ‹€λ₯Έ κ°μ²΄λ“€μ—κ²Œ μžλ™μœΌλ‘œ μ•Œλ¦Όμ„ λ³΄λ‚΄λŠ” νŒ¨ν„΄. 주둜 이벀트 μ‹œμŠ€ν…œμ—μ„œ μ‚¬μš©λ¨.
  • μ „λž΅ νŒ¨ν„΄ (Strategy Pattern): ν–‰μœ„μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ 각각 λ³„λ„μ˜ 클래슀둜 μ •μ˜ν•˜κ³ , λŸ°νƒ€μž„μ— ν–‰μœ„μ˜ μ•Œκ³ λ¦¬μ¦˜μ„ 선택할 수 μžˆλ„λ‘ ν•˜λŠ” νŒ¨ν„΄.
  • μƒνƒœ νŒ¨ν„΄ (State Pattern): 객체의 λ‚΄λΆ€ μƒνƒœμ— 따라 행동을 λ‹¬λ¦¬ν•˜λŠ” νŒ¨ν„΄μœΌλ‘œ, μƒνƒœμ˜ 변화에 따라 객체의 ν–‰μœ„κ°€ 달라짐.
  • ν…œν”Œλ¦Ώ λ©”μ„œλ“œ νŒ¨ν„΄ (Template Method Pattern): μƒμœ„ ν΄λž˜μŠ€μ—μ„œ μ•Œκ³ λ¦¬μ¦˜μ˜ ꡬ쑰λ₯Ό μ •μ˜ν•˜κ³ , ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ꡬ체적인 단계λ₯Ό κ΅¬ν˜„ν•˜λŠ” νŒ¨ν„΄.
  • μ»€λ§¨λ“œ νŒ¨ν„΄ (Command Pattern): μš”μ²­μ„ μΊ‘μŠν™”ν•˜μ—¬ 객체둜 λ§Œλ“€κ³ , μš”μ²­μ„ μ €μž₯ν•˜κ±°λ‚˜ λ‘œκΉ…ν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 있게 ν•˜λŠ” νŒ¨ν„΄.
  • 미디에이터 νŒ¨ν„΄ (Mediator Pattern): 객체듀이 직접 ν†΅μ‹ ν•˜μ§€ μ•Šκ³  **μ€‘μž¬μž(Mediator)**λ₯Ό 톡해 μ†Œν†΅ν•˜κ²Œ ν•˜λŠ” νŒ¨ν„΄. 객체듀 κ°„μ˜ 결합도λ₯Ό 쀄일 수 있음.
  • λ©”λ©˜ν†  νŒ¨ν„΄ (Memento Pattern): 객체의 μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  볡원할 수 μžˆλŠ” νŒ¨ν„΄μœΌλ‘œ, 객체의 이전 μƒνƒœλ₯Ό 볡ꡬ할 수 μžˆλ„λ‘ 함.

βœ… λ””μžμΈ νŒ¨ν„΄μ˜ μž₯/단점

μž₯점

  • μž¬μ‚¬μš©μ„± ν–₯상: κ²€μ¦λœ 해결책을 μ œκ³΅ν•˜μ—¬ μœ μ‚¬ν•œ λ¬Έμ œμ— μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•  수 있게 ν•©λ‹ˆλ‹€.
  • μœ μ§€λ³΄μˆ˜μ„± κ°œμ„ : μ½”λ“œμ˜ ꡬ쑰화와 가독성을 λ†’μ—¬ μœ μ§€λ³΄μˆ˜κ°€ μ‰¬μ›Œμ§‘λ‹ˆλ‹€.
  • ν™•μž₯μ„± 제곡: κΈ°μ‘΄ μ½”λ“œ μˆ˜μ • 없이 μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜κ±°λ‚˜ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ½”λ“œ ν’ˆμ§ˆ ν–₯상: κ΅¬μ‘°ν™”λœ μ ‘κ·Ό λ°©μ‹μœΌλ‘œ μ½”λ“œμ˜ μ „λ°˜μ μΈ ν’ˆμ§ˆμ΄ κ°œμ„ λ©λ‹ˆλ‹€.
  • 개발자 κ°„ μ˜μ‚¬μ†Œν†΅ κ°œμ„ : κ³΅ν†΅ μ–΄νœ˜λ₯Ό μ œκ³΅ν•˜μ—¬ κ°œλ°œμž κ°„ μ˜μ‚¬μ†Œν†΅μ„ μ›ν™œν•˜κ²Œ ν•©λ‹ˆλ‹€.

단점

  • κ³Όλ„ν•œ μ‚¬μš© μœ„ν—˜: ν•„μš” μ΄μƒμœΌλ‘œ μ‚¬μš©ν•˜λ©΄ μ‹œμŠ€ν…œμ΄ λΆˆν•„μš”ν•˜κ²Œ λ³΅μž‘ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€
  • μ„±λŠ₯ μ €ν•˜ κ°€λŠ₯μ„±: 일뢀 νŒ¨ν„΄μ€ 좔가적인 좔상화 λ ˆμ΄μ–΄λ‘œ 인해 μ„±λŠ₯에 뢀정적 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€
  • ν•™μŠ΅ 곑선: νŒ¨ν„΄μ„ μ΄ν•΄ν•˜κ³  적절히 μ μš©ν•˜λŠ” 데 μ‹œκ°„κ³Ό λ…Έλ ₯이 ν•„μš”ν•©λ‹ˆλ‹€
  • μ½”λ“œ λ³΅μž‘μ„± 증가: 일뢀 νŒ¨ν„΄μ€ 좔가적인 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ„μž…ν•˜μ—¬ μ½”λ“œ λ³΅μž‘μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€
  • μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§ μœ„ν—˜: κ°„λ‹¨ν•œ λ¬Έμ œμ— λ³΅μž‘ν•œ νŒ¨ν„΄μ„ μ μš©ν•˜λ©΄ λΆˆν•„μš”ν•œ λ³΅μž‘성이 μƒκΈΈ μˆ˜ μžˆμŠ΅λ‹ˆλ‹€

 

λͺ¨λ“  문제의 해결책듀이 λ””μžμΈνŒ¨ν„΄μ— κΌ­ 정닡이 μžˆλŠ”κ²Œ μ•„λ‹™λ‹ˆλ‹€. 상황에 맞게 적절히 μ‚¬μš©ν•΄μ•Ό ν•˜λ©° 각 νŒ¨ν„΄μ˜ μž₯단점을 μ΄ν•΄ν•˜κ³ , 문제의 νŠΉμ„±κ³Ό μš”κ΅¬μ‚¬ν•­μ„ κ³ λ €ν•˜μ—¬ μ‹ μ€‘ν•˜κ²Œ μ μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

'πŸ“Ί Develop > 🎨 Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

객체 지ν–₯ 섀계 원칙 SOLID  (0) 2024.10.18
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2024/12   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
κΈ€ 보관함
λΆ„λ₯˜ 전체보기 (80)
πŸ“Ί Develop (0)
πŸŒ‹ Error Fixed (5)
πŸ— Tool (5)
πŸ’» MacBook M1 (15)
πŸ“¦ ETC (1)

이 ν¬μŠ€νŒ…μ€ 쿠팑 νŒŒνŠΈλ„ˆμŠ€ ν™œλ™μ˜ μΌν™˜μœΌλ‘œ, 이에 λ”°λ₯Έ μΌμ •μ•‘μ˜ 수수료λ₯Ό μ œκ³΅λ°›μŠ΅λ‹ˆλ‹€.