[Java] λ‹€ν˜•μ„±(polymorphism)

2021. 9. 18. 01:02γ†κ°œλ… 정리 μž‘μ—…μ‹€/Java

728x90
λ°˜μ‘ν˜•

πŸ“Œ λ‹€ν˜•μ„±μ΄λž€?


상속과 ν•¨κ»˜ 객체지ν–₯ κ°œλ…μ˜ μ€‘μš”ν•œ νŠΉμ§• 쀑 ν•˜λ‚˜μΈ λ‹€ν˜•μ„±μ€ 상속과 κΉŠμ€ 관계가 μžˆλŠ” κ²ƒμ΄μ—μš”.

객체지ν–₯ κ°œλ…μ—μ„œ λ‹€ν˜•μ„±μ΄λž€ 'μ—¬λŸ¬ 가지 ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯'을 μ˜λ―Έν•˜κ³ , μžλ°”μ—μ„œλŠ” ν•œ μžλ£Œν˜• νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μ—¬λŸ¬ νƒ€μž…μ˜ 객체λ₯Ό μ°Έκ³ ν•  수 μžˆλ„λ‘ ν•¨μœΌλ‘œ λ‹€ν˜•μ„±μ„ 포둜그램적으둜 κ΅¬ν˜„ν•œ κ²ƒμ΄μ—μš”.

즉, 쑰상 Class μžλ£Œν˜• νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μžμ† 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•˜μ˜€λ‹€μΈ κ²ƒμ΄μ—μš”.

 

 

Tv Class와 CaptionTv Classκ°€ 이와 같이 μ •μ˜λ˜μ–΄ μžˆλ‹€κ³  ν•  λ•Œ, 두 Class κ°„μ˜ 관계 그림은 μ•„λž˜μ™€ 같은 κ²ƒμ΄μ—μš”.

 

남ꢁ성 - μžλ°”μ˜ 정석 δΈ­

 

Tv Class와 CaptionTv ClassλŠ” μ„œλ‘œ 상속 관계에 있고, 이 두 Class의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜κ³ , μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ•„λž˜μ™€ 같이 ν•  수 μžˆλŠ” κ²ƒμ΄μ—μš”.

 

λ‹€ν˜•μ„± μ΄μ „μ—λŠ” μžλ°”μ—μ„œ μƒμ„±λœ μΈμŠ€ν„΄μŠ€λ₯Ό 닀루기 μœ„ν•΄ μΈμŠ€ν„΄μŠ€μ˜ μžλ£Œν˜• νƒ€μž…κ³Ό μΌμΉ˜ν•˜λŠ” νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ§Œ μ‚¬μš©ν–ˆμ—ˆλ˜ κ²ƒμ΄μ—μš”. 즉, TvμΈμŠ€ν„΄μŠ€λ₯Ό 닀루기 μœ„ν•΄ Tv μžλ£Œν˜• νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜κ³ , CaptionTv μΈμŠ€ν„΄μŠ€λ₯Ό 닀루기 μœ„ν•΄μ„œλŠ” CaptionTv νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ₯Ό μ‚¬μš©ν•΄μ•Ό ν–ˆλ˜ κ²ƒμ΄μ—μš”.

이처럼 μΈμŠ€ν„΄μŠ€μ˜ μžλ£Œν˜• νƒ€μž…κ³Ό μ°Έμ‘° λ³€μˆ˜μ˜ μžλ£Œν˜• νƒ€μž…μ΄ μΌμΉ˜ν•˜λŠ” 것이 λ³΄ν†΅μ΄μ§€λ§Œ, Tv와 CaptionTv Classκ°€ μ„œλ‘œ 상속 관계에 μžˆμ„ 경우 μ•„λž˜μ™€ 같이 쑰상 Class의 μ°Έμ‘° λ³€μˆ˜λ‘œ μžμ† Class의 μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  μˆ˜λ„ μžˆλŠ” κ²ƒμ΄μ—μš”.

 

λ°˜μ‘ν˜•

κ·Έλ ‡λ‹€λ©΄ μΈμŠ€ν„΄μŠ€λ₯Ό 같은 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μ°Έμ‘°ν•˜λŠ” 것과 μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μ°Έμ‘°ν•˜λŠ” 것은 μ–΄λ–€ 차이가 μžˆμ„κΉŒμš”?

 

 

 

μœ„μ˜ μ½”λ“œμ—μ„œ CaptionTv μΈμŠ€ν„΄μŠ€ 2개λ₯Ό μƒμ„±ν•˜λŠ”λ°, μ°Έμ‘° λ³€μˆ˜ c와 vκ°€ μƒμ„±λœ μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜λ‚˜μ”© μ°Έμ‘°ν•˜λ„λ‘ ν•œ κ²ƒμ΄μ—μš”. 이 경우 μ‹€μ œ μΈμŠ€ν„΄μŠ€κ°€ CaptionTv μžλ£Œν˜• νƒ€μž…μ΄λΌλ„ μ°Έμ‘° λ³€μˆ˜ vλ‘œλŠ” captionTv μΈν„΄μŠ€μ˜ λͺ¨λ“  멀버λ₯Ό μ‚¬μš©ν•  수 μ—†λŠ” κ²ƒμ΄μ—μš”.

Tv μžλ£Œν˜• νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œλŠ” CaptionTv μΈμŠ€ν„΄μŠ€ 쀑 Tv Class의 멀버듀(상속받은 멀버 포함)만 μ‚¬μš©ν•  수 μžˆλŠ” κ²ƒμ΄μ§€μš”. λ”°λΌμ„œ μƒμ„±λœ CaptionTv μΈμŠ€ν„΄μŠ€μ˜ 멀버 쀑 Tv Class에 μ •μ˜ λ˜μ§€ μ•Šμ€ 멀버, text와 caption()은 μ°Έμ‘°λ³€μˆ˜ vλ‘œλŠ” μ‚¬μš©μ΄ λΆˆκ°€λŠ₯ν•œ κ²ƒμ΄μ—μš”.

즉, v.textλ‚˜, v.caption()와 같이 ν•  수 μ—†λ‹€λŠ” κ²ƒμ΄μ§€μš”. λ‘˜ λ‹€ 같은 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€μ§€λ§Œ, μ°Έμ‘° λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜κ°€ λ‹¬λΌμ§„λ‹΅λ‹ˆλ‹€! 

 

λ§Œμ•½ λ°˜λŒ€λ‘œ μžμ‹ μžλ£Œν˜• νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜μ— 쑰상 μžλ£Œν˜• νƒ€μž…μ— μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•œλ‹€λ©΄ μ–΄λ–¨κΉŒμš”?

 

이럴 κ²½μš°μ—” Compile Errorκ°€ λ‚˜λŠ” κ²ƒμ΄μ—μš”.

μ™œλƒν•˜λ©΄ μ‹€μ œ μΈμŠ€ν„΄μŠ€μΈ Tv의 멀버 κ°œμˆ˜λ³΄λ‹€ μ°Έμ‘° λ³€μˆ˜ cκ°€ μ‚¬μš©ν•  수 μžˆλŠ” 멀버 λ³€μˆ˜κ°€ 더 많기 λ•Œλ¬ΈμΈ κ²ƒμ΄μ—μš”.

κ·Έλž˜μ„œ μžλ°”λŠ” 이λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” κ²ƒμ΄μ—μš”.

CaptionTv Classμ—λŠ” text와 caption()이 μ •μ˜λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ°Έμ‘° λ³€μˆ˜ cλ‘œλŠ” c.text, c.caption()κ³Ό 같은 λ°©μ‹μœΌλ‘œ cκ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” μΈμŠ€ν„΄μŠ€μ—μ„œ text와 caption()을 μ‚¬μš©ν•˜λ € ν•  수 μžˆμ§€λ§Œ, cκ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” μΈμŠ€ν„΄μŠ€λŠ” Tv μžλ£Œν˜• νƒ€μž…μ΄κ³ , Tv μžλ£Œν˜• νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€μ—λŠ” text와 caption()이 μ—†κΈ° λ•Œλ¬Έμ— μ΄λ ‡κ²Œ μ‚¬μš©ν•˜λ €κ³  ν•˜λ©΄ Compile Errorκ°€ λ‚˜λŠ” κ²ƒμ΄μ—μš”.

πŸ’‘ μ°Έκ³  :

μ°Έμ‘° λ³€μˆ˜κ°€ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜λŠ” μΈμŠ€ν„΄μŠ€μ˜ 멀버 κ°œμˆ˜λ³΄λ‹€ κ°™κ±°λ‚˜ 적어야 ν•œλ‹€.

λͺ¨λ“  μ°Έμ‘° λ³€μˆ˜λŠ” null λ˜λŠ” 4byte μ£Όμ†Œκ°’μ΄ μ €μž₯되고, μ°Έμ‘° λ³€μˆ˜μ˜ μžλ£Œν˜• νƒ€μž…μ€ μ°Έμ‘°ν•  수 μžˆλŠ” 객체의 μ’…λ₯˜μ™€ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ 수λ₯Ό κ²°μ •.

쑰상 νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ μžμ† νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€ μ°Έμ‘° κ°€λŠ₯.
ν•˜.지.만 μžμ† νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ‘œ 쑰상 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€ μ°Έμ‘° λΆˆκ°€

 

 

β€» 이 글은 남ꢁ성 μ €μžμ˜ μžλ°”μ˜ 정석을 μ •λ¦¬ν•œ λ‚΄μš© μž…λ‹ˆλ‹€.

 

 


 

 

μ£Όλ‹ˆν•˜λž‘μ˜ 글이 λ§ˆμŒμ— λ“œμ…¨λ‚˜μš”? ꡬ독과 곡감! 그리고, λŒ“κΈ€μ€ μ£Όλ‹ˆν•˜λž‘μ—κ²Œ λ§Žμ€ 힘이 λ©λ‹ˆλ‹€

728x90
λ°˜μ‘ν˜•