suyeonme

[λ…μ„œ] 객체지ν–₯의 사싀과 μ˜€ν•΄ λ³Έλ¬Έ

λ…μ„œπŸ“š

[λ…μ„œ] 객체지ν–₯의 사싀과 μ˜€ν•΄

suyeonme 2022. 7. 25. 21:57
μ±…μ˜ 핡심 λ‚΄μš© 정리

행동이 μƒνƒœλ₯Ό κ²°μ •ν•œλ‹€.

μ΄ˆλ³΄μžλ“€μ€ λ¨Όμ € 객체에 ν•„μš”ν•œ μƒνƒœκ°€ 무엇인지λ₯Ό κ²°μ •ν•˜κ³  κ·Έ μƒνƒœμ— ν•„μš”ν•œ 행동을 κ²°μ •ν•œλ‹€. μƒνƒœλ₯Ό λ¨Όμ € κ²°μ •ν•˜κ³  행동을 λ‚˜μ€‘μ— κ²°μ •ν•˜λŠ” 방법은 섀계에 λ‚˜μœ 영ν–₯을 λΌμΉœλ‹€. 객체가 μ ν•©ν•œμ§€λ₯Ό κ²°μ •ν•˜λŠ” 것은 κ·Έ 객체의 μƒνƒœκ°€ μ•„λ‹ˆλΌ 행동이닀. μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ•ˆμ—μ„œ μ–΄λ–€ 행동을 μ›ν•˜λŠλƒκ°€ μ–΄λ–€ 객체가 μ ν•©ν•œμ§€λ₯Ό κ²°μ •ν•œλ‹€.

μƒνƒœλ₯Ό λ¨Όμ € κ²°μ •ν•  경우

  1. μƒνƒœλ₯Ό λ¨Όμ € κ²°μ •ν•  경우 μΊ‘μŠν™”κ°€ μ €ν•΄λœλ‹€. μƒνƒœμ— μ΄ˆμ μ„ 맞좜경우 μƒνƒœκ°€ 객체 λ‚΄λΆ€λ‘œ κΉ”λ”ν•˜κ²Œ μΊ‘μŠν™”λ˜μ§€ λͺ»ν•˜κ³  곡용 μΈν„°νŽ˜μ΄μŠ€μ— κ·ΈλŒ€λ‘œ 노풀될 ν™•λ₯ μ΄ 높아진닀.
  2. 객체λ₯Ό ν˜‘λ ₯μžκ°€ μ•„λ‹Œ 고립된 μ„¬μœΌλ‘œ λ§Œλ“ λ‹€. μƒνƒœλ₯Ό λ¨Όμ € κ³ λ €ν•  경우, ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯μ—μ„œ 멀리 λ²—μ–΄λ‚œ 채 객체λ₯Ό μ„€κ³„ν•¨μœΌλ‘œμ¨ μžμ—°μŠ€λŸ½κ²Œ ν˜‘λ ΅μ— μ ν•©ν•˜μ§€ λͺ»ν•œ 객체λ₯Ό μ°½μ‘°ν•˜κ²Œ λœλ‹€.
  3. 객체의 μž¬μ‚¬μš©μ„±μ΄ μ €ν•΄λœλ‹€. μƒνƒœμ— μ΄ˆμ μ„ 맞좘 κ°μ²΄λŠ” λ‹€μ–‘ν•œ ν˜‘λ ₯에 μ°Έμ—¬ν•˜κΈ° μ–΄λ ΅κΈ°λ•Œλ¬Έμ— μž¬μ‚¬μš©μ„±μ΄ μ €ν•˜λ  수 밖에 μ—†λ‹€.

μ±…μž„-주도-섀계(Responsibility-Driven-Design, RDD)

ν˜‘λ ₯μ•ˆμ—μ„œ 객체의 행동은 객체가 ν˜‘λ ₯에 μ°Έμ—¬ν•˜λ©΄μ„œ μ™„μˆ˜ν•΄μ•Όν•˜λŠ” μ±…μž„μ„ μ˜λ―Έν•œλ‹€. 객체지ν–₯ μ„€κ³„λŠ” μ μ ˆν•œ μ±…μž„μ„ μ μ ˆν•œ κ°μ²΄μ—κ²Œ ν• λ‹Ήν•˜λ©΄μ„œ 메세지λ₯Ό 기반으둜 ν˜‘λ ₯ν•˜λŠ” κ°μ²΄λ“€μ˜ 관계λ₯Ό λ°œκ²¬ν•˜λŠ” 과정이닀. λ”°λΌμ„œ μ–΄λ–€ μ±…μž„μ΄ ν•„μš”ν•œκ°€λ₯Ό κ²°μ •ν•˜λŠ” 과정이 전체 섀계λ₯Ό μ£Όλ„ν•΄μ•Όν•œλ‹€. μ±…μž„-주도-μ„€κ³„λŠ” μ±…μž„μ„ μ™„μˆ˜ν•˜κΈ°μœ„ν•΄ ν˜‘λ ₯ν•˜λŠ” 객체듀을 μ΄μš©ν•΄ μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜λŠ” λ°©λ²•μœΌλ‘œ, ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯μ•ˆμ—μ„œ 객체의 행동을 μƒκ°ν•˜λ„λ‘ λ„μ›€μœΌλ‘œμ¨ 응집도 λ†’κ³  μž¬μ‚¬μš© κ°€λŠ₯ν•œ 객체λ₯Ό λ§Œλ“€ 수 있게 ν•œλ‹€. 

데이터-주도-섀계(Data-Driven-Design, DDD)

메세지가 μ•„λ‹ˆλΌ 데이터λ₯Ό μ€‘μ‹¬μœΌλ‘œ 객체λ₯Ό μ„€κ³„ν•˜λŠ” 방식은 객체의 λ‚΄λΆ€ ꡬ쑰λ₯Ό 객체 μ •μ˜μ˜ μΌλΆ€λ‘œ λ§Œλ“€κΈ°λ•Œλ¬Έμ— 객체의 μžμœ¨μ„±μ„ μ €ν•΄ν•œλ‹€. 객체의 λ‚΄λΆ€ κ΅¬μ‘°λŠ” κ°μΆ°μ Έμ•Όν•œλ‹€. 

'μ–΄λ–»κ²Œ'κ°€ μ•„λ‹ˆλΌ '무엇'을

자율적인 μ±…μž„μ˜ νŠΉμ§•μ€ 'μ–΄λ–»κ²Œ(how)'ν•΄μ•Όν•˜λŠ”κ°€κ°€ μ•„λ‹ˆλΌ '무엇(what)'을 ν•΄μ•Όν•˜λŠ”κ°€λ₯Ό μ„€λͺ…ν•˜λŠ” 것이닀. '증언'ν•œλ‹€λΌλŠ” μ±…μž„μ€ λͺ¨μž μž₯μˆ˜κ°€ ν˜‘λ ₯을 μœ„ν•΄ '무엇'을 ν•΄μ•Όν•˜λŠ”μ§€λŠ” κ²°μ •ν•˜μ§€λ§Œ 'μ–΄λ–»κ²Œ'ν•΄μ•Όν•˜λŠ”μ§€μ— λŒ€ν•΄μ„œλŠ” μ „ν˜€ μ–ΈκΈ‰ν•˜μ§€μ•ŠλŠ”λ‹€. 증언할 방법은 λͺ¨μž μž₯μˆ˜κ°€ 자율적으둜 선택할 수 μžˆλ‹€. 

μ±…μž„μ„ 자율적으둜 λ§Œλ“€μ–΄λΌ

자율적인 μ±…μž„μ€,

  1. 자율적인 μ±…μž„μ€ ν˜‘λ ₯을 λ‹¨μˆœν•˜κ²Œ λ§Œλ“ λ‹€.
  2. 객체의 외뢀와 λ‚΄λΆ€λ₯Ό λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬ν•œλ‹€.
  3. μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 내뢀적인 방법을 λ³€κ²½ν•˜λ”λΌλ„ 외뢀에 영ν–₯을 λ―ΈμΉ˜μ§€μ•ŠλŠ”λ‹€.
  4. ν˜‘λ ₯의 λŒ€μƒμ„ λ‹€μ–‘ν•˜κ²Œ 선택할 수 μžˆλŠ” μœ μ—°μ„±μ„ μ œκ³΅ν•œλ‹€. 
  5. 객체가 μˆ˜ν–‰ν•˜λŠ” μ±…μž„μ΄ 자율적일수둝 객체의 역할을 μ΄ν•΄ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€. 

μœ μŠ€μΌ€μ΄μŠ€(Use case)

μ‚¬μš©μžμ˜ λͺ©ν‘œλ₯Ό λ‹¬μ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œ 간에 μ΄λ€„μ§€λŠ” μƒν˜Έμž‘μš©μ˜ 흐름을 ν…μŠ€νŠΈλ‘œ μ •λ¦¬ν•œ 것을 μœ μŠ€μΌ€μ΄μŠ€λΌκ³  ν•œλ‹€. μœ μŠ€μΌ€μ΄μŠ€μ˜ κ°€μΉ˜λŠ” μ‚¬μš©μžλ“€μ˜ λͺ©ν‘œλ₯Ό μ€‘μ‹¬μœΌλ‘œ μ‹œμŠ€ν…œμ˜ κΈ°λŠ₯적인 μš”κ΅¬μ‚¬ν•­λ“€μ„ 이야기 ν˜•μ‹μœΌλ‘œ 묢을 수 μžˆλ‹€λŠ” 점이닀. "μ‚¬μš©μž λͺ©ν‘œκ°€ μœ μŠ€μΌ€μ΄μŠ€μ˜ 핡심이닀. μœ μŠ€μΌ€μ΄μŠ€λŠ” κ³΅ν†΅μ˜ μ‚¬μš©μž λͺ©ν‘œλ₯Ό 톡해 κ°•ν•˜κ²Œ μ—°κ΄€λœ μ‹œλ‚˜λ¦¬μ˜€μ˜ 집합이닀.(by Martin Fowler)"

μœ μŠ€μΌ€μ΄μŠ€λŠ”,

  1. μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œ κ°„μ˜ μƒν˜Έμž‘μš©μ„ λ³΄μ—¬μ£ΌλŠ” ν…μŠ€νŠΈλ‹€.
  2. ν•˜λ‚˜μ˜ μ‹œλ‚˜λ¦¬μ˜€κ°€ μ•„λ‹ˆλΌ μ—¬λŸ¬ μ‹œλ‚˜λ¦¬μ˜€λ“€μ˜ 집합이닀.
  3. λ‹¨μˆœν•œ feature λͺ©λ‘κ³Ό λ‹€λ₯΄λ‹€. featureλŠ” μ‹œμŠ€ν…œμ΄ μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” κΈ°λŠ₯의 λͺ©λ‘μ„ λ‹¨μˆœν•˜κ²Œ λ‚˜μ—΄ν•œ 것이닀. 반면 μœ μŠ€μΌ€μ΄μŠ€λŠ” 이야기λ₯Ό 톡해 μ—°κ΄€λœ κΈ°λŠ₯듀을 ν•¨κ»˜ λ¬ΆλŠ”λ‹€. 
  4. μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€μ™€ κ΄€λ ¨λœ μ„ΈλΆ€ 정보λ₯Ό ν¬ν•¨ν•˜μ§€ 말아야 ν•œλ‹€.
  5. λ‚΄λΆ€ 섀계와 κ΄€λ ¨λœ 정보λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ”λ‹€.

μœ μŠ€μΌ€μ΄μŠ€ μ˜ˆμ‹œ

μœ μŠ€μΌ€μ΄μŠ€λͺ…: 쀑도 해지 μ΄μžμ•‘μ„ κ³„μ‚°ν•œλ‹€.

일차 μ•‘ν„°: 예금주

μ£Όμš” 성곡 μ‹œλ‚˜λ¦¬μ˜€:
 1. μ˜ˆκΈˆμ£Όκ°€ μ •κΈ°μ˜ˆκΈˆ κ³„μ’Œλ₯Ό μ„ νƒν•œλ‹€.
 2. μ‹œμŠ€ν…œμ€ μ •κΈ°μ˜ˆκΈˆ κ³„μ’Œ 정보λ₯Ό 보여쀀닀.
 3. μ˜ˆκΈˆμ£Όκ°€ 금일 κΈ°μ€€μœΌλ‘œ μ˜ˆκΈˆμ„ 해지할 경우 지급받을 수 μžˆλŠ” 이자 계산을 μš”μ²­ν•œλ‹€.
 4. μ‹œμŠ€ν…œμ€ 쀑도 해지 μ‹œ 지급받을 수 μžˆλŠ” 이자λ₯Ό κ³„μ‚°ν•œ ν›„ κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ μ „λ‹¬ν•œλ‹€.
 
 ν™•μž₯:
  3a. μ‚¬μš©μžλŠ” 해지 일자λ₯Ό λ‹€λ₯Έ 일자둜 μž…λ ₯ν•  수 μžˆλ‹€.

μΈν„°νŽ˜μ΄μŠ€μ™€ κ΅¬ν˜„μ„ 뢄리해라(ISP, Interface Segregation Principle)

λͺ…μ„Έ 관점은 클래슀의 μ•ˆμ •μ μΈ 츑면을 λ“œλŸ¬λ‚΄μ•Όν•œλ‹€. κ΅¬ν˜„ 관점은 클래슀의 λΆˆμ•ˆμ •ν•œ 츑면을 λ“œλŸ¬λ‚΄μ•Όν•œλ‹€. λͺ…μ„Έ 관점이 섀계λ₯Ό μ£Όλ„ν•˜κ²Œν•˜λ©΄ μ„€κ³„μ˜ ν’ˆμ§ˆμ΄ ν–₯상될 수 μžˆλ‹€. μΊ‘μŠν™”λ₯Ό μœ„λ°˜ν•΄μ„œ κ΅¬ν˜„μ„ μΈν„°νŽ˜μ΄μŠ€ λ°–μœΌλ‘œ λ…ΈμΆœν•΄μ„œλ„ μ•ˆλ˜κ³  μΈν„°νŽ˜μ΄μŠ€μ™€ κ΅¬ν˜„μ„ λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬ν•˜μ§€ μ•Šκ³  νλ¦Ών•˜κ²Œ μ„žμ–΄λ†“μ•„μ„œλ„ μ•ˆλœλ‹€.

Comments