λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ“š Book Log

[였브젝트] 2μž₯ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° (feat. POPμ™€μ˜ 비ꡐ)

by MINT09 2025. 3. 26.

πŸ“• 기얡에 λ‚¨λŠ” λ¬Έμž₯λ“€

  • μ§„μ •ν•œ 객체지ν–₯ νŒ¨λŸ¬λ‹€μž„μœΌλ‘œμ˜ μ „ν™˜μ€ ν΄λž˜μŠ€κ°€ μ•„λ‹Œ 객체에 μ΄ˆμ μ„ 맞좜 λ•Œμ—λ§Œ 얻을 수 μžˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” ν”„λ‘œκ·Έλž˜λ° ν•˜λŠ” λ™μ•ˆ λ‹€μŒμ˜ 두 가지에 집쀑해야 ν•œλ‹€.
    • μ–΄λ–€ ν΄λž˜μŠ€κ°€ ν•„μš”ν•œμ§€λ₯Ό κ³ λ―Όν•˜κΈ° 전에 μ–΄λ–€ 객체듀이 ν•„μš”ν•œμ§€ κ³ λ―Όν•˜λΌ.
    • ν΄λž˜μŠ€λŠ” 곡톡적인 μƒνƒœμ™€ 행동을 κ³΅μœ ν•˜λŠ” 객체듀을 μΆ”μƒν™”ν•œ 것이닀. λ”°λΌμ„œ 클래슀의 μœ€κ³½μ„ 작기 μœ„ν•΄μ„œλŠ” μ–΄λ–€ 객체듀이 μ–΄λ–€ μƒνƒœμ™€ 행동을 κ°€μ§€λŠ”μ§€λ₯Ό λ¨Όμ € κ²°μ •ν•΄μ•Ό ν•œλ‹€. 객체λ₯Ό 쀑심에 λ‘λŠ” μ ‘κ·Ό 방법은 섀계λ₯Ό λ‹¨μˆœν•˜κ³  κΉ”λ”ν•˜κ²Œ λ§Œλ“ λ‹€.
    • 객체λ₯Ό 독립적인 μ‘΄μž¬κ°€ μ•„λ‹ˆλΌ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ ν˜‘λ ₯ν•˜λŠ” κ³΅λ™μ²΄μ˜ μΌμ›μœΌλ‘œ 봐야 ν•œλ‹€. κ°μ²΄λŠ” ν™€λ‘œ μ‘΄μž¬ν•˜λŠ” 것이 μ•„λ‹ˆλ‹€. λ‹€λ₯Έ κ°μ²΄μ—κ²Œ 도움을 μ£Όκ±°λ‚˜ μ˜μ‘΄ν•˜λ©΄μ„œ μ‚΄μ•„κ°€λŠ” ν˜‘λ ₯적인 μ‘΄μž¬λ‹€.
    • ν›Œλ₯­ν•œ ν˜‘λ ₯이 ν›Œλ₯­ν•œ 객체λ₯Ό λ‚³κ³  ν›Œλ₯­ν•œ 객체가 ν›Œλ₯­ν•œ 클래슀λ₯Ό λ‚³λŠ”λ‹€.
  • μ†Œν”„νŠΈμ›¨μ–΄λŠ” μ‚¬μš©μžκ°€ μ›ν•˜λŠ” μ–΄λ–€ 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„λ‹€.
  • 이처럼 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžκ°€ ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•˜λŠ” λΆ„μ•Όλ₯Ό 도메인이라고 λΆ€λ₯Έλ‹€.
  • 클래슀의 내뢀와 μ™ΈλΆ€λ₯Ό ꡬ뢄해야 ν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ? κ·Έ μ΄μœ λŠ” κ²½κ³„μ˜ λͺ…확성이 객체의 μžμœ¨μ„±μ„ 보μž₯ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 그리고 더 μ€‘μš”ν•œ μ΄μœ λŠ” ν”„λ‘œκ·Έλž˜λ¨Έμ—κ²Œ κ΅¬ν˜„μ˜ 자유λ₯Ό μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

자율적인 객체

  • 객체지ν–₯의 핡심은 슀슀둜 μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κ³ , νŒλ‹¨ν•˜κ³ , ν–‰λ™ν•˜λŠ” 자율적인 κ°μ²΄λ“€μ˜ 곡동체λ₯Ό κ΅¬μ„±ν•˜λŠ” 것이닀.
  • 객체가 자율적인 쑴재둜 우뚝 μ„œκΈ° μœ„ν•΄μ„œλŠ” μ™ΈλΆ€μ˜ 간섭을 μ΅œμ†Œν™”ν•΄μ•Ό ν•œλ‹€.
  • 일반적으둜 객체의 μƒνƒœλŠ” 숨기고 ν–‰λ™λ§Œ 외뢀에 κ³΅κ°œν•΄μ•Ό ν•œλ‹€.

ν”„λ‘œκ·Έλž˜λ¨Έμ˜ 자유

  • 섀계가 ν•„μš”ν•œ μ΄μœ λŠ” 변경을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄μ„œλΌλŠ” 것을 κΈ°μ–΅ν•˜λΌ.
  • 객체지ν–₯ μ–Έμ–΄λŠ” 객체 μ‚¬μ΄μ˜ μ˜μ‘΄μ„±μ„ 적절히 κ΄€λ¦¬ν•¨μœΌλ‘œμ¨ 변경에 λŒ€ν•œ νŒŒκΈ‰νš¨κ³Όλ₯Ό μ œμ–΄ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ 방법을 μ œκ³΅ν•œλ‹€.
  • 객체지ν–₯의 μž₯점은 객체λ₯Ό μ΄μš©ν•΄ λ„λ©”μΈμ˜ 의미λ₯Ό ν’λΆ€ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€λŠ” 것이닀.
  • λ”°λΌμ„œ 의미λ₯Ό μ’€ 더 λͺ…μ‹œμ μ΄κ³  λΆ„λͺ…ν•˜κ²Œ ν‘œν˜„ν•  수 μžˆλ‹€λ©΄ 객체λ₯Ό μ‚¬μš©ν•΄μ„œ ν•΄λ‹Ή κ°œλ…μ„ κ΅¬ν˜„ν•˜λΌ.
  • κ·Έ κ°œλ…μ΄ 비둝 ν•˜λ‚˜μ˜ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ§Œ ν¬ν•¨ν•˜λ”λΌλ„ κ°œλ…μ„ λͺ…μ‹œμ μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 것은 전체적인 μ„€κ³„μ˜ λͺ…ν™•μ„±κ³Ό μœ μ—°μ„±μ„ λ†’μ΄λŠ” μ²«κ±ΈμŒμ΄λ‹€.
  • λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œ κ°μ²΄λŠ” 슀슀둜의 결정에 따라 자율적으둜 λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  방법을 κ²°μ •ν•œλ‹€. 이처럼 μˆ˜μ‹ λœ λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ μžμ‹ λ§Œμ˜ 방법을 λ©”μ„œλ“œλΌκ³  λΆ€λ₯Έλ‹€.
  • λ©”μ‹œμ§€μ™€ λ©”μ„œλ“œλ₯Ό κ΅¬λΆ„ν•˜λŠ” 것은 맀우 μ€‘μš”ν•˜λ‹€. λ©”μ‹œμ§€μ™€ λ©”μ„œλ“œμ˜ κ΅¬λΆ„μ—μ„œλΆ€ν„° λ‹€ν˜•μ„±μ˜ κ°œλ…μ΄ μΆœλ°œν•œλ‹€.

μ˜€λ²„λΌμ΄λ”©κ³Ό μ˜€λ²„λ‘œλ”©

  • μ˜€λ²„λΌμ΄λ”©μ€ λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ •μ˜λœ 같은 이름, 같은 νŒŒλΌλ―Έν„° λͺ©λ‘μ„ κ°€μ§„ λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜λŠ” 경우λ₯Ό 가리킨닀. μžμ‹ 클래슀의 λ©”μ„œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©ν•œ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό 가리기 λ•Œλ¬Έμ— μ™ΈλΆ€μ—μ„œλŠ” λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œκ°€ 보이지 μ•ŠλŠ”λ‹€.
  • μ˜€λ²„λ‘œλ”©μ€ λ©”μ„œλ“œμ˜ 이름은 κ°™μ§€λ§Œ μ œκ³΅λ˜λŠ” νŒŒλΌλ―Έν„°μ˜ λͺ©λ‘μ΄ λ‹€λ₯΄λ‹€. μ˜€λ²„λ‘œλ”©ν•œ λ©”μ„œλ“œλŠ” μ›λž˜μ˜ λ©”μ„œλ“œλ₯Ό 가리지 μ•ŠκΈ° λ•Œλ¬Έμ— 이 λ©”μ„œλ“œλ“€μ€ 사이 μ’‹κ²Œ κ³΅μ‘΄ν•œλ‹€.
  • μ–΄λ–€ ν΄λž˜μŠ€κ°€ λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ” 경둜λ₯Ό κ°€μ§€κ±°λ‚˜ ν•΄λ‹Ή 클래슀의 객체의 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  경우 두 클래슀 사이에 μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•œλ‹€κ³  λ§ν•œλ‹€.
  • μ½”λ“œμ˜ μ˜μ‘΄μ„±κ³Ό μ‹€ν–‰ μ‹œμ μ˜ μ˜μ‘΄μ„±μ΄ μ„œλ‘œ λ‹€λ₯Ό 수 μžˆλ‹€. λ‹€μ‹œ 말해 클래슀 μ‚¬μ΄μ˜ μ˜μ‘΄μ„±κ³Ό 객체 μ‚¬μ΄μ˜ μ˜μ‘΄μ„±μ€ λ™μΌν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€. 그리고 μœ μ—°ν•˜κ³ , μ‰½κ²Œ μž¬μ‚¬μš©ν•  수 있으며, ν™•μž₯ κ°€λŠ₯ν•œ 객체지ν–₯ 섀계가 κ°€μ§€λŠ” νŠΉμ§•μ€ μ½”λ“œμ˜ μ˜μ‘΄μ„±κ³Ό μ‹€ν–‰ μ‹œμ μ˜ μ˜μ‘΄μ„±μ΄ λ‹€λ₯΄λ‹€λŠ” 것이닀.
  • ν•œ κ°€μ§€ κ°„κ³Όν•΄μ„œλŠ” μ•ˆλ˜λŠ” 사싀은 μ½”λ“œμ˜ μ˜μ‘΄μ„±κ³Ό μ‹€ν–‰ μ‹œμ μ˜ μ˜μ‘΄μ„±μ΄ λ‹€λ₯΄λ©΄ λ‹€λ₯Όμˆ˜λ‘ μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μ–΄λ €μ›Œμ§„λ‹€λŠ” 것이닀. μ½”λ“œλ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ½”λ“œλΏλ§Œ μ•„λ‹ˆλΌ 객체λ₯Ό μƒμ„±ν•˜κ³  μ—°κ²°ν•˜λŠ” 뢀뢄을 μ°Ύμ•„μ•Ό ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 반면 μ½”λ“œμ˜ μ˜μ‘΄μ„±κ³Ό μ‹€ν–‰ μ‹œμ μ˜ μ˜μ‘΄μ„±μ΄ λ‹€λ₯΄λ©΄ λ‹€λ₯Όμˆ˜λ‘ μ½”λ“œλŠ” 더 μœ μ—°ν•΄μ§€κ³  ν™•μž₯ κ°€λŠ₯ν•΄μ§„λ‹€.
  • μ—¬λŸ¬λΆ„μ΄ ν›Œλ₯­ν•œ 객체지ν–₯ μ„€κ³„μžλ‘œ μ„±μž₯ν•˜κΈ° μœ„ν•΄μ„œλŠ” 항상 μœ μ—°μ„±κ³Ό 가독성 μ‚¬μ΄μ—μ„œ κ³ λ―Όν•΄μ•Ό ν•œλ‹€. 무쑰건 μœ μ—°ν•œ 섀계도, 무쑰건 읽기 μ‰¬μš΄ μ½”λ“œλ„ 정닡이 μ•„λ‹ˆλ‹€. 이것이 객체지ν–₯ 섀계가 μ–΄λ €μš°λ©΄μ„œλ„ λ§€λ ₯적인 μ΄μœ λ‹€.

차이에 μ˜ν•œ ν”„λ‘œκ·Έλž˜λ°

  • λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ λ‹€λ₯Έ λΆ€λΆ„λ§Œμ„ μΆ”κ°€ν•΄μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό 쉽고 λΉ λ₯΄κ²Œ λ§Œλ“œλŠ” 방법을 차이에 μ˜ν•œ ν”„λ‘œκ·Έλž˜λ°μ΄λΌκ³  λΆ€λ₯Έλ‹€.

상속과 μΈν„°νŽ˜μ΄μŠ€

  • 상속이 κ°€μΉ˜ μžˆλŠ” μ΄μœ λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ μ œκ³΅ν•˜λŠ” λͺ¨λ“  μΈν„°νŽ˜μ΄μŠ€λ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ 물렀받을 수 있기 λ•Œλ¬Έμ΄λ‹€.
  • μΈν„°νŽ˜μ΄μŠ€λŠ” 객체가 이해할 수 μžˆλŠ” λ©”μ‹œμ§€μ˜ λͺ©λ‘μ„ μ •μ˜ν•œλ‹€λŠ” 것을 κΈ°μ–΅ν•˜λΌ. 상속을 톡해 μžμ‹ ν΄λž˜μŠ€λŠ” μžμ‹ μ˜ μΈν„°νŽ˜μ΄μŠ€μ— λΆ€λͺ¨ 클래슀의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν¬ν•¨ν•˜κ²Œ λœλ‹€. 결과적으둜 μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ μˆ˜μ‹ ν•  수 μžˆλŠ” λͺ¨λ“  λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  수 있기 λ•Œλ¬Έμ— μ™ΈλΆ€ κ°μ²΄λŠ” μžμ‹ 클래슀λ₯Ό λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ λ™μΌν•œ νƒ€μž…μœΌλ‘œ κ°„μ£Όν•  수 μžˆλ‹€.

λ‹€ν˜•μ„±

  • MovieλŠ” λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜μ§€λ§Œ μ‹€μ œλ‘œ μ–΄λ–€ λ©”μ„œλ“œκ°€ 싀행될 κ²ƒμΈμ§€λŠ” λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜λŠ” 객체의 ν΄λž˜μŠ€κ°€ 무엇이냐에 따라 달라진닀. 이λ₯Ό λ‹€ν˜•μ„±μ΄λΌκ³  λΆ€λ₯Έλ‹€.
  • λ‹€ν˜•μ„±μ΄λž€ λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν–ˆμ„ λ•Œ 객체의 νƒ€μž…μ— 따라 응닡할 수 μžˆλŠ” λŠ₯λ ₯을 μ˜λ―Έν•œλ‹€. λ”°λΌμ„œ λ‹€ν˜•μ μΈ ν˜‘λ ₯에 μ°Έμ—¬ν•˜λŠ” 객체듀은 λͺ¨λ‘ 같은 λ©”μ‹œμ§€λ₯Ό 이해할 수 μžˆμ–΄μ•Ό ν•œλ‹€. λ‹€μ‹œ 말해 μΈν„°νŽ˜μ΄μŠ€κ°€ 동일해야 ν•œλ‹€λŠ” 것이닀.
  • λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•˜λŠ” 방법은 맀우 λ‹€μ–‘ν•˜μ§€λ§Œ λ©”μ‹œμ§€μ— μ‘λ‹΅ν•˜κΈ° μœ„ν•΄ 싀행될 λ©”μ„œλ“œλ₯Ό 컴파일 μ‹œμ μ΄ μ•„λ‹Œ μ‹€ν–‰ μ‹œμ μ— κ²°μ •ν•œλ‹€λŠ” 곡톡점이 μžˆλ‹€. λ‹€μ‹œ 말해 λ©”μ‹œμ§€μ™€ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ μ‹œμ μ— λ°”μΈλ”©ν•œλ‹€λŠ” 것이닀. 이λ₯Ό μ§€μ—° 바인딩 λ˜λŠ” 동적 바인딩이라고 λΆ€λ₯Έλ‹€. 그에 λ°˜ν•΄ 전톡적인 ν•¨μˆ˜ 호좜처럼 컴파일 μ‹œμ μ— 싀행될 ν•¨μˆ˜λ‚˜ ν”„λ‘œμ‹œμ €λ₯Ό κ²°μ •ν•˜λŠ” 것을 초기 바인딩 λ˜λŠ” 정적 바인딩이라고 λΆ€λ₯Έλ‹€.
  • 객체지ν–₯이 컴파일 μ‹œμ μ˜ μ˜μ‘΄μ„±κ³Ό μ‹€ν–‰ μ‹œμ μ˜ μ˜μ‘΄μ„±μ„ λΆ„λ¦¬ν•˜κ³ , ν•˜λ‚˜μ˜ λ©”μ‹œμ§€λ₯Ό μ„ νƒμ μœΌλ‘œ μ„œλ‘œ λ‹€λ₯Έ λ©”μ„œλ“œμ— μ—°κ²°ν•  수 μžˆλŠ” μ΄μœ κ°€ λ°”λ‘œ μ§€μ—° λ°”μΈλ”©μ΄λΌλŠ” λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
    • ν•˜μ§€λ§Œ Swiftμ—μ„œλŠ” Protocol에 Generic을 ν™œμš©ν•˜κ±°λ‚˜, extension에 κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅ν•˜λŠ” 경우 컴파일 μ‹œμ μ— λ©”μ„œλ“œ 호좜이 κ²°μ •λ˜λŠ” 정적 바인딩이 λ°œμƒν•œλ‹€. 이둜 인해 λŸ°νƒ€μž„μ— λ™μ μœΌλ‘œ λ©”μ„œλ“œλ₯Ό μ°ΎλŠ” μ˜€λ²„ν—€λ“œλ₯Ό 쀄일 수 μžˆμ–΄ μ„±λŠ₯상 이점이 μžˆμ„ 수 μžˆλ‹€.
    • λ‹€λ§Œ μ£Όμ˜ν•΄μ•Ό ν•  μˆœκ°„μ΄ μžˆλ‹€.
      • protocol type으둜 μ‚¬μš©
        • ν”„λ‘œν† μ½œμ„ ꡬ체적인 νƒ€μž… λŒ€μ‹  ν”„λ‘œν† μ½œ 자체둜 λ‹€λ£° λ•Œ(protocol existential둜 μ‚¬μš©ν•˜λŠ” 경우)λŠ” λ‚΄λΆ€μ μœΌλ‘œ 동적 바인딩이 μ‚¬μš©λ  수 μžˆλ‹€. -> Generic μ‚¬μš© μ‹œ μ„±λŠ₯ μ΅œμ ν™”.
      • 클래슀 μ „μš© ν”„λ‘œν† μ½œ, @objc
        • λ§Œμ•½ ν”„λ‘œν† μ½œμ΄ ν΄λž˜μŠ€μ— ν•œμ •λ˜κ±°λ‚˜, Objective-Cμ™€μ˜ ν˜Έν™˜μ„±μ„ μœ„ν•΄ @objcλ₯Ό μ‚¬μš©ν•˜λŠ” 경우, 동적 바인딩이 λ°œμƒν•˜μ—¬ λŸ°νƒ€μž„ λΉ„μš©μ΄ 증가할 수 μžˆλ‹€.

κ΅¬ν˜„ 상속과 μΈν„°νŽ˜μ΄μŠ€ 상속

  • 상속을 κ΅¬ν˜„ 상속과 μΈν„°νŽ˜μ΄μŠ€ μƒμ†μœΌλ‘œ λΆ„λ₯˜ν•  수 μžˆλ‹€. ν”νžˆ κ΅¬ν˜„ 상속을 μ„œλΈŒν΄λž˜μ‹±μ΄λΌκ³  λΆ€λ₯΄κ³  μΈν„°νŽ˜μ΄μŠ€ 상속을 μ„œλΈŒνƒ€μ΄ν•‘μ΄λΌκ³  λΆ€λ₯Έλ‹€.
  • κ΅¬ν˜„ 상속 = μˆœμˆ˜ν•˜κ²Œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κΈ° μœ„ν•œ λͺ©μ μœΌλ‘œ 상속을 μ‚¬μš©ν•˜λŠ” 것
  • μΈν„°νŽ˜μ΄μŠ€ 상속 = λ‹€ν˜•μ μΈ ν˜‘λ ₯을 μœ„ν•΄ λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ μžμ‹ ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ³΅μœ ν•  수 μžˆλ„λ‘ 상속을 μ΄μš©ν•˜λŠ” 것.
  • 상속은 κ΅¬ν˜„ 상속이 μ•„λ‹ˆλΌ μΈν„°νŽ˜μ΄μŠ€ 상속을 μœ„ν•΄ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€λ₯Ό μž¬μ‚¬μš©ν•  λͺ©μ μ΄ μ•„λ‹ˆλΌ κ΅¬ν˜„μ„ μž¬μ‚¬μš©ν•  λͺ©μ μœΌλ‘œ 상속을 μ‚¬μš©ν•˜λ©΄ 변경에 μ·¨μ•½ν•œ μ½”λ“œλ₯Ό λ‚³κ²Œ 될 ν™•λ₯ μ΄ λ†’λ‹€.

μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±

  • μ’…μ’… κ΅¬ν˜„μ€ κ³΅μœ ν•  ν•„μš”κ°€ μ—†κ³  μˆœμˆ˜ν•˜κ²Œ μΈν„°νŽ˜μ΄μŠ€λ§Œ κ³΅μœ ν•˜κ³  싢을 λ•Œκ°€ μžˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œ C#κ³Ό μžλ°”μ—μ„œλŠ” μΈν„°νŽ˜μ΄μŠ€λΌλŠ” ν”„λ‘œκ·Έλž˜λ° μš”μ†Œλ₯Ό μ œκ³΅ν•œλ‹€.
  • 좔상화λ₯Ό μ΄μš©ν•΄ μƒμœ„ 정책을 κΈ°μˆ ν•œλ‹€λŠ” 것은 기본적인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ν˜‘λ ₯ 흐름을 κΈ°μˆ ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.
  • 좔상화가 μœ μ—°ν•œ 섀계λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” μ΄μœ λŠ” 섀계가 ꡬ체적인 상황에 κ²°ν•©λ˜λŠ” 것을 λ°©μ§€ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.
  • μ»¨ν…μŠ€νŠΈ 독립성이라고 λΆˆλ¦¬λŠ” 이 κ°œλ…μ€ ν”„λ ˆμž„μ›Œν¬μ™€ 같은 μœ μ—°ν•œ 섀계가 ν•„μˆ˜μ μΈ λΆ„μ•Όμ—μ„œ κ·Έ μ§„κ°€λ₯Ό λ°œνœ˜ν•œλ‹€.
  • μ—¬λŸ¬λΆ„μ΄ μž‘μ„±ν•˜λŠ” λͺ¨λ“  μ½”λ“œμ—λŠ” ν•©λ‹Ήν•œ μ΄μœ κ°€ μžˆμ–΄μ•Ό ν•œλ‹€.
  • 비둝 μ•„μ£Ό μ‚¬μ†Œν•œ 결정이더라도 νŠΈλ ˆμ΄λ“œμ˜€ν”„λ₯Ό 톡해 μ–»μ–΄μ§„ κ²°λ‘ κ³Ό κ·Έλ ‡μ§€ μ•Šμ€ κ²°λ‘  μ‚¬μ΄μ˜ μ°¨μ΄λŠ” 크닀. κ³ λ―Όν•˜κ³  νŠΈλ ˆμ΄λ“œμ˜€ν”„ν•˜λΌ.

μ½”λ“œ μž¬μ‚¬μš©

  • 객체지ν–₯ 섀계와 κ΄€λ ¨λœ 자료λ₯Ό μ‘°κΈˆμ΄λΌλ„ λ³Έ μ‚¬λžŒλ“€μ€ μ½”λ“œ μž¬μ‚¬μš©μ„ μœ„ν•΄μ„œλŠ” μƒμ†λ³΄λ‹€λŠ” 합성이 더 쒋은 λ°©λ²•μ΄λΌλŠ” 이야기λ₯Ό 많이 λ“€μ—ˆμ„ 것이닀.
  • 합성은 λ‹€λ₯Έ 객체의 μΈμŠ€ν„΄μŠ€λ₯Ό μžμ‹ μ˜ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‘œ ν¬ν•¨ν•΄μ„œ μž¬μ‚¬μš©ν•˜λŠ” 방법을 λ§ν•œλ‹€.
  • μ™œ?
  • 상속은 μΊ‘μŠν™”λ₯Ό μœ„λ°˜ν•˜κ³  섀계λ₯Ό μœ μ—°ν•˜μ§€ λͺ»ν•˜κ²Œ λ§Œλ“ λ‹€.
  • μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ‹œμ§€λ₯Ό ν†΅ν•΄μ„œλ§Œ μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜λŠ” 방법을 합성이라고 λΆ€λ₯Έλ‹€.
  • 합성은 μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ‹œμ§€λ₯Ό ν†΅ν•΄μ„œλ§Œ μž¬μ‚¬μš©μ΄ κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— κ΅¬ν˜„μ„ 효과적으둜 μΊ‘μŠν™”ν•  수 μžˆλ‹€. λ˜ν•œ μ˜μ‘΄ν•˜λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό κ΅μ²΄ν•˜λŠ” 것이 비ꡐ적 쉽기 λ•Œλ¬Έμ— 섀계λ₯Ό μœ μ—°ν•˜κ²Œ λ§Œλ“ λ‹€.
  • μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” 상속보닀 합성을 μ„ ν˜Έν•˜λŠ” 것이 μ˜³μ§€λ§Œ λ‹€ν˜•μ„±μ„ μœ„ν•΄ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μž¬μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” 상속과 합성을 ν•¨κ»˜ μ‘°ν•©ν•΄μ„œ μ‚¬μš©ν•  μˆ˜λ°–μ— μ—†λ‹€.
    • Swift의 경우 Protocol extension으둜 κΈ°λ³Έ κ΅¬ν˜„μ„ μ œκ³΅ν•˜κΈ°μ— 상속을 κΌ­ μ‚¬μš©ν•˜μ§€ μ•Šμ•„λ„ μΈν„°νŽ˜μ΄μŠ€μ˜ μž¬μ‚¬μš© 및 λ‹€ν˜•μ„±μ„ μΆ©λΆ„νžˆ 달성할 수 μžˆλ‹€.

 

❓ μ§ˆλ¬Έ

 

πŸ“š 3쀄 μ†Œκ°

  • μ•„λ¬΄λž˜λ„ Swiftλ₯Ό 주둜 μ‚¬μš©ν•˜λ‹€λ³΄λ‹ˆ POP도 μƒκ°ν•˜λ©΄μ„œ 보게 λ˜μ—ˆλ‹€.
  • μ™œ Apple이 OOP보닀도 POPλ₯Ό ꢌμž₯ν•˜λŠ”μ§€ μ•Œκ²Œ λ˜λŠ” κ³Όμ •μ΄μ—ˆλ‹€.
  • Swift의 Protocol을 μ‚¬μš©ν•˜λ©΄ 섀계 κ΄€μ μ—μ„œλ„, μ„±λŠ₯μƒμœΌλ‘œλ„ 이점이 μžˆλ‹€.