λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
λ„μ„œ πŸ“š/πŸ“— 객체지ν–₯의 사싀과 μ˜€ν•΄

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

by dev_writer 2023. 11. 5.

μ„œλ¬Έ

전톡적인 κ²½μ œν•™ > 인간은 이기적이며 합리적인 행동을 ν•œλ‹€.

 

μ‹€μ œ μ‹€ν—˜ κ²°κ³Ό > 인간은 이기적이며 합리적인 행동을 ν•˜μ§€λ§Œ, λ‹€λ₯Έ μ‚¬λžŒλ“€κ³Όμ˜ 관계λ₯Ό λ§ΊλŠ” κ³Όμ • μ†μ—μ„œ 인간은 λ³Έμ—°μ˜ νŠΉμ„±μ„ λ°°μ œν•˜κ³  μžμ‹ μ˜ 이읡을 μ΅œμ†Œν™”ν•˜λŠ” λΆˆν•©λ¦¬ν•œ 선택을 ν•œλ‹€.

 

즉 μ€‘μš”ν•œ κ²ƒμ€ μΈκ°„ λ³Έμ—°μ˜ νŠΉμ„±μ΄ μ•„λ‹ˆλΌ μΈκ°„이 μ²˜ν•œ ν™˜κ²½ (νƒ€μΈκ³Όμ˜ ν˜‘λ ₯)이닀.

객체지ν–₯의 μ„Έκ³„μ—μ„œλ„ ν˜‘λ ₯이 객체의 행동 방식을 κ²°μ •ν•œλ‹€. μ€‘μš”ν•œ 것은 객체듀 간에 μ΄λ€„μ§€λŠ” ν˜‘λ ₯이닀.


ν˜‘λ ₯

μ‹€μ œ μƒν™©μ—μ„œμ˜ ν˜‘λ ₯은 λ‹€μŒκ³Ό κ°™λ‹€.

- ν˜‘λ ₯은 ν•œ μ‚¬λžŒμ΄ λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ μš”μ²­ν•  λ•Œ λ°œμƒν•˜κ²Œ λœλ‹€.
- μš”μ²­μ„ 받은 μ‚¬λžŒμ€ μžμ‹ μ˜ λ°©μ‹μœΌλ‘œ μ‘λ‹΅ν•˜κ²Œ λœλ‹€.
- μ΄λ•Œ μš”μ²­μ„ 받은 μ‚¬λžŒμ€ μžμ‹  말고도 λ‹€λ₯Έ μ‚¬λžŒμ„ ν•„μš”λ‘œ ν•  μˆ˜λ„ μžˆλ‹€. κ·Έλ•ŒλŠ” κ·Έ μ‚¬λžŒμ—κ²Œλ„ μƒˆλ‘œμš΄ μš”μ²­μ΄ μ „λ‹¬λœλ‹€.
- 즉 ν˜‘λ ₯은 μš”μ²­κ³Ό 응닡이 μ—°μ‡„μ μœΌλ‘œ λ°œμƒν•œλ‹€.

 

μ•¨λ¦¬μŠ€ μ„Έκ³„μ—μ„œμ˜ ν˜‘λ ₯ 과정도 λ‹€μŒκ³Ό κ°™λ‹€.

 

- λˆ„κ΅°κ°€κ°€ μ™•μ—κ²Œ μž¬νŒμ„ μš”μ²­ν–ˆλ‹€. μ™•μ—κ²Œ μš”μ²­ν•œ μ΄μœ λŠ” 왕이 μž¬νŒμ„ μˆ˜ν–‰ν•  μ˜λ¬΄κ°€ 있으며, μž¬νŒμ— ν•„μš”ν•œ 지식이 있기 λ•Œλ¬Έμ΄λ‹€.
- 왕이 ν•˜μ–€ ν† λΌμ—κ²Œ λͺ©κ²©μžλ₯Ό 뢈러였라고 μš”μ²­ν–ˆλ‹€. ν† λΌμ—κ²Œ μš”μ²­ν•œ μ΄μœ λŠ” λͺ©κ²©μžμ— λŒ€ν•΄ μ•Œκ³  있으며 λͺ©κ²©μžλ₯Ό λΆ€λ₯Ό μ˜λ¬΄κ°€ 있기 λ•Œλ¬Έμ΄λ‹€.
- 왕이 λͺ¨μž μž₯μˆ˜μ—κ²Œ μ¦μ–Έν•˜λΌκ³  μš”μ²­ν–ˆλ‹€. λͺ¨μž μž₯μˆ˜μ—κ²Œ μš”μ²­ν•œ μ΄μœ λŠ” μž¬νŒμ— 도움이 될 λ§Œν•  지식을 가지고 있으며 증언할 μ˜λ¬΄κ°€ 있기 λ•Œλ¬Έμ΄λ‹€.

 

κ²°κ΅­ μ–΄λ–€ 객체듀이 νŠΉμ •ν•œ μš”μ²­μ„ 받아듀일 수 μžˆλŠ” μ΄μœ λŠ” κ·Έ μš”μ²­μ— λŒ€ν•΄ μ μ ˆν•œ λ°©μ‹μœΌλ‘œ μ‘λ‹΅ν•˜λŠ” 데 ν•„μš”ν•œ 지식과 행동 방식을 가지고 있기 λ•Œλ¬Έμ΄λ©°, μš”μ²­κ³Ό 응닡은 ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체가 μˆ˜ν–‰ν•  μ±…μž„μ„ μ •μ˜ν•œλ‹€.


μ±…μž„

객체지ν–₯ κ°œλ°œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λŠ₯λ ₯은 μ±…μž„μ„ λŠ₯μˆ™ν•˜κ²Œ μ†Œν”„νŠΈμ›¨μ–΄ 객체에 ν• λ‹Ήν•˜λŠ” 것이닀 - 크레이그 라만 (Craig Larman)

 

 

객체의 μ±…μž„μ€ 객체가 무엇을 μ•Œκ³  μžˆλŠ”κ°€μ™€ 무엇을 ν•  수 μžˆλŠ”κ°€λ‘œ κ΅¬μ„±λœλ‹€. 일반적으둜 객체의 μ±…μž„μ€ μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•œ 곡용 μ„œλΉ„μŠ€μ˜ κ΄€μ μ—μ„œ μ΄μ•ΌκΈ°ν•˜κΈ°μ—, μ±…μž„μ€ 객체의 곡용 μΈν„°νŽ˜μ΄μŠ€ (public interface)λ₯Ό κ΅¬μ„±ν•œλ‹€.

1μž₯: ν˜‘λ ₯ν•˜λŠ” κ°μ²΄λ“€μ˜ κ³΅λ™μ²΄μ—μ„œ μž‘μ„±ν•˜μ˜€λ“―μ΄, 객체지ν–₯ μ„€κ³„λΌλŠ” μ˜ˆμˆ μ€ μ μ ˆν•œ κ°μ²΄μ—κ²Œ μ μ ˆν•œ μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” κ²ƒμ—μ„œ μ‹œμž‘λ˜λ©°, μ±…μž„μ€ 객체지ν–₯ μ„€κ³„μ˜ ν’ˆμ§ˆμ„ κ²°μ •ν•˜λŠ” κ°€μž₯ μ€‘μš”ν•œ μš”μ†Œλ‹€.

μ±…μž„μ€ μš”μ²­μ„ μˆ˜μ‹ ν•˜λŠ” ν•œμͺ½ 객체 κ΄€μ μ—μ„œ 무엇을 ν•  수 μžˆλŠ”μ§€λ₯Ό λ‚˜νƒ€λ‚Έ 것이닀.

λ©”μ‹œμ§€λŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 두 객체 μ‚¬μ΄μ˜ 관계λ₯Ό κ°•μ‘°ν•œ 것이닀.

λ”°λΌμ„œ κ°μ²΄μ§€ν–₯ μ„€κ³„λŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ κ°μ²΄κ°€ μ–΄λ–€ μ±…μž„μ„ μˆ˜ν–‰ν•΄μ•Ό ν•˜κ³  μ–΄λ–€ κ°μ²΄λ‘œλΆ€ν„° λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  κ²ƒμΈμ§€λ₯Ό κ²°μ •ν•˜λŠ” κ²ƒμœΌλ‘œλΆ€ν„° μ‹œμž‘λœλ‹€.


μ—­ν• 

역할은 μž¬μ‚¬μš© κ°€λŠ₯ν•˜κ³  μœ μ—°ν•œ 객체지ν–₯ 섀계가 λ˜λ„λ‘ ν•˜λŠ” μš”μ†Œμ΄λ‹€.

왕을 νŒμ‚¬λΌκ³  λΆ€λ₯΄κ³  λͺ¨μž μž₯수λ₯Ό μ¦μΈμœΌλ‘œ λΆ€λ₯΄λŠ” μ΄μœ λŠ” μ™•κ³Ό λͺ¨μž μž₯μˆ˜κ°€ μ•„λ‹Œ κ°μ²΄λ“€μ΄ κ·Έ μ—­ν• μ„ λŒ€μ²΄ν•¨μœΌλ‘œμ¨ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ„€κ³„κ°€ λ  μˆ˜ μžˆκΈ° λ•Œλ¬Έμ΄λ‹€.

λ”°λΌμ„œ, 역할은 ν˜‘λ ₯ λ‚΄μ—μ„œ λ‹€λ₯Έ 객체둜 λŒ€μ²΄ν•  수 μžˆμŒμ„ λ‚˜νƒ€λ‚΄λŠ” μΌμ’…μ˜ ν‘œμ‹μ΄λ‹€.

μ΄λ•Œ 역할을 λŒ€μ²΄ν•  수 μžˆλŠ” κ°μ²΄λŠ” λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό 이해할 수 μžˆλŠ” 객체둜 ν•œμ •λœλ‹€.

 

μ™•μ—μ„œ μ—¬μ™•μœΌλ‘œ νŒμ‚¬κ°€ 변경될 수 μžˆλŠ” μ΄μœ λŠ” 여왕이 μ™•κ³Ό 같이 μž¬νŒν•˜λΌλŠ” λ©”μ‹œμ§€λ₯Ό 이해할 수 있기 λ•Œλ¬Έμ΄λ‹€.

 

역할을 μ‚¬μš©ν•˜λ©΄ μœ μ‚¬ν•œ ν˜‘λ ₯을 μΆ”μƒν™”ν•˜μ—¬ μΈμ§€ κ³ΌλΆ€ν•˜λ₯Ό μ€„일 μˆ˜ μžˆκ³ , λ‹€μ–‘ν•œ κ°μ²΄λ“€μ„ μ‚¬μš©ν•  μˆ˜ μžˆμ–΄ μž¬μ‚¬μš©μ„±μ΄ μ¦κ°€ν•œλ‹€. ν˜‘λ ₯의 μΆ”μƒν™”λŠ” κ³§ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ„€κ³„λ₯Ό μ΄ν•΄ν•˜κ³  κΈ°μ–΅ν•˜κΈ° μ‰½κ²Œ λ§Œλ“ λ‹€. μ΄λŠ” κ°μ²΄μ§€ν–₯만의 νž˜μ΄λ‹€.

κ°μ²΄λŠ” μ—­ν• μ— μ£Όμ–΄μ§„ μ±…μž„ μ΄μ™Έμ— λ‹€λ₯Έ μ±…μž„μ„ μˆ˜ν–‰ν•  μˆ˜λ„ μžˆλ‹€. λͺ¨μž μž₯μˆ˜λŠ” λ³Έλž˜μ˜ λͺ¨μžλ₯Ό νŒλ§€ν•  μ±…μž„μ€ μž μ‹œ μ œμ™Έν•˜κ³  μ¦μ–Έν•  μ±…μž„μ„ λ§‘μ•˜λ‹€.

μ—­ν• μ˜ λŒ€μ²΄ κ°€λŠ₯성은 ν–‰μœ„ ν˜Έν™˜μ„±μ„ μ˜λ―Έν•˜λ©° ν–‰μœ„ ν˜Έν™˜μ„±μ€ λ™μΌν•œ μ±…μž„μ˜ μˆ˜ν–‰μ„ μ˜λ―Έν•œλ‹€!


객체의 λͺ¨μ–‘을 κ²°μ •ν•˜λŠ” ν˜‘λ ₯

λ°μ΄ν„°λŠ” λ‹¨μ§€ κ°μ²΄κ°€ ν–‰μœ„ (μ±…μž„)λ₯Ό μˆ˜ν–‰ν•˜λŠ” λ° ν•„μš”ν•œ μž¬λ£Œλ“€μΌλΏμ΄λ‹€. λ”°λΌμ„œ λ°μ΄ν„°λ₯Ό μ€‘μ μ μœΌλ‘œ κ°μ²΄μ§€ν–₯을 μ„€κ³„ν•˜λŠ” κ²ƒμ€ μ˜³μ§€ λͺ»ν•˜λ‹€.

클래슀λ₯Ό μ€‘μ μ μœΌλ‘œ κ°μ²΄μ§€ν–₯을 μ„€κ³„ν•˜λŠ” κ²ƒ λ˜ν•œ μ˜³μ§€ μ•Šλ‹€. μ•¨λ¦¬μŠ€ μ„Έκ³„μ—μ„œμ˜ μ™•μ€ ν˜„μ‹€μ˜ μ™•κ³Ό λ‹€λ₯΄κ²Œ κ·Όμ—„ν•˜κ³  μœ„μ—„ μžˆμ„ ν•„μš”κ°€ μ—†λ‹€. ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μœ„ν•œ κ²ƒλ§Œ κ°€μ§€κ³  μžˆμœΌλ©΄ μΆ©λΆ„ν•˜λ‹€. λ”°λΌμ„œ κ°μ²΄κ°€ μ°Έμ—¬ν•˜λŠ” ν˜‘λ ₯을 λ¨Όμ € μ„€κ³„ν•΄μ•Ό ν•œλ‹€.

μ˜¬λ°”λ₯Έ κ°μ²΄ μ„€κ³„ λ°©λ²•μ€ λ‹€μŒκ³Ό κ°™λ‹€.

- 객체지ν–₯ 섀계에 μ°Έμ—¬ν•˜λŠ” 객체듀이 주고받을 μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름을 κ²°μ •ν•œλ‹€.
  - μ•¨λ¦¬μŠ€ μ„Έκ³„μ—μ„œ ν˜„μž¬ ν•„μš”ν•œ 것은 “μž¬νŒμ„ 진행” ν•˜λŠ” ν˜‘λ ₯이닀. 이λ₯Ό μœ„ν•΄μ„œλŠ” “μž¬νŒμ„ ν•  μ±…μž„”, “증언할 μ±…μž„”, “λͺ©κ²©μžλ₯Ό 뢈러올 μ±…μž„” 등이 ν•„μš”ν•˜λ‹€.
- 각 κ°μ²΄μ—κ²Œ μ μ ˆν•œ μ±…μž„μ„ λΆ€μ—¬ν•œλ‹€.
  - “μž¬νŒμ„ ν•  μ±…μž„”은 μ™• κ°μ²΄μ—κ²Œ, “증언할 μ±…μž„”은 λͺ¨μž μž₯수 κ°μ²΄μ—κ²Œ, “λͺ©κ²©μžλ₯Ό 뢈러올 μ±…μž„”은 토끼 κ°μ²΄μ—κ²Œ ν• λ‹Ήν•œλ‹€.
- 각 객체가 μ±…μž„μ„ μˆ˜ν–‰ν•  λ•Œ ν•„μš”ν•œ 데이터듀을 μ •μ˜ν•œλ‹€.
- κ·Έλ‹€μŒ 클래슀의 κ΅¬ν˜„ 방법을 μ •μ˜ν•œλ‹€. (λ”°λΌμ„œ 데이터와 ν΄λž˜μŠ€λŠ” 뒀에 κ²°μ •λœλ‹€.)


λ”°λΌμ„œ κ°μ²΄λ₯Ό λ¨Όμ € μΆ©λΆ„νžˆ ν˜‘λ ₯적으둜 λ§Œλ“  ν›„, ν˜‘λ ₯에 μ°Έμ—¬ν•  λ•Œ μžμ‹ λ§Œμ˜ λ°©λ²•μœΌλ‘œ μ²˜λ¦¬ν•  μˆ˜ μžˆλ„둝 μžμœ¨μ μΈ μ‘΄μž¬λ‘œ μ„€κ³„ν•˜λ©΄ λœλ‹€.


객체지ν–₯ 섀계 기법

μœ„μ˜ μ—­ν• , μ±…μž„, ν˜‘λ ₯을 ν† λŒ€λ‘œ 객체지ν–₯을 μ„€κ³„ν•˜λŠ” 기법은 크게 λ‹€μŒκ³Ό 같이 λ‚˜λ‰œλ‹€.

μ±…μž„-주도 섀계

μ±…μž„ 주도 μ„€κ³„λŠ” 2μž₯: μ΄μƒν•œ λ‚˜λΌμ˜ κ°μ²΄μ—μ„œλ„ μž‘μ„±ν–ˆλ˜ μ„€κ³„ λ°©λ²•μ΄λ‹€.

- μ‹œμŠ€ν…œμ΄ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•΄μ•Ό ν•˜λŠ” κΈ°λŠ₯인 μ‹œμŠ€ν…œ μ±…μž„μ„ νŒŒμ•…ν•œλ‹€.
- μ‹œμŠ€ν…œ μ±…μž„μ„ 더 μž‘μ€ μ±…μž„μœΌλ‘œ λΆ„ν• ν•œλ‹€.
- λΆ„ν• λœ μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” μ μ ˆν•œ 객체 λ˜λŠ” 역할을 μ°Ύμ•„ μ±…μž„μ„ ν• λ‹Ήν•œλ‹€.
- 객체가 μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 쀑에 λ‹€λ₯Έ 객체의 도움이 ν•„μš”ν•œ 경우 이λ₯Ό μ±…μž„μ§ˆ μ μ ˆν•œ 객체 λ˜λŠ” 역할을 μ°ΎλŠ”λ‹€. (μ±…μž„μ„ μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체가 μˆ˜ν–‰ν•  수 μžˆλ‹€λ©΄ 좔상적인 μ—­ν• λ‘œ λŒ€μ²΄λœλ‹€.)
- ν•΄λ‹Ή 객체 λ˜λŠ” μ—­ν• μ—κ²Œ μ±…μž„μ„ ν• λ‹Ήν•¨μœΌλ‘œμ¨ 두 객체가 ν˜‘λ ₯ν•˜κ²Œ ν•œλ‹€.

 

말 κ·ΈλŒ€λ‘œ μ±…μž„μ„ λ¨Όμ € μƒκ°ν•œ ν›„ μ±…μž„μ„ μž‘κ²Œ μͺΌκ°  λ‹€μŒ κ° μ±…μž„μ„ μˆ˜ν–‰ν•  κ°μ²΄λ₯Ό μ„ νƒν•΄ λ‚˜κ°€λŠ” μ„€κ³„ λ°©μ‹μ΄λ‹€.

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

μ±…μž„ 주도 μ„€κ³„λŠ” 객체의 μ—­ν• , μ±…μž„, ν˜‘λ ₯을 κ³ μ•ˆν•˜κΈ° μœ„ν•œ 방법과 절차λ₯Ό μ œμ•ˆν•˜μ§€λ§Œ, λ””μžμΈ νŒ¨ν„΄μ€ μ±…μž„ 주도 μ„€κ³„μ˜ κ²°κ³Όλ₯Ό ν‘œν˜„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€.

νŒ¨ν„΄ (Pattern): μΌμ •ν•œ ν˜•νƒœλ‚˜ 양식 λ˜λŠ” μœ ν˜• - 넀이버 사전

 

즉 νŒ¨ν„΄μ€ νŠΉμ •ν•œ μƒν™©μ—μ„œ μ„€κ³„λ₯Ό λ•κΈ° μœ„ν•΄ λͺ¨λ°©ν•˜κ³  μˆ˜μ •ν•  μˆ˜ μžˆλŠ” κ³Όκ±°μ˜ μ‹€μ œ κ²½ν—˜μ΄λ‹€.

λ””μžμΈ νŒ¨ν„΄μ€ μ±…μž„ μ£Όλ„ μ„€κ³„λ₯Ό κΈ°λ°˜μœΌλ‘œ μž‘μ„±ν•œ νŒ¨ν„΄λ“€μ„ μ˜λ―Έν•œλ‹€. μ΄λ₯Ό μ°Έκ³ ν•΄ μ‚¬λžŒλ“€μ€ λ” λΉ λ₯΄κ²Œ μ±…μž„ μ£Όλ„ μ„€κ³„λ₯Ό μ–΄λ–»κ²Œ ν•΄μ•Ό ν•˜λŠ”지 μŠ΅λ“ν•  μˆ˜ μžˆλ‹€. κ·ΈλŸ° μ μ—μ„œ λ””μžμΈ νŒ¨ν„΄μ€ μ±…μž„ μ£Όλ„ μ„€κ³„λ₯Ό κ΅¬ν˜„ν•  μˆ˜ μžˆλŠ” μ§€λ¦„길과도 κ°™μ€ μ—­ν• μ„ ν•œλ‹€.

λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜μΈ COMPOSITE νŒ¨ν„΄μ„ 보자.

- ClientλŠ” μš”μ²­ν•  ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ˜λ―Έν•œλ‹€.
- ComponentλŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ ν˜‘λ ₯ν•  수 μžˆλŠ” 곡용 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•œ 역할을 μˆ˜ν–‰ν•œλ‹€.
- LeafλŠ” 곡용 μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•œ μ˜€νΌλ ˆμ΄μ…˜ ν˜ΈμΆœμ— 응닡할 수 μžˆλŠ” κΈ°λ³Έ ν–‰μœ„λ₯Ό κ΅¬ν˜„ν•œλ‹€.
- CompositeλŠ” μ™ΈλΆ€λ‘œλΆ€ν„° 뢀뢄에 λŒ€ν•œ μ„ΈλΆ€ 사항을 감좔고 ν¬ν•¨λœ 뢀뢄을 ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ ν–‰λ™ν•˜λŠ” 역할이닀.

ν…ŒμŠ€νŠΈ-주도 개발

ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•˜κ³ , (쀑볡이 μžˆμ„ 수 μžˆλŠ”) κ°„λ‹¨ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•œ λ’€, λ¦¬νŒ©ν„°λ§ μž‘μ—…μ„ 톡해 쀑볡을 μ œκ±°ν•΄ λ‚˜κ°€λŠ” 개발 방법이닀. κ·ΈλŸ¬λ‚˜ μ΄ˆλ³΄μžλ“€μ€ μ–΄λ–€ ν…ŒμŠ€νŠΈλ₯Ό μ–΄λ–€ μ‹μœΌλ‘œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ”μ§€ 잘 λͺ¨λ₯Ό 수 μžˆλ‹€. 객체가 이미 μ‘΄μž¬ν•œλ‹€κ³  κ°€μ •ν•˜κ³  κ°μ²΄μ—κ²Œ μ–΄λ–€ λ©”μ‹œμ§€λ₯Ό 전솑할 것인지에 λ¨Όμ € 생각할 것을 μ•Œλ €μ£Όμ§€λ§Œ, μ—­ν• , μ±…μž„, ν˜‘λ ₯ κ΄€μ μ—μ„œ 객체λ₯Ό λ°”λΌλ΄μ•Όλ§Œ νš¨κ³Όκ°€ μžˆλ‹€.

ν…ŒμŠ€νŠΈ 주도 개발의 핡심은 μ±…μž„μ„ μˆ˜ν–‰ν•  객체 λ˜λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ κΈ°λŒ€ν•˜λŠ” 객체의 역할이 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  λ•Œ μ–΄λ–€ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κ³  κ·Έ κ³Όμ •μ—μ„œ μ–΄λ–€ 객체와 ν˜‘λ ₯ν•  것인지에 λŒ€ν•œ κΈ°λŒ€λ₯Ό μ½”λ“œμ˜ ν˜•νƒœλ‘œ μž‘μ„±ν•˜λŠ” 것이닀.

λ”°λΌμ„œ 이 객체가 μ μ ˆν•œ λ°©μ‹μœΌλ‘œ μ±…μž„μ— λ”°λ₯Έ μ μ ˆν•œ κΈ°λŒ“κ°’μ„ λ„μΆœν•΄ λ‚΄λŠ”μ§€λ₯Ό ν…ŒμŠ€νŠΈ μž₯치둜 μ•ˆμ „ν•˜κ²Œ 검증해 λ‚΄λŠ” 것이 ν…ŒμŠ€νŠΈ 주도 개발의 λͺ©μ μ΄λΌ ν•  수 μžˆκ² λ‹€.

λ”°λΌμ„œ ν…ŒμŠ€νŠΈ μ£Όλ„ κ°œλ°œμ€ μ—­ν• , μ±…μž„, ν˜‘λ ₯의 κ΄€μ μ—μ„œ κ°μ²΄μ§€ν–₯을 μΆ©λΆ„νžˆ λ°”라볼 μˆ˜ μžˆμ–΄μ•Όμ§€λ§Œ λ‹€λ£° μˆ˜ μžˆλŠ” κ°œλ°œ λ°©λ²•μ΄λ‹€.


μš”μ•½

  • μ—­ν• , μ±…μž„, ν˜‘λ ₯을 기반으둜 μ„€κ³„ν•˜λŠ” 것이 κ°€μž₯ μ€‘μš”ν•˜λ‹€.
    • 역할은 λ‹€λ₯Έ 객체가 λ™μΌν•˜κ²Œ μš”μ²­μ— λŒ€ν•΄ 응닡할 수 μžˆλ‹€λ©΄ λ‹€λ₯Έ 객체둜 λ³€κ²½ν•  수 μžˆλ‹€λŠ” μž¬μ‚¬μš©μ„±μ„ λ‚΄ν¬ν•œλ‹€.
    • μ±…μž„μ€ 객체가 무엇을 ν•  수 μžˆλŠ”κ°€μ™€ 무엇을 μ•Œκ³  μžˆλŠ”κ°€κ°€ κ²°μ •λ˜κ²Œ ν•œλ‹€. μ±…μž„μ€ 객체지ν–₯ μ„€κ³„μ˜ ν’ˆμ§ˆμ„ κ²°μ •ν•œλ‹€.
    • ν˜‘λ ₯은 객체가 μš”μ²­ν•˜κ³  μ‘λ‹΅ν•˜λŠ” κ³Όμ •μ—μ„œ 이루어진닀. μš”μ²­κ³Ό 응닡은 ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체가 μˆ˜ν–‰ν•  μ±…μž„μ„ μ •μ˜ν•œλ‹€.
  • μ—­ν• , μ±…μž„, ν˜‘λ ₯을 기반으둜 μ„€κ³„λœ 방법은 크게 μ„Έ κ°€μ§€λ‘œ μžˆλ‹€.
    • μ±…μž„ 주도 μ„€κ³„λŠ” 말 κ·ΈλŒ€λ‘œ μ‹œμŠ€ν…œμ—μ„œ κ΅¬ν˜„ν•΄μ•Ό ν•  μ±…μž„μ„ λ¨Όμ € μƒκ°ν•˜κ³  κ·Έ 객체λ₯Ό λΆ„ν• ν•œ λ’€ 각 μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλŠ” 객체와 μˆ˜ν–‰ν•  행동을 λ‚˜μ€‘μ—μ•Ό κ³ λ―Όν•˜λŠ” 방법이닀.
    • λ””μžμΈ νŒ¨ν„΄μ€ λ°˜λ³΅λ˜λŠ” μƒν™©μ—μ„œ μ±…μž„ 주도 섀계λ₯Ό λΉ λ₯΄κ²Œ κ΅¬ν˜„ν•  수 μžˆλ„λ‘ μ°Έκ³ ν•  수 μžˆλŠ” νŒ¨ν„΄μ΄λ‹€.
    • ν…ŒμŠ€νŠΈ 주도 κ°œλ°œμ€ μ—­ν• , μ±…μž„, ν˜‘λ ₯을 μΆ©λΆ„νžˆ κ³ λ―Όν•΄ 보고 μ±…μž„ 주도 섀계λ₯Ό 많이 ν•΄ λ³Έ μ‚¬λžŒλ§Œ 효과적으둜 κ°œλ°œν•  수 μžˆλŠ” κ°œλ°œλ²•μ΄λ‹€.