View

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

μ±…μ½λŠ” 감자 2023. 6. 23. 13:49
λ°˜μ‘ν˜•

싱글톀 νŒ¨ν„΄

  • ν΄λž˜μŠ€μ— 였직 ν•˜λ‚˜μ˜ 객체만이 생성됨을 보μž₯
  • 였직 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€λ§Œμ„ μƒμ„±ν•˜μ—¬ 이λ₯Ό μ ‘κ·Όν•˜λŠ” λ©”μ†Œλ“œλ₯Ό 제곡

 

주둜 μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?
πŸ’‘ κ³΅ν†΅λœ 객체λ₯Ό μ—¬λŸ¬κ°œ μƒμ„±ν•΄μ„œ μ‚¬μš©ν•΄μ•Όν•˜λŠ” 상황
πŸ’‘ `λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 컀λ„₯μ…˜ν’€, μŠ€λ ˆλ“œν’€, μΊμ‹œ, 둜그 기둝 객체 λ“±`

 

μž₯단점

+) λ©”λͺ¨λ¦¬ 츑면의 νš¨μœ¨μ„± : 졜초 ν•œλ²ˆμ˜ new μ—°μ‚°μžλ₯Ό ν†΅ν•΄μ„œ κ³ μ •λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ μ‚¬μš© → μΆ”ν›„ ν•΄λ‹Ή 객체 μ ‘κ·Ό μ‹œ λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 방지

+) 데이터 곡유 μˆ˜μ›”: 싱글톀 μΈμŠ€ν„΄μŠ€κ°€ μ „μ—­μœΌλ‘œ μ‚¬μš©λ˜λŠ” μΈμŠ€ν„΄μŠ€ → λ‹€λ₯Έ 클래슀의 μΈμŠ€ν„΄μŠ€λ“€μ΄ μ ‘κ·Όν•˜μ—¬ μ‚¬μš©ν•  수 있음

-) ν…ŒμŠ€νŠΈμ˜ 어렀움 : 싱글톀 μΈμŠ€ν„΄μŠ€λŠ” μžμ›μ„ κ³΅μœ ν•˜κ³  있음 → ν…ŒμŠ€νŠΈκ°€ κ²°μ •μ μœΌλ‘œ 격리된 ν™˜κ²½μ—μ„œ μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” 맀번 μΈμŠ€ν„΄μŠ€μ˜ μƒνƒœλ₯Ό μ΄ˆκΈ°ν™” μ‹œμΌœμ€˜μ•Όν•¨

-) 개방-폐쇄 원칙 μœ„λ°° : 싱글톀 μΈμŠ€ν„΄μŠ€κ°€ 혼자 λ§Žμ€ 일 , λ§Žμ€ 데이터 곡유 → λ‹€λ₯Έ ν΄λž˜μŠ€λ“€ κ°„μ˜ 결합도가 높아짐


 

 

νŒ©ν† λ¦¬ νŒ¨ν„΄

: 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“œλŠ” 일을 μ„œλΈŒ ν΄λž˜μŠ€μ—κ²Œ 맑김

주둜 μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?
πŸ’‘  μ–΄λ–€ ν΄λž˜μŠ€κ°€ μžμ‹ μ΄ 생성해야 ν•˜λŠ” 객체의 클래슀λ₯Ό μ˜ˆμΈ‘ν•  수 없을 λ•Œ ,
πŸ’‘ 생성할 객체λ₯Ό κΈ°μˆ ν•˜λŠ” μ±…μž„μ„ μžμ‹ μ˜ μ„œλΈŒν΄λž˜μŠ€κ°€ μ§€μ •ν–ˆμœΌλ©΄ ν•  λ•Œ

 

μž₯단점

+) μˆ˜μ •μ— λ‹«ν˜€μžˆκ³  ν™•μž₯μ—λŠ” μ—΄λ €μžˆλŠ” OCP 원칙을 지킬 수 μžˆλ‹€λŠ” 점

-) κ°„λ‹¨ν•œ κΈ°λŠ₯을 μ‚¬μš©ν•  떄보닀 λ§Žμ€ 클래슀λ₯Ό μ •μ˜ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œλŸ‰ 증가


 

 

μ „λž΅ νŒ¨ν„΄

: 객체가 ν•  수 μžˆλŠ” ν–‰μœ„λ“€ 각각을 μ „λž΅μœΌλ‘œ λ§Œλ“€μ–΄ 놓고, λ™μ μœΌλ‘œ ν–‰μœ„μ˜ μˆ˜μ •μ΄ ν•„μš”ν•œ 경우 μ „λž΅μ„ λ°”κΎΈλŠ” κ²ƒλ§ŒμœΌλ‘œ ν–‰μœ„μ˜ μˆ˜μ •μ΄ κ°€λŠ₯ν•˜λ„λ‘ λ§Œλ“  νŒ¨ν„΄

주둜 μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?
πŸ’‘ **`if-else`** μ½”λ“œ λΈ”λŸ­μœΌλ‘œ κ΅¬μ„±λ˜μ–΄ μžˆλŠ”λ°, λͺ¨λ“  μ½”λ“œκ°€ λΉ„μŠ·ν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” 경우
πŸ’‘ μ•Œκ³ λ¦¬μ¦˜μ˜ λ™μž‘μ΄ λŸ°νƒ€μž„μ— μ‹€μ‹œκ°„μœΌλ‘œ ꡐ체 λ˜μ–΄μ•Όν•  λ•Œ
πŸ’‘ μ•Œκ³ λ¦¬μ¦˜ μ½”λ“œκ°€ λ…ΈμΆœλ˜μ–΄μ„œλŠ” μ•ˆ λ˜λŠ” 데이터에 μ—‘μ„ΈμŠ€ ν•˜κ±°λ‚˜ 데이터λ₯Ό ν™œμš©ν•  λ•Œ (μΊ‘μŠν™”) 

 

μž₯단점

-) μ•Œκ³ λ¦¬μ¦˜μ΄ λ§Žμ•„μ§ˆ 수둝 κ΄€λ¦¬ν•΄μ•Όν•˜λŠ” 객체의 μˆ˜κ°€ λŠ˜μ–΄λ‚  수 있음

-) κ°œλ°œμžλŠ” μ μ ˆν•œ μ „λž΅μ„ μ„ νƒν•˜κΈ° μœ„ν•΄μ„œλŠ” μ „λž΅ κ°„μ˜ 차이점을 νŒŒμ•…ν•˜κ³  μžˆμ–΄μ•Όν•¨ (λ³΅μž‘λ„ μƒμŠΉ)

μ°Έκ³ :

πŸ’  μ „λž΅(Strategy) νŒ¨ν„΄ - μ™„λ²½ λ§ˆμŠ€ν„°ν•˜κΈ°


 

μ˜΅μ €λ²„ νŒ¨ν„΄

μ–΄λ–€ 객체의 λ³€κ²½ 사항이 λ°œμƒν•˜μ˜€μ„λ•Œ 이와 μ—°κ΄€λœ κ°μ²΄λ“€μ—κ²Œ μ•Œλ €μ£ΌλŠ” λ””μžμΈ νŒ¨ν„΄

주둜 μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?
πŸ’‘ **μΌλŒ€λ‹€(one-to-many) μ˜μ‘΄μ„±**을 κ°€μ§€λŠ”λ°, 주둜 λΆ„μ‚° 이벀트 핸듀링 μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©
πŸ’‘  pub/sub(λ°œν–‰/ꡬ독) λͺ¨λΈλ‘œλ„ μ•Œλ €μ Έ 있음
μž₯단점

+) μ‹€μ‹œκ°„μœΌλ‘œ ν•œ 객체의 변경사항을 λ‹€λ₯Έ 객체에 μ „νŒŒ ν•  수 있음

+) λŠμŠ¨ν•œ κ²°ν•©μœΌλ‘œ μ‹œμŠ€ν…œμ΄ μœ μ—°ν•˜κ³  κ°μ²΄κ°„μ˜ μ˜μ‘΄μ„±μ„ μ œκ±°ν•  수 있음

 

-) λ„ˆλ¬΄ 많이 μ‚¬μš©ν•˜λ©΄, μƒνƒœ 관리 νž˜λ“¦

-) 데이터 뢄배에 λ¬Έμ œκ°€ 생기면 큰 문제둜 μ΄μ–΄μ§ˆ 수 있음

 

μ°Έκ³ :

[iOS]μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)


 

ν”„λ‘μ‹œ νŒ¨ν„΄

: λŒ€μƒ 원본 객체λ₯Ό λŒ€λ¦¬ν•˜μ—¬ λŒ€μ‹  μ²˜λ¦¬ν•˜κ²Œ ν•¨μœΌλ‘œμ¨ 둜직의 흐름을 μ œμ–΄ν•˜λŠ” 행동 νŒ¨ν„΄

→ λŒ€μƒ 객체의 λ©”μ†Œλ“œλ₯Ό 직접 μ‹€ν–‰ν•˜λŠ” 것이 μ•„λ‹Œ, λŒ€μƒ 객체에 μ ‘κ·Όν•˜κΈ° 전에 ν”„λ‘μ‹œ 객체의 λ©”μ„œλ“œλ₯Ό μ ‘κ·Όν•œ ν›„ 좔가적인 λ‘œμ§μ„ μ²˜λ¦¬ν•œ λ’€ μ ‘κ·Ό

주둜 μ–Έμ œ μ‚¬μš©ν•˜λŠ”κ°€?
πŸ’‘ λŒ€μƒ ν΄λž˜μŠ€κ°€ λ―Όκ°ν•œ 정보λ₯Ό 가지고 μžˆκ±°λ‚˜ μΈμŠ€ν„΄μŠ€ν™” ν•˜κΈ°μ— 무겁고 μΆ”κ°€ κΈ°λŠ₯을 κ°€λ―Έν•˜κ³  싢을 λ•Œ
πŸ’‘  원본 객체λ₯Ό μˆ˜μ •ν•  수 μ—†λŠ” 상황을 κ·Ήλ³΅ν•˜κΈ° μœ„ν•¨

 

μž₯단점

+) 개방-폐쇄 원칙을 μ€€μˆ˜ : κΈ°μ‘΄ λŒ€μƒ 객체의 μ½”λ“œλ₯Ό λ³€κ²½ν•˜μ§€ μ•Šκ³  μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 있음

+) 단일 μ±…μž„ 원칙 μ€€μˆ˜ : λŒ€μƒ κ°μ²΄λŠ” μžμ‹ μ˜ κΈ°λŠ₯μ—λ§Œ 집쀑 → 닀쀑 μ±…μž„μ„ νšŒν”Ό

 

-) ν”„λ‘μ‹œ 클래슀 μžμ²΄μ— λ“€μ–΄κ°€λŠ” μžμ›μ΄ λ§Žλ‹€λ©΄ μ„œλΉ„μŠ€λ‘œλΆ€ν„° 응닡이 느렀질 수 있음


 

질문 리슀트

  1. 싱글톀 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?

λͺ¨λ“  데이터λ₯Ό μ „μ—­μœΌλ‘œ κ΄€λ¦¬ν•˜κΈ° λ•Œλ¬Έμ— μ‰½κ²Œ μ ‘κ·Όν•  수 있고, 초기 객체λ₯Ό μƒμ„±ν•˜κ²Œ 되면 정적 λ©”λͺ¨λ¦¬μ— μ˜¬λΌκ°€κΈ° λ•Œλ¬Έμ— 호좜이 빠름. 쀑볡 생성과 λ©”λͺ¨λ¦¬ λ‚­λΉ„λ₯Ό 방지할 수 μžˆλ‹€.

2. λ””μžμΈ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ”?

ν˜‘μ—… μ‹œ λ²”μš©μ μΈ μ½”λ”© μŠ€νƒ€μΌμ„ μ μš©ν•  수 있음

μΈμˆ˜μΈκ³„ λ“± → μ†Œν”„νŠΈμ›¨μ–΄ ꡬ쑰 νŒŒμ•…μ— 용이

μš”κ΅¬μ‚¬ν•­ μˆ˜μ‹œλ‘œ λ³€κ²½ : μš”κ΅¬μ‚¬ν•­μ— λ”°λ₯Έ μ†ŒμŠ€ μ½”λ“œ 변경을 μ΅œμ†Œν™”ν•  수 있게 ν•΄μ€Œ, μœ μ—°ν•œ λŒ€μ²˜ κ°€λŠ₯

λ°˜μ‘ν˜•
Share Link
reply
λ°˜μ‘ν˜•
Β«   2024/11   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
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