λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μŠ€ν„°λ””/였브젝트

[였브젝트] 12μž₯ 'λ‹€ν˜•μ„±'

by moon101 2022. 12. 30.
12μž₯μ—μ„œλŠ” 객체지ν–₯의 핡심 λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜μΈ λ‹€ν˜•μ„±μ— λŒ€ν•΄ μ„€λͺ…ν•œλ‹€. 특히, λ‹€ν˜•μ„± μ€‘μ—μ„œ μ„œλΈŒνƒ€μž… λ‹€ν˜•μ„±μ— λŒ€ν•΄ μ•Œμ•„λ³΄κ³  λŸ°νƒ€μž„μ— λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•  μ μ ˆν•œ λ©”μ„œλ“œλ₯Ό 찾을 λ•Œ μ‚¬μš©ν•˜λŠ” 동적 λ©”μ„œλ“œ 탐색 기법에 λŒ€ν•΄ μ•Œ 수 μžˆλ‹€. 

 

λ‹€ν˜•μ„±μ€ λŸ°νƒ€μž„μ— λ©”μ‹œμ§€λ₯Ό μ²˜λ¦¬ν•˜κΈ°μ— μ ν•©ν•œ λ©”μ„œλ“œλ₯Ό λ™μ μœΌλ‘œ νƒμƒ‰ν•˜λŠ” 과정을 톡해 κ΅¬ν˜„λ˜λ©°, 상속은 이런 λ©”μ„œλ“œλ₯Ό μ°ΎκΈ° μœ„ν•œ μΌμ’…μ˜ 탐색 경둜λ₯Ό 클래슀 κ³„μΈ΅μ˜ ν˜•νƒœλ‘œ κ΅¬ν˜„ν•˜κΈ° μœ„ν•œ 방법이닀(p.390)

 

λ‹€ν˜•μ„±(Polymorphism)μ΄λž€ ν•˜λ‚˜μ˜ 좔상 μΈν„°νŽ˜μ΄μŠ€μ— λŒ€ν•΄ μ„œλ‘œ λ‹€λ₯Έ κ΅¬ν˜„μ„ μ—°κ²°ν•  수 μžˆλŠ” λŠ₯λ ₯이닀. 즉, μ—¬λŸ¬ νƒ€μž…μ„ λŒ€μƒμœΌλ‘œ λ™μž‘ν•  수 μžˆλŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆλŠ” 방법이닀. 

 

λ‹€ν˜•μ„±μ€ μœ λ‹ˆλ²„μ„€ λ‹€ν˜•μ„±, μž„μ‹œ λ‹€ν˜•μ„±μœΌλ‘œ λΆ„λ₯˜λ˜λ©°, μœ λ‹ˆλ²„μ„€ λ‹€ν˜•μ„±μ€ λ§€κ°œλ³€μˆ˜, 포함 λ‹€ν˜•μ„±μœΌλ‘œ λ‚˜λ‰˜κ³ , μž„μ‹œ λ‹€ν˜•μ„±μ€ μ˜€λ²„λ‘œλ”©, κ°•μ œ λ‹€ν˜•μ„±μœΌλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€. ν•˜μ§€λ§Œ ν”νžˆ λ‹€ν˜•μ„±μ„ μ–˜κΈ°ν•  λ•ŒλŠ” 포함 λ‹€ν˜•μ„±, λ˜λŠ” μ„œλΈŒνƒ€μž… λ‹€ν˜•μ„±μ„ λ§ν•œλ‹€. 

 

포함 λ‹€ν˜•μ„±μ€ λ©”μ‹œμ§€κ°€ λ™μΌν•˜λ”λΌλ„ μˆ˜μ‹ ν•œ 객체의 νƒ€μž…μ— 따라 μ‹€μ œλ‘œ μˆ˜ν–‰λ˜λŠ” 행동이 λ‹¬λΌμ§€λŠ” 것을 λ§ν•œλ‹€. 

그리고 μƒμ†μ˜ λͺ©μ μ€ μž¬μ‚¬μš©μ΄ μ•„λ‹ˆλΌ 포함 λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆλŠ” μ„œλΈŒνƒ€μž… κ΅¬ν˜„μ΄λ‹€. 상속은 두 클래슀λ₯Ό μƒμ†κ΄€κ³„λ‘œ μ—°κ²°(νƒ€μž… 계측/type hierarchies ꡬ좕)ν•  수 있게 ν•΄ μ€€λ‹€. 그럼 μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•œ ν›„ ν΄λΌμ΄μ–ΈνŠΈλŠ” λΆ€λͺ¨ 클래슀만 μ°Έμ‘°ν•˜λ©΄ 포함 λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆλ‹€.  

 

상속 λ©”μ»€λ‹ˆμ¦˜μ„ μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ”

 

μ—…μΌ€μŠ€νŒ…(upcasting) : λΆ€λͺ¨ 클래슀 νƒ€μž…μœΌλ‘œ μ„ μ–Έλœ λ³€μˆ˜μ— μžμ‹ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό ν• λ‹Ήν•˜λŠ” 것

Lecture lecture = new GradeLecture(...);

동적 λ©”μ„œλ“œ 탐색 : 동적 λ©”μ„œλ“œ 탐색은 1. μžλ™μ μΈ λ©”μ‹œμ§€ μœ„μž„, 2. 동적인 λ¬Έλ§₯의 μ›λ¦¬λ‘œ ꡬ성됨

동적 바인딩(dynamic binding) : 객체지ν–₯ μ–Έμ–΄μ—μ„œ λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜λŠ” 방법은 λ©”μ‹œμ§€λ₯Ό 전솑(dispatching)ν•˜λŠ” 것. λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν–ˆμ„ λ•Œ 싀행될 λ©”μ„œλ“œκ°€ λŸ°νƒ€μž„μ— κ²°μ •λ˜λ©°, μ΄λŸ¬ν•œ 방식을 동적 바인딩 λ˜λŠ” 지연 바인딩(late binding)이라고 함

self μ°Έμ‘°(self reference) : μžλ°”μ—μ„œλŠ” this라고 λΆ€λ₯Έλ‹€. λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œ 객체λ₯Ό 가리킀며, λ©”μ„œλ“œ 탐색 κ²½λ‘œλŠ” self μ°Έμ‘°λ₯Ό μ΄μš©ν•΄ κ²°μ •λœλ‹€. λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•˜λŠ” 객체의 ν΄λž˜μŠ€μ— 따라 λ©”μ„œλ“œλ₯Ό 탐색할 μ‹œμž‘ μœ„μΉ˜κ°€ λ™μ μœΌλ‘œ 결정됨

super μ°Έμ‘°(super reference) : λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜λŠ” 클래슀의 λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œλΆ€ν„° λ©”μ„œλ“œ 탐색을 μ‹œμž‘ν•  수 μžˆλ„λ‘ 함 

 

에 λŒ€ν•΄ 이해할 수 μžˆμ–΄μ•Ό ν•œλ‹€. 

 

 

이번 μž₯도 μ’€ μ‰¬μšΈ 쀄 μ•Œμ•˜λŠ”λ° 생각보닀 μ–΄λ €μš΄ κ°œλ…λ“€μ΄ 많이 λ‚˜μ™”λ˜ μž₯인 것 κ°™λ‹€. 그리고 μžλ°” 문법도 μ΅μˆ™ν•˜μ§€ μ•Šμ€ Integer::intValue 같은 것듀이 많이 λ‚˜μ™€μ„œ 더 μ–΄λ ΅κ²Œ λŠκ»΄μ‘Œλ‹€. 

 

// TODO

stream, mapToInt, Collections.unmodifiableList λ“± κ³΅λΆ€ν•˜κΈ°


μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν΄λž˜μŠ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•Šκ³  였직 객체만 μ‘΄μž¬ν•˜λŠ” ν”„λ‘œν† νƒ€μž… 기반의 객체지ν–₯ 언어이며, 상속을 κ΅¬ν˜„ν•˜λŠ” 방법은 객체 μ‚¬μ΄μ˜ μœ„μž„μ„ μ΄μš©ν•˜λŠ” 것이닀. 

λŒ“κΈ€