Coding Planet

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ2] μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ λ³Έλ¬Έ

πŸ’» Java Study/Java 이둠 정리

[μ΄νŽ™ν‹°λΈŒ μžλ°”]chapter2 : [μ•„μ΄ν…œ2] μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ

jhj.sharon 2023. 8. 6. 14:42
λ°˜μ‘ν˜•

μ•„μ΄ν…œ2 : μƒμ„±μžμ— λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ”λ₯Ό κ³ λ €ν•˜λΌ

정적 νŒ©ν† λ¦¬μ™€ μƒμ„±μžμ—λŠ” λ˜‘κ°™μ€ μ œμ•½μ΄ ν•˜λ‚˜ μžˆλ‹€. 선택적 λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ 경우 적절히 λŒ€μ‘ν•˜κΈ°κ°€ μ–΄λ ΅λ‹€λŠ” 것이닀. 기쑴에 λ§€κ°œλ³€μˆ˜κ°€ λ§Žμ„ 경우 κ³ λ €ν•  수 μžˆλŠ” λ°©μ•ˆμ€ λ‹€μŒκ³Ό κ°™λ‹€.

 

λŒ€μ•ˆ1. 점측적 μƒμ„±μž νŒ¨ν„΄

  • 점측적 μƒμ„±μž νŒ¨ν„΄(telescoping constructor pattern)μ΄λž€ 객체 생성 μ‹œ ν•„μš”ν•œ 쑰합에 따라 λ‹€μ–‘ν•œ μƒμ„±μžλ₯Ό μ œκ³΅ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • ν•„μˆ˜ λ§€κ°œλ³€μˆ˜λ₯Ό λ°›λŠ”μƒμ„±μžλ₯Ό λ¨Όμ € μƒμ„±ν•˜κ³  λ§€κ°œλ³€μˆ˜ 1개λ₯Ό μΆ”κ°€λ‘œ λ°›λŠ” μƒμ„±μž, 선택 맀개 λ³€μˆ˜ 2개λ₯Ό μΆ”κ°€λ‘œ λ°›λŠ” μƒμ„±μž λ“±μ˜ ν˜•νƒœλ‘œ λ§€κ°œλ³€μˆ˜ 개수만큼 μƒμ„±μžλ₯Ό λŠ˜λ €κ°€λŠ” 방식이닀.
  • 이 νŒ¨ν„΄μ˜ μ£Όμš”ν•œ λ¬Έμ œλŠ” 선택적 λ§€κ°œλ³€μˆ˜μ˜ μˆ˜κ°€ λ§Žμ•„μ§ˆμˆ˜λ‘ μƒμ„±μžμ˜ μˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λŠ˜μ–΄λ‚˜κ²Œ 되며, ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œμ—μ„œ μ–΄λ–€ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ•Ό 할지 ν˜Όλž€μŠ€λŸ¬μšΈ 수 μžˆλ‹€.
  • 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” μž…μž₯μ—μ„œ ν•΄λ‹Ή λ§€κ°œλ³€μˆ˜κ°€ λ§žλŠ”μ§€, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜λŠ” μ œλŒ€λ‘œ μž…λ ₯ν•œ 것인지 확인해야 ν•˜λŠ” λΆˆνŽΈν•¨μ΄ μžˆλ‹€.

λŒ€μ•ˆ2. μžλ°” 빈즈 νŒ¨ν„΄

  • μžλ°” 빈즈 νŒ¨ν„΄μ€ 객체 생성 및 μ΄ˆκΈ°ν™”λ₯Ό μœ„ν•œ ν”„λ‘œκ·Έλž˜λ° λͺ¨λΈμ΄λ‹€. λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” μƒμ„±μžλ‘œ 객체λ₯Ό λ§Œλ“  ν›„, setter λ©”μ„œλ“œλ“€μ„ ν˜ΈμΆœν•΄ μ›ν•˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ 값을 μ„€μ •ν•˜λŠ” 방식이닀.
  • 이 방식을 톡해 점측적 μƒμ„±μž νŒ¨ν„΄μ˜ 문제인 μ½”λ“œμž‘μ„± 효율, 가독성 μ €ν•˜ 문제λ₯Ό ν•΄κ²°ν–ˆλ‹€.
  • ν•˜μ§€λ§Œ 객체 ν•˜λ‚˜λ₯Ό λ§Œλ“œλ €λ©΄ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 개 ν˜ΈμΆœν•΄μ•Ό ν•˜κ³ , 객체가 μ™„μ „νžˆ μƒμ„±λ˜κΈ° μ „κΉŒμ§€λŠ” 일관성(Consistency)이 λ¬΄λ„ˆμ§„ μƒνƒœμ— λ†“μ΄κ²Œ λœλ‹€.
  • 즉, 객체가 λΆˆλ³€(immutable)이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μŠ€λ ˆλ“œ μ•ˆμ „μ„± λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 것이닀. λ§ˆμ°¬κ°€μ§€λ‘œ Setterλ₯Ό ν†΅ν•΄μ„œ 값을 μ£Όμž…λ°›κΈ° λ•Œλ¬Έμ— final을 μ‚¬μš©ν•  수 μ—†λ‹€.

λŒ€μ•ˆ3. :gem: λΉŒλ” νŒ¨ν„΄(Builder Pattern)

  • 점측적 μƒμ„±μž νŒ¨ν„΄μ˜ μ•ˆμ „μ„±κ³Ό μžλ°”λΉˆμ¦ˆ νŒ¨ν„΄μ˜ 가독성을 κ²ΈλΉ„ν•œ λΉŒλ” νŒ¨ν„΄
  • ν΄λΌμ΄μ–ΈνŠΈλŠ” ν•„μš”ν•œ 객체λ₯Ό 직접 λ§Œλ“œλŠ” λŒ€μ‹ , ν•„μˆ˜ λ§€κ°œλ³€μˆ˜λ§ŒμœΌλ‘œ μƒμ„±μž ν˜Ήμ€ 정적 νŒ©ν† λ¦¬λ₯Ό ν˜ΈμΆœν•΄ λΉŒλ” 객체λ₯Ό μ–»λŠ”λ‹€.
    • 이λ₯Ό 톡해 λΆˆλ³€μ‹μ„ μ μš©ν•  수 μžˆλ‹€.
  • 그런 λ‹€μŒ λΉŒλ” 객체가 μ œκ³΅ν•˜λŠ” Setter λ©”μ„œλ“œλ“€λ‘œ μ›ν•˜λŠ” 선택 λ§€κ°œλ³€μˆ˜λ“€μ„ μ„€μ •ν•œλ‹€.
    • μ—¬λŸ¬ 개의 κ°€λ³€ 인자λ₯Ό 받을 수 μžˆλ‹€.
  • λ§ˆμ§€λ§‰μœΌλ‘œ λ§€κ°œλ³€μˆ˜κ°€ μ—†λŠ” build λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄ 객체λ₯Ό μ–»λŠ”λ‹€.
    • λΉŒλ”μ˜ setter λ©”μ„œλ“œλ“€μ€ λΉŒλ” μžμ‹ μ„ λ°˜ν™˜ν•˜κΈ° λ•Œλ¬Έμ— μ—°μ‡„μ μœΌλ‘œ ν˜ΈμΆœν•  수 μžˆλ‹€(method chaining).
  • λΉŒλ” νŒ¨ν„΄μ˜ ν˜•μ‹
    • 클래슀의 ν•„μˆ˜ 속성듀을 final λΆˆλ³€ μ„ μ–Έν•œλ‹€.
    • 정적 λ‚΄λΆ€ 클래슀둜 λΉŒλ”λΌλŠ” 클래슀λ₯Ό μ •μ˜ν•˜μ—¬ 객체 생성을 μœ„μž„ν•œλ‹€.
    • λΉŒλ” ν΄λž˜μŠ€λŠ” λΉŒλ”κ°€ λ§Œλ“œλŠ” 객체 클래슀의 정적 멀버 클래슀둜 μ •μ˜ν•œλ‹€.

(❁´β—‘`❁)λΉŒλ” νŒ¨ν„΄μ€ κ³„μΈ΅μ μœΌλ‘œ μ„€κ³„λœ ν΄λž˜μŠ€μ™€ ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ 특히 μœ μš©ν•˜λ‹€. κ³„μΈ΅μ μœΌλ‘œ μ„€κ³„λœ ν΄λž˜μŠ€λŠ” μ’…μ’… λ³΅μž‘ν•œ μƒμ„±μžλ₯Ό 가지며, 각 κ³„μΈ΅μ˜ μ„œλΈŒ ν΄λž˜μŠ€κ°€ 좔가될 λ•Œλ§ˆλ‹€ 이 μƒμ„±μžλ“€μ΄ 더 λ³΅μž‘ν•΄μ§ˆ 수 μžˆλ‹€. μ΄λŸ¬ν•œ λ³΅μž‘μ„±μ„ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ λΉŒλ” νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄, ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œκ°€ 훨씬 κΉ”λ”ν•˜κ³  읽기 μ‰¬μ›Œμ§„λ‹€.


 


결둠적으둜 μƒμ„±μžλ‚˜ 정적 νŒ©ν† λ¦¬κ°€ μ²˜λ¦¬ν•΄μ•Ό ν•  λ§€κ°œλ³€μˆ˜κ°€ λ§Žλ‹€λ©΄ λΉŒλ” νŒ¨ν„΄μ„ μ„ νƒν•˜λŠ”κ²Œ 더 λ‚«λ‹€. λ§€κ°œλ³€μˆ˜ 쀑 λ‹€μˆ˜κ°€ ν•„μˆ˜κ°€ μ•„λ‹ˆκ±°λ‚˜ 같은 νƒ€μž…μ΄λ©΄ 특히 더 κ·ΈλŸ¬λ‹€. λΉŒλ”λŠ” 점측적 μƒμ„±μžλ³΄λ‹€ ν΄λΌμ΄μ–ΈνŠΈ μ½”λ“œλ₯Ό 읽고 μ“°κΈ°κ°€ 훨씬 κ°ˆκ²°ν•˜κ³  μžλ°” λΉˆμ¦ˆλ³΄λ‹€ 훨씬 μ•ˆμ „ν•˜λ‹€.

λ°˜μ‘ν˜•
Comments