λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)에 λŒ€ν•˜μ—¬

by 5566 2023. 10. 2.

1. μ˜΅μ €λ²„ νŒ¨ν„΄μ΄λž€?

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜λ‘œ, 객체 κ°„μ˜ μΌλŒ€λ‹€ μ˜μ‘΄μ„±μ„ μ •μ˜ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€. 이 νŒ¨ν„΄μ€ 주체(subject) 객체의 μƒνƒœκ°€ λ³€κ²½λ˜μ—ˆμ„ λ•Œ, 이에 μ˜μ‘΄ν•˜λŠ” λ‹€μˆ˜μ˜ 객체듀인 μ˜΅μ €λ²„(observer)λ“€μ—κ²Œ μžλ™μœΌλ‘œ μ•Œλ¦Όμ„ μ „λ‹¬ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

주체 κ°μ²΄λŠ” μ˜΅μ €λ²„μ— λŒ€ν•œ 등둝, μ•Œλ¦Ό λ©”μ‹œμ§€ 전솑 λ“±μ˜ μ±…μž„μ„ κ°–κ³  있으며, μ˜΅μ €λ²„λŠ” 주체 객체의 μƒνƒœ 변화에 λ”°λ₯Έ μ—…λ°μ΄νŠΈ μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨, 주체 객체와 μ˜΅μ €λ²„ κ°μ²΄λŠ” λŠμŠ¨ν•˜κ²Œ κ²°ν•©λ˜λ―€λ‘œ μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ ꡬ좕할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ μ‹ λ¬Έ ꡬ독과 μœ μ‚¬ν•œ κ°œλ…μœΌλ‘œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ΄ μ‹ λ¬Έ ꡬ독 μ„œλΉ„μŠ€μ— κ°€μž…ν•˜λ©΄, μƒˆλ‘œμš΄ 기사가 λ°œν–‰λ  λ•Œλ§ˆλ‹€ 이λ₯Ό κ΅¬λ…μžλ“€μ—κ²Œ μ•Œλ €μ£ΌλŠ” λ©”μ»€λ‹ˆμ¦˜μ΄ μž‘λ™ν•©λ‹ˆλ‹€. μ΄λ•Œ, 신문은 주체 객체이고, κ΅¬λ…μžλ“€μ€ μ˜΅μ €λ²„ 객체둜 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이처럼 μ˜΅μ €λ²„ νŒ¨ν„΄μ€ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ 이벀트 기반으둜 μ„€κ³„ν•˜λŠ”λ° μœ μš©ν•˜κ²Œ μ‚¬μš©λ©λ‹ˆλ‹€.

2. μ˜΅μ €λ²„ νŒ¨ν„΄μ˜ ꡬ쑰

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ 주체 객체와 μ˜΅μ €λ²„ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μ •μ˜ν•˜λŠ” ꡬ쑰λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 이 ꡬ쑰λ₯Ό μ„€λͺ…ν•˜κΈ° μœ„ν•΄ 주체 객체와 μ˜΅μ €λ²„ 객체 μ‚¬μ΄μ˜ 관계 및 역할을 λ‹€μŒκ³Ό 같이 정리할 수 μžˆμŠ΅λ‹ˆλ‹€.

주체(Subject)

  • 주체 κ°μ²΄λŠ” μƒνƒœ λ³€ν™”λ₯Ό κ°μ§€ν•˜κ³ , λ³€ν™”κ°€ λ°œμƒν–ˆμ„ λ•Œ λ“±λ‘λœ μ˜΅μ €λ²„ κ°μ²΄λ“€μ—κ²Œ μ•Œλ¦Όμ„ μ „λ‹¬ν•˜λŠ” 주체 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” μ˜΅μ €λ²„λ“€μ„ 등둝, μ‚­μ œ, μ•Œλ¦Ό λ“±μ˜ 관리λ₯Ό λ‹΄λ‹Ήν•©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” 일반적으둜 ν•˜λ‚˜ μ΄μƒμ˜ μ˜΅μ €λ²„λ₯Ό 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜΅μ €λ²„(Observer)

  • μ˜΅μ €λ²„ κ°μ²΄λŠ” 주체 객체의 μƒνƒœ 변화에 λ”°λ₯Έ μ—…λ°μ΄νŠΈ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μ˜΅μ €λ²„ κ°μ²΄λŠ” 주체 객체에 λ“±λ‘λ˜μ–΄μ•Όλ§Œ μ•Œλ¦Όμ„ μˆ˜μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 주체 객체의 μƒνƒœ 변화에 λŒ€ν•œ μ•Œλ¦Όμ„ λ°›μœΌλ©΄, μ˜΅μ €λ²„ κ°μ²΄λŠ” ν•„μš”ν•œ λ™μž‘μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.

ꡬ쑰적 μš”μ†Œ

  • 주체 객체와 μ˜΅μ €λ²„ 객체 κ°„μ˜ κ΄€κ³„λŠ” μΌλŒ€λ‹€(1:N) κ΄€κ³„μž…λ‹ˆλ‹€. 즉, 주체 κ°μ²΄λŠ” μ—¬λŸ¬ 개의 μ˜΅μ €λ²„ 객체듀을 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 주체 객체와 μ˜΅μ €λ²„ κ°μ²΄λ“€μ˜ 결합은 느슨(weak)ν•œ κ²°ν•©μž…λ‹ˆλ‹€. μ΄λŠ” 주체 객체가 μ˜΅μ €λ²„μ— λŒ€ν•œ 세뢀사항을 μ•Œμ§€ λͺ»ν•˜κ³  였직 μ•Œλ¦Ό λ©”μ„œλ“œλ§Œ ν˜ΈμΆœν•˜λ―€λ‘œ μƒν˜Έκ°„μ˜ μ˜μ‘΄μ„±μ„ μ΅œμ†Œν™”ν•©λ‹ˆλ‹€.
  • 주체 객체와 μ˜΅μ €λ²„ κ°μ²΄λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 λ³„λ„λ‘œ μΆ”μƒν™”λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해 주체 객체와 μ˜΅μ €λ²„ 객체의 독립적인 λ³€ν™”λ₯Ό ν—ˆμš©ν•˜λ©°, μž¬μ‚¬μš©μ„±κ³Ό ν™•μž₯성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜΅μ €λ²„ νŒ¨ν„΄μ˜ κ΅¬μ‘°λŠ” 주체 객체와 μ˜΅μ €λ²„ 객체듀 μ‚¬μ΄μ˜ μƒν˜Έμž‘μš©μ„ λͺ…ν™•ν•˜κ²Œ μ •μ˜ν•˜κ³ , μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜λŠ”λ° 도움을 μ€λ‹ˆλ‹€.

3. μ˜΅μ €λ²„ νŒ¨ν„΄μ˜ μž₯점

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ 섀계할 λ•Œ λ‹€μŒκ³Ό 같은 μž₯점을 μ œκ³΅ν•©λ‹ˆλ‹€.

3.1 λŠμŠ¨ν•œ κ²°ν•©(Loose Coupling)

  • μ˜΅μ €λ²„ νŒ¨ν„΄μ€ 주체 객체와 μ˜΅μ €λ²„ 객체듀 μ‚¬μ΄μ˜ λŠμŠ¨ν•œ 결합을 κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” μ˜΅μ €λ²„ 객체의 μΈν„°νŽ˜μ΄μŠ€λ§Œ μ•Œκ³  있으며, μ˜΅μ €λ²„ 객체의 ꡬ체적인 κ΅¬ν˜„μ€ μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 주체 κ°μ²΄λ‚˜ μ˜΅μ €λ²„ 객체의 변경이 λ‹€λ₯Έ κ°μ²΄λ“€μ—κ²Œ 영ν–₯을 주지 μ•Šκ³  λ…λ¦½μ μœΌλ‘œ 진행될 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 결과적으둜 μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

3.2 이벀트 기반의 μƒν˜Έμž‘μš©(Event-driven interaction)

  • 주체 객체의 μƒνƒœ 변화에 따라 λ°œμƒν•˜λŠ” 이벀트λ₯Ό 기반으둜 μ˜΅μ €λ²„λ“€μ΄ μƒν˜Έμž‘μš©ν•©λ‹ˆλ‹€.
  • 이벀트 기반의 μƒν˜Έμž‘μš©μ€ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직의 λ³΅μž‘μ„±μ„ κ°„μ†Œν™”ν•˜κ³ , 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ λͺ…ν™•ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λ˜ν•œ, 이벀트 기반으둜 λ™μž‘ν•˜λŠ” μ‹œμŠ€ν…œμ€ ν™•μž₯성이 λ†’μ•„μ Έ 뢀가적인 μ΄λ²€νŠΈλ‚˜ λ™μž‘μ„ μΆ”κ°€ν•˜κΈ° μ‰¬μ›Œμ§‘λ‹ˆλ‹€.

3.3 ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±(Scalability and Maintainability)

  • 주체 객체와 μ˜΅μ €λ²„ 객체 κ°„μ˜ 독립성과 μž¬μ‚¬μš©μ„±μ„ μ œκ³΅ν•˜λŠ” μ˜΅μ €λ²„ νŒ¨ν„΄μ€ μ‹œμŠ€ν…œμ˜ ν™•μž₯μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.
  • μƒˆλ‘œμš΄ 주체 κ°μ²΄λ‚˜ μ˜΅μ €λ²„ 객체λ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ œκ±°ν•˜λŠ” 것이 비ꡐ적 κ°„λ‹¨ν•˜λ©°, κΈ°μ‘΄ μ½”λ“œμ˜ μˆ˜μ •μ΄ ν•„μš”ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
  • μ΄λŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„ μ΄‰μ§„ν•˜κ³ , μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±μ„ λ†’μ—¬ ν–₯ν›„ λ³€κ²½κ³Ό 변화에 λŒ€μ‘ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

3.4 이벀트 μ†ŒμŠ€ 뢄리(Event Source Separation)

  • μ˜΅μ €λ²„ νŒ¨ν„΄μ„ μ μš©ν•˜λ©΄ 이벀트λ₯Ό μƒμ„±ν•˜λŠ” 주체 객체와 ν•΄λ‹Ή 이벀트λ₯Ό μ²˜λ¦¬ν•˜λŠ” μ˜΅μ €λ²„ 객체듀을 λͺ…ν™•ν•˜κ²Œ 뢄리할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 주체 κ°μ²΄λŠ” μ£Όμš” λ‘œμ§μ— μ§‘μ€‘ν•˜κ³ , μ˜΅μ €λ²„ 객체듀은 각자의 역할에 집쀑할 수 μžˆμœΌλ―€λ‘œ μ½”λ“œμ˜ 가독성과 관리성을 ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€.

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•˜κ²Œ 섀계할 수 μžˆλ„λ‘ 도와주며, μ‹œμŠ€ν…œμ˜ μœ μ§€λ³΄μˆ˜μ„±κ³Ό μž¬μ‚¬μš©μ„±μ„ ν–₯μƒμ‹œν‚΅λ‹ˆλ‹€. λ”°λΌμ„œ 변화에 μ‰½κ²Œ λŒ€μ‘ν•  수 μžˆλŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ κ°œλ°œν•˜κΈ° μœ„ν•œ μ€‘μš”ν•œ λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€.

4. μ˜΅μ €λ²„ νŒ¨ν„΄μ˜ ν™œμš© μ˜ˆμ‹œ

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ λ‹€μ–‘ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ—μ„œ ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” μ˜΅μ €λ²„ νŒ¨ν„΄μ΄ μ–΄λ–€ μ‹€μ œ μƒν™©μ—μ„œ ν™œμš©λ  수 μžˆλŠ”μ§€ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

4.1 주식 정보 μ•Œλ¦Ό μ‹œμŠ€ν…œ

  • 주식 정보 μ•Œλ¦Ό μ‹œμŠ€ν…œμ€ μ—¬λŸ¬ μ‚¬μš©μžλ“€μ—κ²Œ 주식 가격 변동에 λŒ€ν•œ 정보λ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ μ „λ‹¬ν•˜λŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.
  • 이 경우, 주식 가격 변동은 주체 κ°μ²΄λ‘œμ„œ 역할을 μˆ˜ν–‰ν•˜κ³ , μ‚¬μš©μžλŠ” μ˜΅μ €λ²„ 객체둜 λ“±λ‘λ©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” 주식 가격 변동이 λ°œμƒν•  λ•Œλ§ˆλ‹€ λ“±λ‘λœ μ‚¬μš©μžλ“€μ—κ²Œ μ•Œλ¦Όμ„ μ „λ‹¬ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 주식 μ‹œμž₯의 변동성에 λŒ€ν•œ μ‹€μ‹œκ°„ 정보λ₯Ό μ‚¬μš©μžλ“€μ—κ²Œ μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4.2 κ²Œμ‹œνŒ μ‹œμŠ€ν…œ

  • κ²Œμ‹œνŒ μ‹œμŠ€ν…œμ€ μ—¬λŸ¬ μ‚¬μš©μžλ“€μ—κ²Œ κ²Œμ‹œκΈ€μ΄λ‚˜ λŒ“κΈ€ λ“±μ˜ μƒˆλ‘œμš΄ λ‚΄μš©μ΄ μΆ”κ°€λ˜μ—ˆμ„ λ•Œ μ•Œλ¦Όμ„ μ „λ‹¬ν•˜λŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.
  • μ‚¬μš©μžλŠ” μ˜΅μ €λ²„ 객체둜 λ“±λ‘λ˜κ³ , κ²Œμ‹œκΈ€μ΄λ‚˜ λŒ“κΈ€μ€ 주체 객체둜 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” μƒˆλ‘œμš΄ λ‚΄μš©μ΄ 좔가될 λ•Œλ§ˆλ‹€ λ“±λ‘λœ μ‚¬μš©μžλ“€μ—κ²Œ μ•Œλ¦Όμ„ μ „μ†‘ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ‚¬μš©μžλ“€μ€ 관심 μžˆλŠ” κ²Œμ‹œκΈ€μ˜ μ—…λ°μ΄νŠΈλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ λ°›μ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

4.3 온라인 μ‡Όν•‘λͺ° μž₯λ°”κ΅¬λ‹ˆ

  • 온라인 μ‡Όν•‘λͺ°μ˜ μž₯λ°”κ΅¬λ‹ˆλŠ” μƒν’ˆμ„ 담은 후에도 κ°€κ²©μ΄λ‚˜ 재고 λ“±μ˜ 변동이 λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž₯λ°”κ΅¬λ‹ˆλŠ” 주체 객체이고, μ‚¬μš©μžλŠ” μ˜΅μ €λ²„ 객체둜 λ“±λ‘λ©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” κ°€κ²©μ΄λ‚˜ 재고 λ“±μ˜ 변동이 λ°œμƒν•  λ•Œλ§ˆλ‹€ λ“±λ‘λœ μ‚¬μš©μžλ“€μ—κ²Œ μ•Œλ¦Όμ„ μ „μ†‘ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ‚¬μš©μžλ“€μ€ μž₯λ°”κ΅¬λ‹ˆμ˜ μƒνƒœλ₯Ό μ‹€μ‹œκ°„μœΌλ‘œ ν™•μΈν•˜κ³ , ν•„μš”ν•œ 쑰치λ₯Ό μ·¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4.4 ν‘Έμ‹œ μ•Œλ¦Ό μ„œλΉ„μŠ€

  • ν‘Έμ‹œ μ•Œλ¦Ό μ„œλΉ„μŠ€λŠ” λͺ¨λ°”일 μ•±μ΄λ‚˜ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μžμ—κ²Œ μ•Œλ¦Όμ„ μ „λ‹¬ν•˜λŠ” μ‹œμŠ€ν…œμž…λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” μ„œλ²„ λ˜λŠ” ν‘Έμ‹œ μ•Œλ¦Ό μ„œλΉ„μŠ€ 자체이고, μ‚¬μš©μžλŠ” μ˜΅μ €λ²„ 객체둜 λ“±λ‘λ©λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” μ•Œλ¦Όμ„ 전솑할 λ•Œλ§ˆλ‹€ λ“±λ‘λœ μ‚¬μš©μžλ“€μ—κ²Œ μ•Œλ¦Όμ„ μ „λ‹¬ν•©λ‹ˆλ‹€.
  • 이λ₯Ό 톡해 μ‚¬μš©μžλ“€μ€ μ›ν•˜λŠ” μ•Œλ¦Όμ„ μ‹€μ‹œκ°„μœΌλ‘œ λ°›μ•„λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ μ‚¬μš©μžμ—κ²Œ μ‹€μ‹œκ°„ 정보λ₯Ό μ „λ‹¬ν•˜κ±°λ‚˜ μ•Œλ¦Όμ„ μ œκ³΅ν•˜λŠ” λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 주체 객체와 μ˜΅μ €λ²„ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ 톡해 μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ κ°œλ°œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5. μ˜΅μ €λ²„ νŒ¨ν„΄κ³Ό κ΄€λ ¨λœ λ””μžμΈ νŒ¨ν„΄

μ˜΅μ €λ²„ νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄ 섀계 μ‹œ μœ μš©ν•˜κ²Œ ν™œμš©λ  수 μžˆλŠ” λ””μžμΈ νŒ¨ν„΄μž…λ‹ˆλ‹€. μ΄λ²ˆμ—λŠ” μ˜΅μ €λ²„ νŒ¨ν„΄κ³Ό κ΄€λ ¨λœ λͺ‡ 가지 λ””μžμΈ νŒ¨ν„΄μ„ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

5.1 퍼블리셔-κ΅¬λ…μž νŒ¨ν„΄(Publisher-Subscriber Pattern)

  • 퍼블리셔-κ΅¬λ…μž νŒ¨ν„΄μ€ μ˜΅μ €λ²„ νŒ¨ν„΄μ˜ λ³€ν˜•λœ ν˜•νƒœλ‘œ, ν•œ 주체 객체가 μ—¬λŸ¬ μ˜΅μ €λ²„ κ°μ²΄λ“€μ—κ²Œ 이벀트λ₯Ό λ°œν–‰(publish)ν•˜κ³ , ν•΄λ‹Ή 이벀트λ₯Ό ꡬ독(subscribe)ν•˜λŠ” ν˜•νƒœμž…λ‹ˆλ‹€.
  • 퍼블리셔 κ°μ²΄λŠ” 이벀트λ₯Ό λ°œν–‰ν•˜κ³ , κ΅¬λ…μž κ°μ²΄λŠ” ν•΄λ‹Ή 이벀트λ₯Ό κ΅¬λ…ν•˜μ—¬ λ™μž‘μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • 퍼블리셔-κ΅¬λ…μž νŒ¨ν„΄μ€ μ˜΅μ €λ²„ νŒ¨ν„΄κ³Ό λ§ˆμ°¬κ°€μ§€λ‘œ λŠμŠ¨ν•œ 결합을 μ œκ³΅ν•˜λ©°, 이벀트 기반 μƒν˜Έμž‘μš©μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.

5.2 μ€‘μž¬μž νŒ¨ν„΄(Mediator Pattern)

  • μ€‘μž¬μž νŒ¨ν„΄μ€ μ—¬λŸ¬ 객체 κ°„ λ³΅μž‘ν•œ μƒν˜Έμž‘μš©μ„ μ€‘μž¬ν•˜λŠ” μ€‘μž¬μž(Mediator) 객체λ₯Ό λ„μž…ν•˜μ—¬ 객체 κ°„μ˜ 직접적인 μƒν˜Έμž‘μš©μ„ μ œμ–΄ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.
  • μ€‘μž¬μž κ°μ²΄λŠ” 객체 κ°„μ˜ 톡신을 μ΄κ΄„ν•˜κ³ , 이벀트λ₯Ό λ°œν–‰ν•˜κ³  μˆ˜μ‹ ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μ€‘μž¬μž νŒ¨ν„΄μ€ μ˜΅μ €λ²„ νŒ¨ν„΄μ˜ κ°œλ…μ„ 톡해 λ³΅μž‘ν•œ 객체 κ°„ 톡신과 μ œμ–΄λ₯Ό λ‹¨μˆœν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5.3 MVC νŒ¨ν„΄(Model-View-Controller Pattern)

  • MVC νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό κ΅¬μ„±ν•˜λŠ” μ„Έ 가지 역할인 λͺ¨λΈ(Model), λ·°(View), 컨트둀러(Controller)둜 κ΅¬μ„±λ˜μ–΄ μžˆλŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.
  • λͺ¨λΈμ€ 데이터와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ²˜λ¦¬ν•˜λ©°, λ·°λŠ” μ‚¬μš©μžμ—κ²Œ μ‹œκ°μ μΈ ν‘œν˜„μ„ λ‹΄λ‹Ήν•˜κ³ , μ»¨νŠΈλ‘€λŸ¬λŠ” μ‚¬μš©μžμ˜ μž…λ ₯을 μ²˜λ¦¬ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μ˜΅μ €λ²„ νŒ¨ν„΄μ€ MVC νŒ¨ν„΄μ—μ„œ λͺ¨λΈκ³Ό λ·° κ°„μ˜ μƒν˜Έμž‘μš©μ„ κ°€λŠ₯ν•˜κ²Œ ν•©λ‹ˆλ‹€.
  • λͺ¨λΈμ˜ μƒνƒœ λ³€ν™”κ°€ λ°œμƒν•  λ•Œλ§ˆλ‹€ λ“±λ‘λœ λ·°λ“€μ—κ²Œ μ•Œλ¦Όμ„ μ „λ‹¬ν•˜μ—¬ λ°μ΄ν„°μ˜ λ³€ν™”λ₯Ό 화면에 κ°±μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

5.4 μ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄(Iterator Pattern)

  • μ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄μ€ μ»¬λ ‰μ…˜ 객체의 λ‚΄λΆ€ ꡬ쑰λ₯Ό λ…ΈμΆœν•˜μ§€ μ•Šκ³  μš”μ†Œλ“€μ„ 순차적으둜 μ ‘κ·Όν•  수 μžˆλŠ” 방법을 μ œκ³΅ν•˜λŠ” νŒ¨ν„΄μž…λ‹ˆλ‹€.
  • 주체 κ°μ²΄λŠ” μ˜΅μ €λ²„ 객체듀을 κ΄€λ¦¬ν•˜λŠ” μ»¬λ ‰μ…˜ 역할을 μˆ˜ν–‰ν•˜κ³ , μ˜΅μ €λ²„ 객체듀은 주체 객체의 μƒνƒœ 변화에 λŒ€μ‘ν•˜μ—¬ 순차적으둜 μž‘μ—…μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
  • μ΄ν„°λ ˆμ΄ν„° νŒ¨ν„΄κ³Ό μ˜΅μ €λ²„ νŒ¨ν„΄μ€ 객체 κ°„μ˜ λŠμŠ¨ν•œ 결합을 κ°€λŠ₯ν•˜κ²Œ ν•˜λ©°, μ»¬λ ‰μ…˜ 객체와 μ»¬λ ‰μ…˜μ„ μˆœνšŒν•˜λŠ” λ™μž‘μ„ λΆ„λ¦¬ν•˜μ—¬ μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ 섀계λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ˜΅μ €λ²„ νŒ¨ν„΄κ³Ό κ΄€λ ¨λœ λ””μžμΈ νŒ¨ν„΄λ“€μ€ 주체 객체와 μ˜΅μ €λ²„ 객체 κ°„μ˜ μƒν˜Έμž‘μš©μ„ 효과적으둜 λ‹€λ£° 수 μžˆλŠ” 방법을 μ œκ³΅ν•©λ‹ˆλ‹€. λ””μžμΈ νŒ¨ν„΄μ„ 적절히 μ‘°ν•©ν•˜λ©΄ λ”μš± μœ μ—°ν•˜κ³  ν™•μž₯ κ°€λŠ₯ν•œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ 섀계할 수 있으며, μ½”λ“œμ˜ 가독성과 μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€