본문으둜 κ±΄λ„ˆλ›°κΈ°

🌈 Chapter 4: μ—­ν• , μ±…μž„, ν˜‘λ ₯

  • 객체지ν–₯ μ„€κ³„μ˜ 전체적인 ν’ˆμ§ˆμ„ κ²°μ •ν•˜λŠ” 것은 κ°œλ³„ 객체의 ν’ˆμ§ˆμ΄ μ•„λ‹ˆλΌ μ—¬λŸ¬ 객체듀이 λͺ¨μ—¬ μ΄λ€„λ‚΄λŠ” ν˜‘λ ₯의 ν’ˆμ§ˆμ΄λ‹€.

✌ ν˜‘λ ₯​

🎈 μš”μ²­ν•˜κ³  μ‘λ‹΅ν•˜λ©° ν˜‘λ ₯ν•˜λŠ” μ‚¬λžŒλ“€β€‹

  • ν˜‘λ ₯은 ν•œ μ‚¬λžŒμ΄ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ 도움을 μš”μ²­ν•  λ•Œ μ‹œμž‘λœλ‹€. μš”μ²­μ„ 받은 μ‚¬λžŒμ€ 일을 μ²˜λ¦¬ν•œ ν›„ μš”μ²­ν•œ μ‚¬λžŒμ—κ²Œ ν•„μš”ν•œ μ§€μ‹μ΄λ‚˜ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•˜λŠ” 것을 μš”μ²­μœΌλ‘œ μ‘λ‹΅ν•œλ‹€.
  • ν˜‘λ ₯은 λ‹€μˆ˜μ˜ μš”μ²­κ³Ό μ‘λ‹΅μœΌλ‘œ κ΅¬μ„±λ˜λ©° μ „μ²΄μ μœΌλ‘œ ν˜‘λ ₯은 λ‹€μˆ˜μ˜ 연쇄적인 μš”μ²­κ³Ό μ‘λ‹΅μ˜ νλ¦„μœΌλ‘œ κ΅¬μ„±λœλ‹€.

✌ μ±…μž„β€‹

  • 객체지ν–₯의 μ„Έκ³„μ—μ„œλŠ” μ–΄λ–€ 객체가 μ–΄λ–€ μš”μ²­μ— λŒ€ν•΄ λŒ€λ‹΅ν•΄ 쀄 수 μžˆκ±°λ‚˜, μ μ ˆν•œ 행동을 ν•  μ˜λ¬΄κ°€ μžˆλŠ” 경우 ν•΄λ‹Ή 객체가 μ±…μž„μ„ 가진닀고 λ§ν•œλ‹€.
  • μ–΄λ–€ λŒ€μƒμ— λŒ€ν•΄ μš”μ²­μ€ κ·Έ λŒ€μƒμ΄ μš”μ²­μ„ μ²˜λ¦¬ν•  μ±…μž„μ΄ μžˆμŒμ„ μ•”μ‹œν•œλ‹€.
  • 객체지ν–₯ κ°œλ°œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λŠ₯λ ₯은 μ±…μž„μ„ λŠ₯μˆ™ν•˜κ²Œ μ†Œν”„νŠΈμ›¨μ–΄ 객체에 ν• λ‹Ήν•˜λŠ” 것이닀.
  • 객체와 μ±…μž„μ΄ 이리저리 λΆ€μœ ν•˜λŠ” μƒν™©μ—μ„œ μ„±κΈ‰ν•˜κ²Œ κ΅¬ν˜„μ— λ›°μ–΄λ“œλŠ” 것은 변경에 μ·¨μ•½ν•˜κ³  λ‹€μ–‘ν•œ ν˜‘λ ₯에 μ°Έμ—¬ν•  수 μ—†λŠ” λΉ„μžμœ¨μ μΈ 객체λ₯Ό λ‚³κ²Œ λœλ‹€.

🎈 μ±…μž„μ˜ λΆ„λ₯˜β€‹

  • ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체듀은 λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•˜λŠ” 데 ν•„μš”ν•œ μ±…μž„μ„ μˆ˜ν–‰ν•œλ‹€. μ±…μž„μ€ 객체에 μ˜ν•΄ μ •μ˜λ˜λŠ” 응집도 μžˆλŠ” ν–‰μœ„μ˜ μ§‘ν•©μœΌλ‘œ, 객체가 μ•Œμ•„μ•Ό ν•˜λŠ” 정보와 객체가 μˆ˜ν–‰ν•  수 μžˆλŠ” ν–‰μœ„μ— λŒ€ν•΄ 개랡적으둜 μ„œμˆ ν•œ λ¬Έμž₯이닀. 즉, 객체의 μ±…μž„μ€ 객체가 무엇을 μ•Œκ³  μžˆλŠ”κ°€μ™€ 무엇을 ν•  수 μžˆλŠ”κ°€λ‘œ κ΅¬μ„±λœλ‹€.
  • 객체의 μ±…μž„μ„ 크게 ν•˜λŠ” 것과 μ•„λŠ” κ²ƒμ˜ 두 가지 λ²”μ£Όλ‘œ μžμ„Ένžˆ λΆ„λ₯˜ν•˜κ³  μžˆλ‹€.
    • ν•˜λŠ” 것(doing)
      • 객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 계산을 ν•˜λŠ” λ“±μ˜ 슀슀둜 ν•˜λŠ” 것
      • λ‹€λ₯Έ 객체의 행동을 μ‹œμž‘μ‹œν‚€λŠ” 것
      • λ‹€λ₯Έ 객체의 ν™œλ™μ„ μ œμ–΄ν•˜κ³  μ‘°μ ˆν•˜λŠ” 것
    • μ•„λŠ” 것(knowing)
      • 개인적인 정보에 κ΄€ν•΄ μ•„λŠ” 것
      • κ΄€λ ¨λœ 객체에 κ΄€ν•΄ μ•„λŠ” 것
      • μžμ‹ μ΄ μœ λ„ν•˜κ±°λ‚˜ 계산할 수 μžˆλŠ” 것에 κ΄€ν•΄ μ•„λŠ” 것
  • 객체의 μ±…μž„μ„ 이야기할 λ•ŒλŠ” 일반적으둜 μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ 곡용 μ„œλΉ„μŠ€μ˜ κ΄€μ μ—μ„œ μ΄μ•ΌκΈ°ν•œλ‹€. 즉, μ±…μž„μ€ 객체의 외뢀에 μ œκ³΅ν•΄ 쀄 수 μžˆλŠ” 정보와 외뢀에 μ œκ³΅ν•΄ 쀄 수 μžˆλŠ” μ„œλΉ„μŠ€μ˜ λͺ©λ‘μ΄λ‹€. λ”°λΌμ„œ μ±…μž„μ€ 객체의 곡용 μΈν„°νŽ˜μ΄μŠ€(public interface)λ₯Ό κ΅¬μ„±ν•œλ‹€.

🎈 μ±…μž„κ³Ό λ©”μ‹œμ§€β€‹

  • ν•œ 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ μ „μ†‘ν•œ μš”μ²­μ€ κ·Έ μš”μ²­μ„ μˆ˜μ‹ ν•œ 객체의 μ±…μž„μ΄ μˆ˜ν–‰λ˜κ²Œ ν•œλ‹€. 이처럼 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ 주어진 μ±…μž„μ„ μˆ˜ν–‰ν•˜λ„λ‘ μš”μ²­μ„ λ³΄λ‚΄λŠ” 것을 λ©”μ‹œμ§€ 전솑(message-send)이라고 ν•œλ‹€. λ”°λΌμ„œ 두 객체 κ°„μ˜ ν˜‘λ ₯은 λ©”μ‹œμ§€λ₯Ό 톡해 이뀄진닀.
  • λ©”μ‹œμ§€λŠ” ν˜‘λŸ­μ„ μœ„ν•΄ ν•œ 객체가 λ‹€λ₯Έ 객체둜 μ ‘κ·Όν•  수 μžˆλŠ” μœ μΌν•œ 방법이닀.
  • μ±…μž„μ΄ ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯ μ†μ—μ„œ μš”μ²­μ„ μˆ˜μ‹ ν•˜λŠ” ν•œ μͺ½μ˜ 객체 κ΄€μ μ—μ„œ 무엇을 ν•  수 μžˆλŠ”μ§€λ₯Ό λ‚˜μ—΄ν•˜λŠ” 것이라면 λ©”μ‹œμ§€λŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 두 객체 μ‚¬μ΄μ˜ 관계λ₯Ό κ°•μ‘°ν•œ 것이닀.
  • ν•œ 가지 μ£Όμ˜ν•  점은 μ±…μž„κ³Ό λ©”μ‹œμ§€μ˜ μˆ˜μ€€μ΄ κ°™μ§€λŠ” μ•Šλ‹€λŠ” 점이닀. μ±…μž„μ€ 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” ν–‰μœ„λ₯Ό μƒμœ„ μˆ˜μ€€μ—μ„œ 개랡적으둜 μ„œμˆ ν•œ 것이닀. μ±…μž„μ„ κ²°μ •ν•œ ν›„ μ‹€μ œλ‘œ ν˜‘λ ₯을 μ •μ œν•˜λ©΄μ„œ 이λ₯Ό λ©”μ‹œμ§€λ‘œ λ³€ν™˜ν•  λ•ŒλŠ” ν•˜λ‚˜μ˜ μ±…μž„μ΄ μ—¬λŸ¬ λ©”μ‹œμ§€λ‘œ λΆ„ν• λ˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.
  • 객체지ν–₯ μ„€κ³„λŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 객체가 μ–΄λ–€ μ±…μž„μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜κ³  μ–΄λ–€ κ°μ²΄λ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  것인지λ₯Ό κ²°μ •ν•˜λŠ” κ²ƒμœΌλ‘œλΆ€ν„° μ‹œμž‘λœλ‹€.

✌ 역할​

🎈 μ±…μž„μ˜ 집합이 μ˜λ―Έν•˜λŠ” 것​

  • μ–΄λ–€ 객체가 μˆ˜ν–‰ν•˜λŠ” μ±…μž„μ˜ 집합은 객체가 ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” 역할을 μ•”μ‹œν•œλ‹€. μ΄λŸ¬ν•œ μ΄μœ λŠ” 역할이 μž¬μ‚¬μš© κ°€λŠ₯ν•˜κ³  μœ μ—°ν•œ 객체지ν–₯ 섀계λ₯Ό λ‚³λŠ” 맀우 μ€‘μš”ν•œ κ΅¬μ„±μš”μ†Œμ΄κΈ° λ•Œλ¬Έμ΄λ‹€.

🎈 역할이 닡이닀​

  • μ—­ν• (role)을 μ‚¬μš©ν•˜λ©΄ ν˜‘λ ₯을 λͺ¨λ‘ 포괄할 수 μžˆλŠ” ν•˜λ‚˜μ˜ ν˜‘λ ₯으둜 좔상화할 수 μžˆλ‹€.
  • 역할은 ν˜‘λ ₯ λ‚΄μ—μ„œ λ‹€λ₯Έ 객체둜 λŒ€μ²΄ν•  수 μžˆγ„·μŒμ„ λ‚˜νƒ€λ‚΄λŠ” μΌμ’…μ˜ ν‘œμ‹μ΄λ‹€. ν˜‘λ ₯ μ•ˆμ—μ„œ 역할은 "이 μžλ¦¬λŠ” ν•΄λ‹Ή 역할을 μˆ˜ν–‰ν•  수 μžˆλŠ” μ–΄λ–€ 객체라도 λŒ€μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€." 라고 λ§ν•˜λŠ” 것과 κ°™λ‹€.
  • 역할을 λŒ€μ²΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 각 역할이 μˆ˜μ‹ ν•  수 μžˆλŠ” λ©”μ‹œμ§€λ₯Ό λ™μΌν•œ λ°©μ‹μœΌλ‘œ 이해해야 ν•œλ‹€. λ”°λΌμ„œ 역할을 λŒ€μ²΄ν•  수 μžˆλŠ” κ°μ²΄λŠ” λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό 이해할 수 μžˆλŠ” 객체둜 ν•œμ •λœλ‹€.
  • λ™μΌν•œ 역할을 μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것은 ν•΄λ‹Ή 객체듀이 ν˜‘λ ₯ λ‚΄μ—μ„œ λ™μΌν•œ μ±…μž„μ˜ 집합을 μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 객체듀이 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  수 있기 λ•Œλ¬Έμ— λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€λŠ” 것은 맀우 μ€‘μš”ν•œ κ°œλ…μ΄λ‹€.
  • μ—­ν• μ˜ κ°œλ…μ„ μ‚¬μš©ν•˜λ©΄ μœ μ‚¬ν•œ ν˜‘λ ₯을 μΆ”μƒν™”ν•΄μ„œ 인지 κ³ΌλΆ€ν™”λ₯Ό 쀄일 수 μžˆλ‹€. λ˜ν•œ λ‹€μ–‘ν•œ 객체듀이 ν˜‘λ ₯에 μ°Έμ—¬ν•  수 있기 λ•Œλ¬Έμ— ν˜‘λ ₯이 μ’€ 더 μœ μ—°ν•΄μ§€λ©° λ‹€μ–‘ν•œ 객체듀이 λ™μΌν•œ ν˜‘λ ₯에 μ°Έμ—¬ν•  수 있기 λ•Œλ¬Έμ— μž¬μ‚¬μš©μ„±μ΄ 높아진닀.
  • 역할은 객체지ν–₯ μ„€κ³„μ˜ λ‹¨μˆœμ„±(simplicity), μœ μ—°μ„±(flexibility), μž¬μ‚¬μš©μ„±(reusability)을 λ’·λ°›μΉ¨ν•˜λŠ” 핡심 κ°œλ…μ΄λ‹€.

🎈 ν˜‘λ ₯의 좔상화​

  • μ—­ν• μ˜ κ°€μž₯ 큰 κ°€μΉ˜λŠ” ν•˜λ‚˜μ˜ ν˜‘λ ₯ μ•ˆμ— μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체가 μ°Έμ—¬ν•  수 있게 ν•¨μœΌλ‘œμ¨ ν˜‘λ ₯을 좔상화할 수 μžˆλ‹€λŠ” 것이닀.
  • ν˜‘λ ₯의 μΆ”μƒν™”λŠ” μ„€κ³„μžκ°€ 닀뀄야 ν•˜λŠ” ν˜‘λ ₯의 개수λ₯Ό μ€„μ΄λŠ” λ™μ‹œμ— ꡬ체적인 객체λ₯Ό 좔상적인 μ—­ν• λ‘œ λŒ€μ²΄ν•¨μœΌλ‘œμ¨ ν˜‘λ ₯의 양상을 λ‹¨μˆœν™”ν•œλ‹€. 결과적으둜 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„€κ²Œλ₯Ό μ΄ν•΄ν•˜κ³  κΈ°μ–΅ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€.

🎈 λŒ€μ²΄ κ°€λŠ₯성​

  • 역할은 ν˜‘λ ₯ μ•ˆμ—μ„œ ꡬ체적인 객체둜 λŒ€μ²΄λ  수 μžˆλŠ” 좔상적인 ν˜‘λ ₯μžλ‹€. λ”°λΌμ„œ 본질적으둜 역할은 λ‹€λ₯Έ 객체에 μ˜ν•΄ λŒ€μ²΄ κ°€λŠ₯함을 μ˜λ―Έν•œλ‹€. 객체가 역할을 λŒ€μ²΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” 행동이 ν˜Έν™˜λΌμ•Ό ν•œλ‹€.
  • 객체가 역할을 λŒ€μ²΄ κ°€λŠ₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” ν˜‘λ ₯ μ•ˆμ—μ„œ 역할이 μˆ˜ν–‰ν•˜λŠ” λͺ¨λ“  μ±…μž„μ„ λ™μΌν•˜κ²Œ μˆ˜ν–‰ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.
  • κ°μ²΄λŠ” 역할이 μ•”μ‹œν•˜λŠ” μ±…μž„λ³΄λ‹€ 더 λ§Žμ€ μ±…μž„μ„ κ°€μ§ˆ 수 μžˆλ‹€. λ”°λΌμ„œ λŒ€λΆ€λΆ„μ˜ κ²½μš°μ— 객체의 νƒ€μž…κ³Ό μ—­ν•  μ‚¬μ΄μ—λŠ” μΌλ°˜ν™”/νŠΉμˆ˜ν™” 관계가 μ„±λ¦½ν•˜λŠ” 것이 μΌλ°˜μ μ΄λ‹€.
  • μ—­ν• μ˜ λŒ€μ²΄ κ°€λŠ₯성은 ν–‰μœ„ ν˜Έν™˜μ„±μ„ μ˜λ―Έν•˜κ³ , ν–‰μœ„ ν˜Έν™˜μ„±μ€ λ™μΌν•œ μ±…μž„μ˜ μˆ˜ν–‰μ„ μ˜λ―Έν•œλ‹€.

✌ 객체의 λ¬˜μ–‘μ„ κ²°μ •ν•˜λŠ” ν˜‘λ ₯​

🎈 ν”ν•œ 였λ₯˜β€‹

  • 객체가 μ‘΄μž¬ν•˜λŠ” μ΄μœ λŠ” ν–‰μœ„λ₯Ό μˆ˜ν–‰ν•˜λ©° ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄μ„œλ‹€. λ”°λΌμ„œ μ‹€μ œλ‘œ μ€‘μš”ν•œ 것은 객체의 행동, 즉 μ±…μž„μ΄λ‹€.
  • 정적인 ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλΌ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 동적인 객체이며, ν΄λž˜μŠ€λŠ” 단지 μ‹œμŠ€ν…œμ— ν•„μš”ν•œ 객체λ₯Ό ν‘œν˜„ν•˜κ³  μƒμ„±ν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ” κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜μ΄λΌλŠ” 사싀이닀.
  • 객체지ν–₯의 핡심은 클래슀λ₯Ό μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  것인가가 μ•„λ‹ˆλΌ 객체가 ν˜‘λ ₯ μ•ˆμ—μ„œ μ–΄λ–€ μ±…μž„κ³Ό 역할을 μˆ˜ν–‰ν•  것인지λ₯Ό κ²°μ •ν•˜λŠ” 것이닀.

🎈 ν˜‘λ ₯을 따라 흐λ₯΄λŠ” 객체의 μ±…μž„β€‹

  • ν˜‘λ ₯을 μ„€κ³„ν•œλ‹€λŠ” 것은 섀계에 μ°Έμ—¬ν•˜λŠ” 객체듀이 주고받을 μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름을 κ²°μ •ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. μ΄λ ‡κ²Œ κ²°μ •λœ μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름은 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰λ  μ±…μž„μ΄ λœλ‹€.
  • 일단 κ°μ²΄μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜κ³  λ‚˜λ©΄ μ±…μž„μ€ 객체가 외뢀에 μ œκ³΅ν•˜κ²Œ 될 행동이 λœλ‹€. 행동을 κ²°μ •ν•œ 후에 κ·Έ 행동을 μˆ˜ν–‰ν•˜λŠ” 데 ν•„μš”ν•œ 데이터λ₯Ό κ³ λ―Όν•΄μ•Ό ν•œλ‹€. 그리고 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 데이터와 행동이 μ–΄λŠ 정도 κ²°μ •λœ 후에 클래슀의 κ΅¬ν˜„ 방법을 κ²°μ •ν•΄μ•Ό ν•œλ‹€.
  • 객체지ν–₯ μ‹œμŠ€ν…œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 것은 μΆ©λΆ„νžˆ 자율적인 λ™μ‹œμ— μΆ©λΆ„νžˆ ν˜‘λ ₯적인 객체λ₯Ό μ°½μ‘°ν•˜λŠ” 것이닀. 이 λͺ©ν‘œλ₯Ό 달성할 수 μžˆλŠ” κ°€μž₯ μ‰¬μš΄ 방법은 객체λ₯Ό μΆ©λΆ„νžˆ ν˜‘λ ₯적으둜 λ§Œλ“  후에ㅔ ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯ μ•ˆμ—μ„œ 객체λ₯Ό μΆ©λΆ„νžˆ 자율적으둜 λ§Œλ“œλŠ” 것이닀.

✌ 객체지ν–₯ 섀계 기법​

🎈 μ±…μž„-주도 섀계​

  • 객체지ν–₯ μ„€κ³„λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ ν˜‘λ ₯ 관계λ₯Ό κ³ μ•ˆν•˜κ³ , ν˜‘λ ₯에 ν•„μš”ν•œ μ—­ν• κ³Ό μ±…μž„μ„ μ‹λ³„ν•œ ν›„ 이λ₯Ό μˆ˜ν–‰ν•  수 μžˆλŠ” μ μ ˆν•œ 객체λ₯Ό 식별해 λ‚˜κ°€λŠ” 과정이닀.
  • 객체지ν–₯ μ„€κ³„μ˜ 핡심은 μ˜¬λ°”λ₯Έ μ±…μž„μ„ μ˜¬λ°”λ₯Έ 객체에 ν• λ‹Ήν•˜λŠ” 것이닀. 이λ₯Ό μœ„ν•΄μ„œλŠ” 전체 개발 단계에 걸쳐 객체의 μ—­ν• κ³Ό μ±…μž„, ν˜‘λ ₯을 λ„λ“œλΌμ§€κ²Œ λ§Œλ“œλŠ” 기법과 체계λ₯Ό λ”°λ₯΄λŠ” 것이 μ€‘μš”ν•˜λ‹€.
  • μ±…μž„-주도 μ„€κ³„λŠ” 말 κ·ΈλŒ€λ‘œ 객체의 μ±…μž„μ„ μ€‘μ‹¬μœΌλ‘œ μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 섀계 방법을 λ§ν•œλ‹€.
  • μ‹œμŠ€ν…œμ˜ κΈ°λŠ₯은 더 μž‘μ€ 규λͺ¨μ˜ μ±…μž„μœΌλ‘œ λΆ„ν• λ˜κ³  각 μ±…μž„μ€ μ±…μž„μ„ μˆ˜ν–‰ν•  μ μ ˆν•œ κ°μ²΄μ—κ²Œ ν• λ‹Ήλœλ‹€.
  • 객체가 μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 도쀑에 슀슀둜 μ²˜λ¦¬ν•  수 μ—†λŠ” μ •λ³΄λ‚˜ κΈ°λŠ₯이 ν•„μš”ν•œ 경우 μ μ ˆν•œ 객체λ₯Ό μ°Ύμ•„ ν•„μš”ν•œ μž‘μ—…μ„ μš”μ²­ν•˜κ³  μš”μ²­λœ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” 일은 이제 μž‘μ—…μ„ μœ„μž„λ°›λŠ” 객체의 μ±…μž„μœΌλ‘œ λ³€ν™˜λœλ‹€. 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ μž‘μ—…μ„ μš”μ²­ν•˜λŠ” ν–‰μœ„λ₯Ό 톡해 결과적으둜 객체듀 κ°„μ˜ ν˜‘λ ₯ 관계가 λ§Œλ“€μ–΄μ§„λ‹€.
  • μ±…μž„-주도 μ„€κ³„μ—μ„œλŠ” μ‹œμŠ€ν…œμ˜ μ±…μž„μ„ 객체의 μ±…μž„μœΌλ‘œ λ³€ν™˜ν•˜κ³ , 각 객체가 μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 쀑에 ν•„μš”ν•œ μ •λ³΄λ‚˜ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•΄μ€„ ν˜‘λ ₯자λ₯Ό μ°Ύμ•„ ν•΄λ‹Ή ν˜‘λ ₯μžμ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” 순차적인 λ°©μ‹μœΌλ‘œ κ°μ²΄λ“€μ˜ ν˜‘λ ₯ 곡동체λ₯Ό κ΅¬μΆ•ν•œλ‹€.
  • μ±…μž„-주도 μ„€κ³„λŠ” κ°œλ³„μ μΈ 객체의 μƒνƒœκ°€ μ•„λ‹ˆλΌ 객체의 μ±…μž„κ³Ό μƒν˜Έμž‘μš©μ— μ§‘μ€‘ν•œλ‹€.
  • 결과적으둜 μ‹œμŠ€ν…œμ€ 슀슀둜 μžμ‹ μ„ μ±…μž„μ§ˆ 수 μžˆλŠ” μ •λ„λ‘œ μΆ©λΆ„νžˆ 자율적인 λ™μ‹œμ— λ‹€λ₯Έ 객체와 우호적으둜 ν˜‘λ ₯ν•  수 μžˆμ„ μ •λ„λ‘œ μΆ©λΆ„νžˆ ν˜‘μ‘°μ μΈ κ°μ²΄λ“€λ‘œ 이뀄진 μƒνƒœκ³„λ₯Ό κ΅¬μ„±ν•˜κ²Œ λœλ‹€.
  • ν˜‘μ‘°μ μ΄κ³  μ„±μ‹€ν•œ 객체 μ‹œλ―Όλ“€λ‘œ κ΅¬μ„±λœ 객체지ν–₯ μ‹œμŠ½λ©”μ„ μ„€κ³„ν•˜λŠ” μ ˆμ°¨λŠ” λ‹€μŒκ³Ό κ°™λ‹€.
    • μ‹œμŠ€ν…œμ΄ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•΄μ•Ό ν•˜λŠ” κΈ°λŠ₯이 μ‹œμŠ€ν…œ μ±…μž„μ„ νŒŒμ•…ν•œλ‹€.
    • μ‹œμŠ€ν…œ μ±…μž„μ„ 더 μž‘μ€ μ±…μž„μœΌλ‘œ λΆ„ν• ν•œλ‹€.
    • λΆ„ν• λœ μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” μ μ ˆν•œ 객체 λ˜λŠ” 역할을 μ°Ύμ•„ μ±…μž„μ„ ν• λ‹Ήν•œλ‹€.
    • 객체가 μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 쀑에 λ‹€λ₯Έ 객체의 도움이 ν•„μš”ν•œ 경우 이λ₯Ό μ±…μž„μ§ˆ μ μ ˆν•œ 객체 λ˜”λŠ 역할을 μ°ΎλŠ”λ‹€.
    • ν•΄λ‹Ή 객체 λ˜λŠ” μ—­ν• μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•¨μœΌλ‘œμ¨ 두 객체가 ν˜‘λ ₯ν•˜κ²Œ λœλ‹€.

🎈 λ””μžμΈ νŒ¨ν„΄β€‹

  • λ””μžμΈ νŒ¨ν„΄μ€ μ±…μž„-주도 μ„€κ³„μ˜ κ²°κ³Όλ₯Ό ν‘œν˜„ν•œλ‹€. νŒ¨ν„΄μ€ λͺ¨λ²”이 λ˜λŠ” 섀계닀.
  • νŒ¨ν„΄μ€ ν•΄κ²°ν•˜λ €κ³  ν•˜λŠ” λ¬Έμ œκ°€ 무엇인지λ₯Ό λͺ…ν™•ν•˜κ²Œ μ„œμˆ ν•˜κ³ , νŒ¨ν„΄μ„ μ μš©ν•  수 μžˆλŠ” 상황과 μ μš©ν•  수 μ—†λŠ” 상황을 ν•¨κ»˜ μ„€λͺ…ν•œλ‹€. νŒ¨ν„΄μ€ λ°˜λ΄…γ„±ν•΄μ„œ μΌμ–΄λ‚˜λŠ” νŠΉμ •ν•œ μƒν™©μ—μ„œ μ–΄λ–€ 섀계과 μ™œ 더 νš¨κ³Όμ μΈμ§€μ— λŒ€ν•œ 이유λ₯Ό μ„€λͺ…ν•œλ‹€.

🎈 ν…ŒμŠ€νŠΈ-주도 κ°œλ°œβ€‹

  • ν…ŒμŠ€νŠΈ-주도 개발의 κΈ°λ³Έ 흐름은 μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³ , ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•œ ν›„, λ¦¬νŒ©ν„°λ§μ„ 톡해 쀑볡을 μ œκ±°ν•˜λŠ” 것이닀.
  • ν…ŒμŠ€νŠΈ-주도 κ°œλ°œμ„ 톡해 μž‘λ™ν•˜λŠ” κΉ”λ”ν•œ μ½”λ“œλ₯Ό 얻을 수 μžˆλ‹€.
  • ν…ŒμŠ€νŠΈ-주도 κ°œλ°œμ€ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ±…μž„μ„ μˆ˜ν–‰ν•  객체 λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ κΈ°λŒ€ν•˜λŠ” 객체의 역할이 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  λ•Œ μ–΄λ–€ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κ³  κ·Έ κ³Όμ •μ—μ„œ μ–΄λ–€ 객체와 ν˜‘λ ₯ν•  것인지에 λŒ€ν•΄ κΈ°λŒ€λ₯Ό μ½”λ“œμ˜ ν˜•νƒœλ‘œ μž‘μ„±ν•˜λŠ” 것이닀.
  • ν…ŒμŠ€νŠΈ-주도 κ°œλ°œμ€ μ±…μž„-주도 섀계λ₯Ό 톡해 도달해야 ν•˜λŠ” λͺ©μ μ§€λ₯Ό ν…ŒμŠ€νŠΈλΌλŠ” μ•ˆμ „μž₯치λ₯Ό 톡해 μ’€ 더 λΉ λ₯΄κ³  κ²¬κ³ ν•œ λ°©λ²•μœΌλ‘œλ„λ‹¬ν•  수 μžˆλ„λ‘ ν•΄μ£ΌλŠ” μ΅œμƒμ˜ 섀계 ν”„λž™ν‹±μŠ€λ‹€.