[JAVA] 11. 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°7. λ‹€ν˜•μ„±

2022. 4. 21. 21:36ㆍJAVA/μžλ°”μ˜ 정석

728x90

 

1️⃣ λ‹€ν˜•μ„±(polymorphism)

객체지ν–₯κ°œλ…μ—μ„œ λ‹€ν˜•μ„±μ΄λž€ 'μ—¬λŸ¬κ°€μ§€ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯'을 μ˜λ―Έν•˜λ©°, μžλ°”μ—μ„œλŠ” ν•œ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ ν•˜μ—¬ μ—¬λŸ¬ νƒ€μž…μ˜ 객체λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•¨μœΌλ‘œμ¨ λ‹€ν˜•μ„±μ„ ν”„λ‘œκ·Έλž¨μ μœΌλ‘œ κ΅¬ν˜„ν•˜μ˜€λ‹€. 

-> μ‘°μƒν΄λž˜μŠ€ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μžμ†ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•˜μ˜€λ‹€. 

 

Tv  t = new Tv();

Tv  t2 = new SmartTv();

SmartTv t3 = new SmartTv();

-> Tv μ°Έμ‘° λ³€μˆ˜λ‘œλŠ” SmartTv μΈμŠ€ν„΄μŠ€ μ€‘μ—μ„œ Tv 클래슀의 λ©€λ²„λ“€λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€. 

λ‘˜ λ‹€ 같은 νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€μ§€λ§Œ μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ— 따라 μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ κ°œμˆ˜κ°€ 달라진닀. 

 

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

 

μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ΄ μ°Έμ‘°λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜κ³  μž‡λŠ” μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ 개수λ₯Ό κ²°μ •ν•œλ‹€λŠ” 사싀을 이해해야 ν•œλ‹€!!

 

μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μžμ†νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€. 
λ°˜λŒ€λ‘œ μžμ†νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  μˆ˜λŠ” μ—†λ‹€. 

 

 

2️⃣ μ°Έμ‘°λ³€μˆ˜μ˜ ν˜•λ³€ν™˜

-> μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ 개수λ₯Ό μ‘°μ ˆν•˜λŠ” 것 , ν˜•λ³€ν™˜ ν•˜λŠ” μ΄μœ κ°€ λ°”λ‘œ μ°Έμ‘°λ³€μˆ˜λ₯Ό λ³€κ²½ν•¨μœΌλ‘œμ¨ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„μ˜ 갯수λ₯Ό μ‘°μ ˆν•˜κΈ° μœ„ν•΄μ„œμ΄λ‹€. 

μžμ† νƒ€μž… -> 쑰상 νƒ€μž… (Up-casting) : ν˜•λ³€ν™˜ μƒλž΅ κ°€λŠ₯ 
쑰상 νƒ€μž… -> μžμ† νƒ€μž… (Down-casting) : ν˜•λ³€ν™˜ μƒλž΅ λΆˆκ°€ 

쑰상 νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μžμ†νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 것을 λ‹€μš΄μΊμŠ€νŒ…μ΄λΌκ³  ν•˜λ©°, 

μžμ† νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ λ³€ν™˜ν•˜λŠ” 것을 μ—…μΊμŠ€νŒ…μ΄λΌκ³  ν•œλ‹€. 

- μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μžμ†νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜μ— μ €μž₯ν•  경우 ν˜•λ³€ν™˜μ„ μƒλž΅ν•  수 μ—†λ‹€. λͺ…μ‹œμ μœΌλ‘œ ν˜•λ³€ν™˜μ„ ν•΄μ€˜μ•Όν•œλ‹€. 

 

ν˜•λ³€ν™˜μ€ μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” 것이지 μΈμŠ€ν„΄μŠ€λ₯Ό λ³€ν™˜ν•˜λŠ” 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ°Έμ‘°λ³€μˆ˜μ˜ ν˜•λ³€ν™˜μ€ μΈμŠ€ν„΄μŠ€μ— μ•„λ¬΄λŸ° 영ν–₯을 λ―ΈμΉ˜μ§€ μ•ŠλŠ”λ‹€. 

단지 μ°Έμ‘°λ³€μˆ˜μ˜ ν˜•λ³€ν™˜μ„ ν†΅ν•΄μ„œ, μ°Έμ‘°ν•˜κ³  μžˆλŠ” μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©€λ²„λ²”μœ„λ₯Ό μ‘°μ ˆν•˜λŠ” 것 뿐이닀. 

 

-> 캐슀트 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•΄μ„œ μ‘°μƒνƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ₯Ό μžμ†νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ ν˜•λ³€ν™˜ν•œκ²ƒμ΄κΈ° λ•Œλ¬Έμ— λ¬Έμ œκ°€ μ—†μ–΄λ³΄μ΄μ§€λ§Œ μ°Έμ‘°λ³€μˆ˜ carκ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” μΈμŠ€ν„΄μŠ€κ°€ Car νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λΌλŠ”λ° μžˆλ‹€. 

전체 배운 것 처럼 μ‘°μƒνƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μžμ†νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μ°Έμ‘°ν•˜λŠ” 것은 ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€. 

 

μ»΄νŒŒμΌμ‹œμ—λŠ” μ°Έμ‘°λ³€μˆ˜κ°„μ˜ νƒ€μž…λ§Œ μ²΄ν¬ν•˜κΈ° λ•Œλ¬Έμ— μ‹€ν–‰ μ‹œ 생섀될 μΈμŠ€ν„΄μŠ€μ˜ νƒ€μž…μ— λŒ€ν•΄μ„œλŠ” μ „ν˜€ μ•Œμ§€ λͺ»ν•œλ‹€. 

κ·Έλž˜μ„œ μ»΄νŒŒμΌμ‹œμ—λŠ” λ¬Έμ œκ°€ μ—†μ—ˆμ§€λ§Œ μ‹€ν–‰μ‹œμ—λŠ” μ—λŸ¬κ°€ λ°œμƒν•˜μ—¬ 싀행이 λΉ„μ •μƒμ μœΌλ‘œ μ’…λ£Œλœ 것이닀. 

 

μ„œλ‘œ 상속관계에 μžˆλŠ” νƒ€μž…κ°„μ˜ ν˜•λ³€ν™˜μ€ μ–‘λ°©ν–₯으둜 자유둭게 μˆ˜ν–‰λ  수 μžˆμœΌλ‚˜, μ°Έμ‘°λ³€μˆ˜κ°€ κ°€λ¦¬ν‚€λŠ” μΈμŠ€ν„΄μŠ€μ˜ μžμ†νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ€ ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€. 
κ·Έλž˜μ„œ μ°Έμ‘°λ³€μˆ˜κ°€ κ°€λ¦¬ν‚€λŠ” μΈμŠ€ν„΄μŠ€μ˜ νƒ€μž…μ΄ 무엇인지 ν™•μΈν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€. 

 

3️⃣ instanceof μ—°μ‚°μž

μ°Έμ‘°λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜κ³  μžˆλŠ” μΈμŠ€ν„΄μŠ€μ˜ μ‹€μ œ νƒ€μž…μ„ μ•Œμ•„λ³΄κΈ° μœ„ν•΄ instanceof μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€. 

주둜 쑰건문에 μ‚¬μš©λ˜κ³ , instanceof의 μ™Όμͺ½μ—λŠ” μ°Έμ‘°λ³€μˆ˜λ₯Ό 였λ₯Έμͺ½μ—λŠ” νƒ€μž…(클래슀λͺ…)이 ν”Όμ—°μ‚°μžλ‘œ μœ„μΉ˜ν•œλ‹€.

그리고 μ—°μ‚°μ˜ 결과둜 boolean 값인 true와 false μ€‘μ˜ ν•˜λ‚˜λ₯Ό λ°˜ν™˜ν•œλ‹€. 

 

instanceofλ₯Ό μ΄μš©ν•œ μ—°μ‚° 결과둜 trueλ₯Ό μ–»μ—ˆλ‹€λŠ” 것은 μ°Έμ‘°λ³€μˆ˜κ°€ κ²€μ‚¬ν•œ νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 것을 λœ»ν•œλ‹€. 

 

-> μ–΄λ–€ νƒ€μž…μ— λŒ€ν•œ instaceofμ—°μ‚°μ˜ κ²°κ³Όκ°€ trueλΌλŠ” 것은 κ²€μ‚¬ν•œ νƒ€μž…μœΌλ‘œ ν˜•λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€λŠ” 것을 λœ»ν•œλ‹€. 

 

 

 

 

 

 

 

 

 

 

728x90