λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

7-2상속(νƒ€μž… λ³€ν™˜κ³Ό λ‹€ν˜•μ„±)

μ‹œνλ¦¬ν‹°μ§€ν˜Έ 2023. 10. 9.

λ‹€ν˜•μ„± : λ‹€ν˜•성은 μ‚¬μš© 방법은 λ™μΌν•˜μ§€λ§Œ λ‹€μ–‘ν•œ 객체λ₯Ό μ΄μš©ν•΄μ„œ λ‹€μ–‘ν•œ μ‹€ν–‰κ²°κ³Όκ°€ λ‚˜μ˜€λ„λ‘ ν•˜λŠ” μ„±μ§ˆμ΄λ‹€. 예λ₯Ό λ“€μ–΄ μžλ™μ°¨κ°€ 타이어λ₯Ό μ‚¬μš©ν•˜λŠ” 방법은 λ™μΌν•˜μ§€λ§Œ μ–΄λ–€ 타이어λ₯Ό μ‚¬μš©(μž₯μ°©)ν•˜λŠλƒμ— 따라 μ£Όν–‰ μ„±λŠ₯이 λ‹¬λΌμ§ˆ 수 μžˆλ‹€.

 

*λ‹€ν˜•μ„± κ΅¬ν˜„

λ©”μ†Œλ“œ μž¬μ •μ˜ + νƒ€μž… λ³€ν™˜ 

 

μžλ™ νƒ€μž… λ³€ν™˜ : ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑에 μžλ™μ μœΌλ‘œ νƒ€μž… λ³€ν™˜μ΄ μΌμ–΄λ‚˜λŠ” 것을 λ§ν•œλ‹€.

ex)

λΆ€λͺ¨νƒ€μž… λ³€μˆ˜ = μžμ‹ νƒ€μž…;

 

νƒ€μž… λ³€ν™˜μ΄λž€ νƒ€μž…μ„ λ‹€λ₯Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” ν–‰μœ„λ₯Ό λ§ν•œλ‹€. ν΄λž˜μŠ€λ„ κΈ°λ³Ένƒ€μž… λ³€ν™˜κ³Ό 같이 νƒ€μž… λ³€ν™˜μ΄ μžˆλŠ”λ°, 클래슀의 λ³€ν™˜μ€ 상속 관계에 μžˆλŠ” 클래슀 μ‚¬μ΄μ—μ„œ λ°œμƒν•œλ‹€. μžμ‹μ€ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.

 

ex)

Animal 클래슀 (λΆ€λͺ¨)

Cat 클래슀 (μžμ‹)

 

Cat cat = new Cat();

Animal animal = cat; or Animal animal = new Cat();

 

*λ°”λ‘œ μœ„μ˜ λΆ€λͺ¨κ°€ μ•„λ‹ˆλ”λΌλ„ 상속 κ³„μΈ΅μ—μ„œ μƒμœ„ νƒ€μž…μ΄λΌλ©΄ μžλ™ νƒ€μž… λ³€ν™˜μ΄ 일어날 수 μžˆλ‹€.

 

클래슀 μžλ™ νƒ€μž… λ³€ν™˜ ν›„ μ‚¬μš©

λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜λœ μ΄ν›„μ—λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ†Œλ“œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€.

*μ˜ˆμ™Έκ°€ μžˆλŠ”λ°, λ©”μ†Œλ“œκ°€ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜(μ˜€λ²„λΌμ΄λ”©) λ˜μ—ˆλ‹€λ©΄ μžμ‹ 클래슀의 λ©”μ†Œλ“œκ°€ λŒ€μ‹  ν˜ΈμΆœλœλ‹€.

 

ν•„λ“œμ˜ λ‹€ν˜•μ„±

ν•„λ“œμ˜ νƒ€μž…μ„ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜λ©΄ λ‹€μ–‘ν•œ μžμ‹ 객체듀이 μ €μž₯될 수 있기 λ•Œλ¬Έμ— ν•„λ“œ μ‚¬μš© κ²°κ³Όκ°€ λ‹¬λΌμ§ˆ 수 μžˆλ‹€. 이λ₯Ό ν•„λ“œμ˜ λ‹€ν˜•μ„±μ΄λΌκ³  ν•œλ‹€.

 

λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆλŠ” 기술적 쑰건

1. λΆ€λͺ¨ 클래슀λ₯Ό μƒμ†ν•˜λŠ” μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨κ°€ κ°€μ§€κ³  μžˆλŠ” ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό κ°€μ§€κ³  μžˆμœΌλ‹ˆ μ‚¬μš© 방법이 λ™μΌν•˜λ‹€.

2. μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨μ˜ λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•΄μ„œ λ©”μ†Œλ“œμ˜ μ‹€ν–‰ λ‚΄μš©μ„ λ³€κ²½ν•¨μœΌλ‘œμ¨ 더 μš°μˆ˜ν•œ μ‹€ν–‰κ²°κ³Όκ°€ λ‚˜μ˜€κ²Œ ν•  수 μžˆλ‹€.

3. μžμ‹ νƒ€μž…μ„ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλ‹€.

 

맀개 λ³€μˆ˜μ˜ λ‹€ν˜•μ„±

μžλ™ νƒ€μž… λ³€ν™˜μ€ ν•„λ“œμ˜ 값을 λŒ€μž…ν•  λ•Œμ—λ„ λ°œμƒν•˜μ§€λ§Œ, 주둜 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 많이 λ°œμƒν•œλ‹€. λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œμ—λŠ” 맀개 λ³€μˆ˜μ˜ νƒ€μž…κ³Ό λ™μΌν•œ λ§€κ°œκ°’μ„ μ§€μ •ν•˜λŠ” 것이 μ •μ„μ΄μ§€λ§Œ, λ§€κ°œκ°’μ„ λ‹€μ–‘ν™”ν•˜κΈ° μœ„ν•΄ 맀개 λ³€μˆ˜μ— μžμ‹ 객체λ₯Ό μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€.

 

κ°•μ œ νƒ€μž… λ³€ν™˜

κ°•μ œ νƒ€μž… λ³€ν™˜(casting)은 λΆ€λͺ¨ νƒ€μž…μ„ μžμ‹ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것을 λ§ν•œλ‹€. κ·Έλ ‡λ‹€κ³  ν•΄μ„œ λͺ¨λ“  λΆ€λͺ¨ νƒ€μž…μ„ μžμ‹ νƒ€μž…μœΌλ‘œ κ°•μ œ λ³€ν™˜ν•  수 μžˆλŠ” 것은 μ•„λ‹ˆλ‹€. μžμ‹ νƒ€μž…μ΄ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜ν•œ ν›„ λ‹€μ‹œ μžμ‹ νƒ€μž…μœΌλ‘œ λ³€ν™œν•  λ•Œ κ°•μ œ νƒ€μž… λ³€ν™˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

 

ex)

Parent parent = new Child();

Child child = (Child) parent; 

 

객체 νƒ€μž… 확인

λΆ€λͺ¨ λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜λŠ” 객체가 λΆ€λͺ¨ 객체인지 μžμ‹ 객체인지 ν™•μΈν•˜λŠ” 방법은 μ–΄λ–€ 객체가 μ–΄λ–€ 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ instanceof μ—°μ‚¬μžλ₯Ό μ‚¬μš©ν•œλ‹€.

 

ex)

boolean result = μ’Œν•­(객체) instancof μš°ν•­(νƒ€μž…)

 

public void method(Parent parent) {

  if(parent instanceof Child) {

    Child child = (Child) parent;

  }

}

 

 

*μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ ν”„λ‘œκ·Έλž¨μ€ μ¦‰μ‹œ μ’…λ£Œλ˜κΈ° λ•Œλ¬Έμ— method1()κ³Ό 같이 κ°•μ œ νƒ€μž… λ³€ν™˜μ„ ν•˜κΈ° 전에 Instanceof μ—°μ‚°μžλ‘œ λ³€ν™˜μ‹œν‚¬ νƒ€μž…μ˜ 객체인지 μ‘°μ‚¬ν•΄μ„œ 잘λͺ»λœ λ§€κ°œκ°’μœΌλ‘œ 인해 ν”„λ‘œκ·Έλž¨μ΄ μ’…λ£Œ  λ˜λŠ” 것을 막아야 ν•œλ‹€.

λŒ“κΈ€