1μž₯

p28-29

λ””μžμΈ νŒ¨ν„΄μ€ "νŠΉμ •ν•œ μ „ν›„ κ΄€κ³„μ—μ„œ 일반적 섀계 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ μƒν˜Έκ΅λ₯˜ν•˜λŠ” μˆ˜μ •κ°€λŠ₯ν•œ 객체와 ν΄λž˜μŠ€λ“€μ— λŒ€ν•œ μ„€λͺ…"μž…λ‹ˆλ‹€.

일반적으둜 ν•˜λ‚˜μ˜ λ””μžμΈ νŒ¨ν„΄μ—λŠ” λ„€ κ°€μ§€ μš”μ†Œκ°€ λ°˜λ“œμ‹œ λ“€μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  1. νŒ¨ν„΄ 이름

  2. 문제

  3. 해법

  4. κ²°κ³Ό

p42

μΈν„°νŽ˜μ΄μŠ€λž€

객체가 μ„ μ–Έν•˜λŠ” λͺ¨λ“  연산은 μ—°μ‚°μ˜ 이름, λ§€κ°œλ³€μˆ˜λ‘œ λ°›μ•„λ“€μ΄λŠ” 객체듀, μ—°μ‚°μ˜ λ°˜ν™˜ 값을 λͺ…μ„Έν•©λ‹ˆλ‹€. 이λ₯Ό μ—°μ‚°μ˜ μ‹œκ·Έλ‹ˆμ³(signature)라고 ν•©λ‹ˆλ‹€. μΈν„°νŽ˜μ΄μŠ€(interface)λŠ” 객체가 μ •μ˜ν•˜λŠ” μ—°μ‚°μ˜ λͺ¨λ“  μ‹œκ·Έλ‹ˆμ²˜λ“€μ„ μΌμ»«λŠ” 말둜 객체의 μΈν„°νŽ˜μ΄μŠ€λŠ” 객체가 λ°›μ•„μ„œ μ²˜λ¦¬ν•  수 μžˆλŠ” μ—°μ‚°μ˜ μ§‘ν•©μž…λ‹ˆλ‹€.

νƒ€μž…μ΄λž€

  • νƒ€μž…(type)은 νŠΉμ • μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ‚˜νƒ€λ‚Ό λ•Œ μ‚¬μš©ν•˜λŠ” μ΄λ¦„μž…λ‹ˆλ‹€. 객체가 "Windows" νƒ€μž…μ„ κ°–λŠ”λ‹€λŠ” 것은 "Window" μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜ν•œ 연산듀을 λͺ¨λ‘ μ²˜λ¦¬ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. κ°μ²΄λŠ” μ—¬λŸ¬ νƒ€μž…μ„ κ°€μ§ˆ 수 있고, μ„œλ‘œ λ‹€λ₯Έ 객체가 ν•˜λ‚˜μ˜ νƒ€μž…μ„ κ³΅μœ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

  • λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό ν¬ν•¨ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ„œλΈŒνƒ€μž…(subtype)이라고 ν•˜κ³ , λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€κ°€ ν¬ν•¨ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό μŠˆνΌνƒ€μž…(supertype)이라 ν•©λ‹ˆλ‹€. μ„œλΈŒνƒ€μž…μ€ μŠˆνΌνƒ€μž…μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ†ν•œλ‹€κ³  μ΄μ•ΌκΈ°ν•©λ‹ˆλ‹€. μ„œλΈŒνƒ€μž…μ΄ μŠˆνΌνƒ€μž…μ„ μƒμ†ν•˜λ©΄, μ„œλΈŒνƒ€μž…μ€ μŠˆνΌνƒ€μž…μ— μ •μ˜λœ 연산을 ν¬ν•¨ν•˜κ²Œ λ©λ‹ˆλ‹€.

동적 λ°”μΈλ”©μ΄λž€

  • 동적 바인딩은 μš”μ²­μ΄ μ–΄λ–»κ²Œ κ΅¬ν˜„λ˜μ–΄ μ–΄λ–€ κ²°κ³Όλ₯Ό λ§Œλ“€μ–΄ λ‚Όμ§€λ₯Ό λŸ°νƒ€μž„μ— κ²°μ •ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

  • λ˜ν•œ 동적 바인딩은 ν”„λ‘œκ·Έλž¨μ΄ κΈ°λŒ€ν•˜λŠ” 객체λ₯Ό λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°–λŠ” λ‹€λ₯Έ 객체둜 λŒ€μ²΄ν•  수 있게 ν•΄ μ€λ‹ˆλ‹€. 이런 λŒ€μ²΄μ„±μ„ μš°λ¦¬λŠ” λ‹€ν˜•μ„±(polymorphism)이라고 ν•˜λŠ”λ°, μ΄λŠ” 객체지ν–₯ μ‹œμŠ€ν…œμ˜ 핡심 κ°œλ…μž…λ‹ˆλ‹€.

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

  • λ””μžμΈ νŒ¨ν„΄μ€ μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜ν•΄μ•Ό ν•˜λŠ” μ€‘μš” μš”μ†Œκ°€ 무엇이고 μ–΄λ–€ μ’…λ₯˜μ˜ 데이터λ₯Ό μ£Όκ³ λ°›μ•„μ•Ό ν•˜λŠ”μ§€ μ‹λ³„ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

  • λ””μžμΈ νŒ¨ν„΄μ€ μΈν„°νŽ˜μ΄μŠ€ κ°„μ˜ 관련성도 μ •μ˜ν•©λ‹ˆλ‹€. 특히 클래슀 간에 μœ μ‚¬ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ •μ˜ν•˜λ„λ‘ ν•˜κ±°λ‚˜ 클래슀의 μΈν„°νŽ˜μ΄μŠ€μ— μ—¬λŸ¬ κ°€μ§€ μ œμ•½μ„ μ •μ˜ν•©λ‹ˆλ‹€.

48p

κ΅¬ν˜„μ΄ μ•„λ‹Œ μΈν„°νŽ˜μ΄μŠ€μ— 따라 ν”„λ‘œκ·Έλž˜λ°ν•©λ‹ˆλ‹€.

  • λ”°λΌμ„œ μ–΄λ–€ λ³€μˆ˜(객체)λ₯Ό ꡬ체 클래슀의 μΈμŠ€ν„΄μŠ€λ‘œ μ„ μ–Έν•˜λŠ” 일은 ν”Όν•΄μ•Ό ν•©λ‹ˆλ‹€.

  • λŒ€μ‹  좔상 클래슀의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ”°λ₯΄λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ₯Ό μ •μ˜ν•©λ‹ˆλ‹€.

  • μ΄λ ‡κ²Œ μ •μ˜ν•˜λŠ” 것이 이 책에 κΈ°μˆ ν•œ λ””μžμΈ νŒ¨ν„΄μ˜ 일반적 방식이며 ν˜•νƒœμž…λ‹ˆλ‹€.

50p

객체 합성이 클래슀 상속보닀 더 λ‚˜μ€ λ°©λ²•μž…λ‹ˆλ‹€.

  • 클래슀 상속보닀 객체 합성을 더 μ„ ν˜Έν•˜λŠ” μ΄μœ λŠ” 각 클래슀의 μΊ‘μŠν™”λ₯Ό μœ μ§€ν•  수 있고, 각 클래슀의 ν•œ κ°€μ§€ μž‘μ—…μ— 집쀑할 수 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€. κ°μ²΄λŠ” μΈν„°νŽ˜μ΄μŠ€μ— 맞좰 κ΅¬ν˜„λ˜λ―€λ‘œ κ΅¬ν˜„ μ‚¬μ΄μ˜ 쒅속성은 ν™•μ‹€νžˆ μ€„μ–΄λ“­λ‹ˆλ‹€.

μœ„μž„μ€ 합성을 μƒμ†λ§ŒνΌ κ°•λ ₯ν•˜κ²Œ λ§Œλ“œλŠ” λ°©λ²•μž…λ‹ˆλ‹€.

  • μœ„μž„μ˜ κ°€μž₯ μ€‘μš”ν•œ μž₯점은 λŸ°νƒ€μž„μ— ν–‰λ™μ˜ 볡합을 κ°€λŠ₯ν•˜κ²Œ ν•˜κ³ , λ³΅ν•©ν•˜λŠ” 방식도 λ³€κ²½ν•΄ μ€€λ‹€λŠ” μ μž…λ‹ˆλ‹€. Window 객체가 λŸ°νƒ€μž„μ— Rectangle μΈμŠ€ν„΄μŠ€λ₯Ό Circle μΈμŠ€ν„΄μŠ€λ‘œ λŒ€μ²΄ν•˜λ©΄ μ›ν˜•μ˜ μœˆλ„μš°κ°€ 될 κ²ƒμž…λ‹ˆλ‹€.

  • μœ„μž„μ΄ κ°–λŠ” 단점은, 객체 합성을 톡해 μ†Œν”„νŠΈμ›¨μ–΄ μ„€κ³„μ˜ μœ μ—°μ„±μ„ 보μž₯ν•˜λŠ” 방법과 λ™μΌν•˜κ²Œ 동적인데닀가 κ³ λ„λ‘œ λ§€κ°œλ³€μˆ˜ν™”λœ μ†Œν”„νŠΈμ›¨μ–΄λŠ” 정적인 μ†Œν”„νŠΈμ›¨μ–΄ ꡬ쑰보닀 μ΄ν•΄ν•˜κΈ°κ°€ 더 μ–΄λ ΅λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

p53

  • 객체지ν–₯ μ‹œμŠ€ν…œμ—μ„œ 행동을 볡합할 수 μžˆλŠ” 방법은 μ„Έ κ°€μ§€κ°€ μžˆλ‹€.

    • 객체 ν•©μ„±

      • λŸ°νƒ€μž„μ— 행동을 λ³€κ²½ν•  수 μžˆμ§€λ§Œ, 행동이 μœ„μž„λ˜κΈ° λ•Œλ¬Έμ— λΉ„νš¨μœ¨μ μΌ 수 μžˆλ‹€.

    • 상속 vs λ§€κ°œλ³€μˆ˜ν™”λœ νƒ€μž…

      • 상속은 연산에 λŒ€ν•œ κΈ°λ³Έ 행동을 λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ μ œκ³΅ν•˜κ³  이λ₯Ό μ„œλΈŒν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜λ„λ‘ ν•˜λŠ” 것

      • λ§€κ°œλ³€μˆ˜ν™”λœ νƒ€μž…μ€ ν΄λž˜μŠ€κ°€ μ‚¬μš©ν•˜λŠ” νƒ€μž…μ„ λ³€κ²½ν•˜κ²Œ ν•˜λŠ” 것

      • 상속도 λ§€κ°œλ³€μˆ˜ν™”λœ νƒ€μž…μ΄λΌ λ³Ό 수 μžˆμ§€λ§Œ, λŸ°νƒ€μž„μ— 변경이 μΌμ–΄λ‚˜μ§€λŠ” μ•ŠλŠ”λ‹€.

    • λ§€κ°œλ³€μˆ˜ν™”λœ νƒ€μž…μ˜ μ˜ˆμ‹œ

      • Ada, Eiffel의 Generic

      • C++의 template

62p

λ””μžμΈ νŒ¨ν„΄μ„ κ³ λ₯΄λŠ” 방법

  • νŒ¨ν„΄μ΄ μ–΄λ–»κ²Œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”μ§€ νŒŒμ•…ν•©μ‹œλ‹€.

  • νŒ¨ν„΄μ˜ μ˜λ„ 뢀뢄을 λ΄…μ‹œλ‹€.

  • νŒ¨ν„΄λ“€ κ°„μ˜ 관련성을 νŒŒμ•…ν•©μ‹œλ‹€.

  • λΉ„μŠ·ν•œ λͺ©μ μ˜ νŒ¨ν„΄λ“€μ„ λͺ¨μ•„μ„œ κ³΅λΆ€ν•©μ‹œλ‹€.

  • μž¬μ„€κ³„μ˜ 원인을 νŒŒμ•…ν•©μ‹œλ‹€.

  • μ„€κ³„μ—μ„œ 가변성을 κ°€μ Έμ•Ό ν•˜λŠ” 뢀뢄이 무엇인지 νŒŒμ•…ν•©μ‹œλ‹€.

Last updated