flow-vector

πŸ’‘ μ‘°μ˜ν˜Έλ‹˜μ˜ 객체지ν–₯의 사싀과 μ˜€ν•΄λ₯Ό 읽고 μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€

기얡에 λ‚¨λŠ” 문ꡬ

  • 객체의 μ„Έκ³„μ—μ„œ ν˜‘λ ₯μ΄λΌλŠ” λ¬Έλ§₯이 객체의 행동 방식을 결정함
  • 객체지ν–₯ μ„€κ³„μ˜ μ „μ²΄ν’ˆμ§ˆμ„ κ²°μ •ν•˜λŠ” 것은 μ—¬λŸ¬ 객체듀이 λͺ¨μ—¬ μ΄λ€„λ‚΄λŠ” ν˜‘λ ₯의 ν’ˆμ§ˆ
  • μ–΄λ–€ ν˜‘λ ₯에 μ°Έμ—¬ ν•˜λŠ”μ§€κ°€ 객체에 ν•„μš”ν•œ 행동을 κ²°μ •, ν•„μš”ν•œ 행동이 객체의 μƒνƒœλ₯Ό κ²°μ •
  • κ²°λ‘  : 객체지ν–₯ μ„€κ³„λž€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ ν˜‘λ ₯ 관계λ₯Ό κ³ μ•ˆν•˜κ³ , ν˜‘λ ₯에 ν•„μš”ν•œ μ—­ν• κ³Ό μ±…μž„μ„ μ‹λ³„ν•œλ’€ 이λ₯Ό μˆ˜ν–‰ν•  수 μžˆλŠ” μ μ ˆν•œ 객체λ₯Ό 식별해 λ‚˜κ°€λŠ” κ³Όμ •
  • 객체지ν–₯의 μ„Έκ³„λŠ” λ™μΌν•œ λͺ©μ μ„ μ΄λ£¨κΈ°μœ„ν•΄ ν˜‘λ ₯ν•˜λŠ” κ°μ²΄λ“€μ˜ 곡동체

ν˜‘λ ₯

  • ν˜‘λ ₯의 λ³Έμ§ˆμ€ μš”μ²­κ³Ό μ‘λ‹΅μœΌλ‘œ μ—°κ²°λ˜λŠ” μ‚¬λžŒλ“€μ˜ λ„€νŠΈμ›Œν¬
  • νŠΉμ • μš”μ²­μ„ λ³΄λƒˆλ‹€λŠ” 것은 ν•΄λ‹Ή 객체가 μš”μ²­μ— λŒ€ν•œ 의무λ₯Ό 가지고 있고 μš”μ²­μ— ν•„μš”ν•œ 지식을 가지고 μžˆμŒμ„ μ˜λ―Έν•¨
  • νŠΉμ • μš”μ²­μ— 응닡을 ν–ˆλ‹€λŠ” 것은 ν•΄λ‹Ή μš”μ²­μ— 응닡할 μ˜λ¬΄κ°€ 있으면 응닡에 ν•„μš”ν•œ 지식을 가지고 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•¨

μ±…μž„

  • 객체지ν–₯ κ°œλ°œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ λŠ₯λ ₯은 μ±…μž„μ„ λŠ₯μˆ™ν•˜κ²Œ μ†Œν”„νŠΈμ›¨μ–΄ 객체에 ν• λ‹Ήν•˜λŠ” 것 - 크레이그 라만
  • μ±…μž„μ˜ λΆ„λ₯˜
    • ν•˜λŠ” 것(doing) : 객체가 무엇을 ν•  수 μžˆλŠ”κ°€
      • 객체λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ 계산을 ν•˜λŠ” λ“±μ˜ 슀슀둜 ν•˜λŠ” 것
      • λ‹€λ₯Έ 객체의 행동을 μ‹œμž‘μ‹œν‚€λŠ” 것
      • λ‹€λ₯Έ 객체의 ν™œλ™μ„ μ œμ–΄ν•˜κ³  μ‘°μ ˆν•˜λŠ” 것
    • μ•„λŠ” 것(knowing) : 객체가 무엇을 μ•Œκ³  μžˆλŠ” κ°€
      • 개인적인 정보에 κ΄€ν•΄ μ•„λŠ” 것
      • κ΄€λ ¨λœ 객체에 κ΄€ν•΄ μ•„λŠ” 것
      • μžμ‹ μ΄ μœ λ„ν•˜κ±°λ‚˜ 계산할 수 μžˆλŠ” 것에 κ΄€ν•΄ μ•„λŠ” 것
  • 곡용 μΈν„°νŽ˜μ΄μŠ€
    • 객체의 외뢀에 μ œκ³΅ν•΄ μ€„μˆ˜μžˆλŠ” 정보
    • κ°ν…Œμ˜ 외뢀에 μ œκ³΅ν•΄ μ€„μˆ˜ μžˆλŠ” μ„œλΉ„μŠ€
  • λ©”μ‹œμ§€
    • 객체가 λ‹€λ₯Έ κ°μ²΄μ—κ²Œ 주어진 μ±…μž„μ„ μˆ˜ν–‰ν•˜λ„λ‘ μš”μ²­μ„ λ³΄λ‚΄λŠ” 것 (메세지 전솑)
    • κ°μ²΄κ°„μ˜ ν˜‘λ ₯이 μ΄λ£¨μ–΄μ§€λŠ” 방법
    • ν˜‘λ ₯을 μœ„ν•΄ ν•œ 객체가 λ‹€λ₯Έ 객체둜 μ ‘κ·Όν•  수 μžˆλŠ” μœ μΌν•œ 방법

μ—­ν• 

  • μ–΄λ–€ 객체가 μˆ˜ν–‰ν•˜λŠ” μ±…μž„μ˜ 집합은 객체가 ν˜‘λ ₯ μ•ˆμ—μ„œ μˆ˜ν–‰ν•˜λŠ” 역할을 μ•”μ‹œν•¨
  • 역할은 μž¬μ‚¬μš©κ°€λŠ₯ν•˜κ³  μœ μ—°ν•œ 객체지ν–₯ 섀계λ₯Ό λ§Œλ“œλŠ” μ€‘μš”ν•œ ꡬ성 μš”μ†Œμž„
  • μž¬νŒμ΄λΌλŠ” ν˜‘λ ₯μ•ˆμ—μ„œ “νŒμ‚¬”, “증인”μ΄λΌλŠ” 역할을 μ‚¬μš©ν•  수 있음.
  • μ–΄λ–€ 객체가 νŒμ‚¬ or 증인의 역할을 ν•  수 μžˆλ‹€λ©΄ μž¬νŒμ΄λΌλŠ” ν˜‘λ ₯에 μ°Έμ—¬ν•  수 있게됨
  • μ–΄λ–€ 객체가 역할을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” 각 역할이 μˆ˜μ‹ ν•  수 μžˆλŠ” 메세지λ₯Ό λ™μΌν•œ λ°©μ‹μœΌλ‘œ μ²˜λ¦¬ν•  수 μžˆμ–΄μ•Όν•¨
  • κ²°κ΅­ λ™μΌν•œ 역할을 μˆ˜ν–‰ν•  수 μžˆλŠ” 객체듀은 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  수 있음
  • 객체 지ν–₯ μ„€κ³„μ˜ λ‹¨μˆœμ„±, μœ μ—°μ„±, μž¬μ‚¬μš©μ„±μ„ λ’·λ°”μΉ¨ν•˜λŠ” 핡심 κ°œλ…
  • 역할은 ν˜‘λ ₯을 μΆ”μƒν™”ν•˜μ—¬ ν˜‘λ ₯의 양상을 λ‹¨μˆœν™” ν•  수 있음
    • μž¬νŒμ΄λΌλŠ” ν˜‘λ ₯의 μ˜ˆμ‹œ
    • μ™• - μ‹ ν•˜ - λͺ¨μžμž₯수 : case 1 μ°Έμ—¬μž
    • μ—¬μ™• - μ‹ ν•˜ - μš”λ¦¬μ‚¬ : case 2 μ°Έμ—¬μž
    • νŒμ‚¬ - μ‹ ν•˜ - 증인 ⇒ 이와 같이 ν•˜λ‚˜μ˜ 좔상적 ν˜‘λ ₯으둜 λŒ€μ²΄ν•  수 있음
  • μ—¬λŸ¬ μ’…λ₯˜μ˜ 객체듀이 λ™μΌν•œ μ±…μž„μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€λ©΄ ν˜‘λ ₯μžλŠ” 객체가 μ•„λ‹ˆλΌ 좔상적인 μ—­ν• λ‘œ λŒ€μ²΄λ  수 있음

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

  • ν”ν•œ 였λ₯˜
    • μ‹œμŠ€ν…œμ— ν•„μš”ν•œ 데이터λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ 객체가 μ‘΄μž¬ν•œλ‹€?! no!!!
      • 객체가 μƒνƒœμ˜ μΌλΆ€λ‘œ 데이터λ₯Ό ν¬ν•¨ν•˜μ§€λ§Œ 객체가 행동(μ±…μž„μ„ λ‹€ν•˜κΈ° μœ„ν•΄)을 ν•˜κΈ°μœ„ν•΄ ν•„μš”ν•œ 데이터 일뿐!!
    • 객체지ν–₯이 ν΄λž˜μŠ€μ™€ ν΄λž˜μŠ€κ°„μ˜ 관계λ₯Ό ν‘œν˜„ν•˜λŠ” 정적 츑면에 쀑점을 λ‘”λ‹€?!
      • μ€‘μš”ν•œ 것은 적정인 ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλΌ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 동적인 객체
      • ν΄λž˜μŠ€λŠ” 단지 μ‹œμŠ€ν…œμ— ν•„μš”ν•œ 객체λ₯Ό ν‘œν˜„, μƒμ„±ν•˜κΈ° μœ„ν•΄ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄κ°€ μ œκ³΅ν•˜λŠ” κ΅¬ν˜„ λ©”μ»€λ‹ˆμ¦˜μΌ 뿐
      • μ€‘μš”ν•œκ²ƒμ€ ν˜‘λ ₯μ•ˆμ—μ„œ 객체가 μ–΄λ–€ μ±…μž„κ³Ό 역할을 μˆ˜ν–‰ν•  것인가 μž„!!
    • 계속 κ°•μ‘°ν•˜λŠ” κ²ƒμ΄μ§€λ§Œ 객체λ₯Ό ν•˜λ‚˜μ˜ μ„¬μœΌλ‘œ 보면 μ•ˆλœλ‹€!!
  • ν˜‘λ ₯을 따라 흐λ₯΄λŠ” 객체의 μ±…μž„
    • 객체λ₯Ό 섀계 ν•˜κΈ°μ „ κ²¬κ³ ν•˜κ³  κΉ”λ”ν•œ ν˜‘λ ₯을 섀계해야함!!
      • μˆœμ„œ
        • ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체듀이 μ£Όκ³  받을 μš”μ²­κ³Ό μ‘λ‹΅μ˜ 흐름을 결정해야함
        • 이 μš”μ²­κ³Ό 응닡이 객체가 μˆ˜ν–‰ν•˜κ²Œλ  μ±…μž„μ΄ 됨
        • μ±…μž„μ€ 외뢀에 μ œκ³΅ν•˜κ²Œ 될 행동이 됨
        • 행동을 μˆ˜ν–‰ν•˜κΈ° μœ„ν•œ 데이터λ₯Ό κ³ λ―Ό
        • 클래슀의 κ΅¬ν˜„ 방법 κ³ λ―Ό

객체지ν–₯ 섀계 기법

  • μ—­ν• , μ±…μž„, ν˜‘λ ₯의 κ΄€μ μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ„€κ³„ν•˜λŠ” μœ μš©ν•œ 기법듀
    • μ±…μž„-주도 섀계(Responsibility-Driven Design)
      • ν˜‘λ ₯에 ν•„μš”ν•œ μ±…μž„μ„ 식별 ν›„ μ ν•©ν•œ 객체에 μ±…μž„μ„ ν• λ‹Ήν•˜λŠ” 방법과 절차λ₯Ό μ œμ‹œ
        • μ‹œμŠ€ν…œμ΄ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•΄μ•Όν•˜λŠ” κΈ°λŠ₯인 μ‹œμŠ€ν…œ μ±…μž„μ„ νŒŒμ•…
        • μ‹œμŠ€ν…œ μ±…μž„μ„ 더 μž‘μ€ μ±…μž„μœΌλ‘œ λΆ„ν• 
        • λΆ„ν•  된 μ±…μž„μ„ μ μ ˆν•œ 객체 or μ—­ν• μ—κ²Œ λΆ„λ°°
        • 객체가 μ±…μž„μ„ μˆ˜ν–‰ν•˜λŠ” 도쀑 λ‹€λ₯Έ 객체의 도움이 ν•„μš”ν•˜λ‹€λ©΄ 이λ₯Ό 도와쀄 객체 λ˜λŠ” μ—­ν•  μ°ΎκΈ°
        • μ„œλ‘œ ν˜‘λ ₯ν•˜κ²Œ λ§Œλ“¬
    • λ””μžμΈ νŒ¨ν„΄(Design Pattern)
      • μ±…μž„ 주도 섀계가 방법과 절차λ₯Ό μ œμ‹œ ν•˜μ˜€λ‹€λ©΄ λ””μžμΈ νŒ¨ν„΄μ€ μ±…μž„ 주도 μ„€κ³„μ˜ κ²°κ³Όλ¬Όμž„
      • 전문가듀이 반볡적으둜 μ‚¬μš©ν•˜λŠ” ν•΄κ²° 방법을 μ •μ˜ν•΄ 놓은 섀계 ν…œν”Œλ¦Ώ
        • νŒ¨ν„΄
          • νŠΉμ • 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 이미 식별해 놓은 μ—­ν• , μ±…μž„, ν˜‘λ ₯의 λͺ¨μŒ
          • νŒ¨ν„΄μ„ μ•Œλ©΄ 바퀴λ₯Ό 반볡적으둜 발λͺ…ν•  ν•„μš”κ°€ μ—†μŒ
      • 반볡적으둜 λ°œμƒν•˜λŠ” 문제 - 문제 ν•΄λ²•μœΌλ‘œ ꡬ성
    • ν…ŒμŠ€νŠΈ-주도 개발(Test-Driven Development)
      • ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³  ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” ꡬ체적인 μ½”λ“œλ₯Ό μΆ”κ°€ν•˜λ©΄μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°œλ°œμ„ μ™„μ„±ν•΄ λ‚˜κ°
      • 섀계λ₯Ό 잘 ν•˜κΈ° μœ„ν•΄ ν…ŒμŠ€νŠΈλ₯Ό ν•œλ‹€!
      • λͺ©μ 
        • μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©΄μ„œ μ—­ν• , μ±…μž„, ν˜‘λ ₯을 μ‹λ³„ν•˜κ³  μ‹λ³„λœ μ—­ν• , μ±…μž„, ν˜‘λ ₯이 μ ν•©ν•œμ§€ ν”Όλ“œλ°±μ„ λ°›μœΌλ©΄μ„œ 섀계λ₯Ό ν•˜κΈ° μœ„ν•¨
        • 이λ₯Ό 톡해 μ–»μ–΄μ§€λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ³΄λ„ˆμŠ€ 같은 것.
      • μ±…μž„ 주도 개발 섀계 및 λ””μžμΈ νŒ¨ν„΄μ— λŒ€ν•œ λ§Žμ€ κ²½ν—˜κ³Ό κΉŠμ€ 이해가 μžˆμ–΄μ•Ό ν…ŒμŠ€νŠΈλ₯Ό 잘 μž‘μ„±ν•  수 있음…..
profile

flow-vector

@flow-vector

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!