λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/ꡭ비지원

[D+21] 상속 κ΅μž¬μ •λ¦¬, μΈν„°νŽ˜μ΄μŠ€

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 10. 20.


ꡭ비지원 D+21

- 상속 κ΅μž¬μ •λ¦¬, μΈν„°νŽ˜μ΄μŠ€ -


상속 κ΅μž¬μ •λ¦¬

β€’ 상속

- 상속은 μž¬ν™œμš©κ³Ό κ³΅ν†΅λœ κ·œμ•½μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ λ¬Έλ²•μ΄μž 객체 지ν–₯의 νŠΉμ§•μ΄λ‹€.
- κ³΅ν†΅λœ 뢀뢄을 ν•˜λ‚˜μ˜ 클래슀둜 λ§Œλ“€μ–΄μ£Όκ³  μƒμ†ν•˜λ©΄ μˆ˜ν‰μ μΈ ν™•μž₯이 λ°œμƒλ  λ•Œ κ³΅ν†΅λœ 뢀뢄을 λ‹€μ‹œ 넣어주지 μ•Šμ•„λ„ λœλ‹€.
- 상속을 μž¬ν™œμš©μΈ‘λ©΄μœΌλ‘œ μ‚¬μš©ν•œλ‹€λ©΄ μˆ˜ν‰ 확정이 μ‘΄μž¬ν•΄μ•Όν•˜λ©°, κ²ΉμΉ˜λŠ” 뢀뢄에 λŒ€ν•œ λ³Όλ₯¨μ΄ μ–΄λŠμ •λ„ μ‘΄μž¬ν•΄μ•Ό ν•œλ‹€.

β€’ μ–΄λ…Έν…Œμ΄μ…˜

- μ»΄νŒŒμΌλŸ¬μ—κ²Œ μ–΄λ–€ 정보λ₯Ό μ£ΌλŠ” 것
=> μ»΄νŒŒμΌμ‹œμ— νŠΉμ •ν•œ μ•‘μ…˜μ„ μ·¨ν•  수 있게 ν•˜λŠ” 것

public class Tank extends Unit {
	
    @Override
    public void Attack()
    {
    	Pung();
    }
    
    public void Pung()
    {
    	System.out.println("탱크 : νŽ‘νŽ‘νŽ‘");
    }
}


λ‚΄κ°€ λ§Œμ•½μ— Unit으둜 λΆ€ν„° 상속받아 Attack()μ΄λΌλŠ” λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•˜λ €κ³  μž‘μ„±ν–ˆμ„λ•Œ μ‹€μˆ˜λ‘œ Attack()을 Cttack()μ΄λΌλŠ” μ˜€νƒ€λ₯Ό λ°œμƒν–ˆμ„ 경우 μ»΄νŒŒμΌλŸ¬λŠ” Cattack()을 μƒˆλ‘œμš΄ λ©”μ†Œλ“œλ₯Ό μƒμ„±ν•œ 쀄 μ•Œκ³  였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€μ§€ μ•ŠλŠ”λ‹€.
κ·Έλ ‡κΈ° λ•Œλ¬Έμ— λ‚˜μ€‘μ— μ½”λ“œμ˜ 였λ₯˜λ₯Ό μ°ΎκΈ° μœ„ν•΄ 였랜 μ‹œκ°„μ΄ 걸릴 μˆ˜λ„ 있고 좔후에 λ¬Έμ œκ°€ λ°œμƒλ  κ°€λŠ₯성이 μžˆλ‹€.

κ·Έλž˜μ„œ μ˜€λ²„λΌμ΄λ“œν•˜κΈ° μœ„ν•œ λ©”μ†Œλ“œμœ„μ— @Override λ₯Ό μž…λ ₯ν•΄μ£Όκ³  λ©”μ†Œλ“œμ˜ 이름을 잘 λͺ»μž…λ ₯ν–ˆμ„λ•Œν•΄λ‹Ή ν”„λ‘œκ·Έλž¨μ— Cattack()μ΄λΌλŠ” λ©”μ†Œλ“œκ°€ μ—†μœΌλ‹ˆ μƒˆλ‘œ λ§Œλ“€κ±°λ‚˜ 이름을 λ³€κ²½ν•˜λΌλŠ” μ—λŸ¬λ₯Ό λ°œμƒμ‹œν‚€κΈ° λ•Œλ¬Έμ— μ†μ‰½κ²Œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

β€’ final 클래슀

- final ν‚€μ›Œλ“œλŠ” ν•΄λ‹Ή 선언이 μ΅œμ’…μƒνƒœμ΄κ³ , κ²°μ½” μˆ˜μ •λ  수 μ—†μŒμ„ μ˜λ―Έν•œλ‹€.
- λ§Œμ•½ 클래슀 μ•žμ— finalλ₯Ό μž…λ ₯ν•΄μ£Όμ—ˆμ„ 경우 이 ν΄λž˜μŠ€λŠ” μ΅œμ’…μ μΈ 클래슀 μ΄λ―€λ‘œ 상속을 받을 수 μ—†κ²Œ λœλ‹€.
- λ˜ν•œ 상속이 λΆˆκ°€λŠ₯ν•˜λ‹ˆ μ˜€λ²„λΌμ΄λ”©λ˜ν•œ λΆˆκ°€λŠ₯ ν•˜λ‹€.
- ex) λ³΄μ•ˆκ΄€λ ¨(κ°œμΈμ •λ³΄), Globalμ˜μ—­, only one의 성격이면 final을 μ‚¬μš©ν•œλ‹€.

β€’ protected μ ‘κ·Όμ œν•œμž

- μ™ΈλΆ€νŒ¨ν‚€μ§€λ‘œλΆ€ν„°μ˜ 보호 (정보은닉)
- ex) κ΄€λ¦¬μž νŽ˜μ΄μ§€


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

μΈν„°νŽ˜μ΄μŠ€λΌλŠ” μš©μ–΄λŠ” ν•˜λ“œμ›¨μ–΄μ—μ„œλΆ€ν„° 온 κ²ƒμœΌλ‘œ μƒμ΄ν•œ 두 μ‹œμŠ€ν…œμ„ μ—°κ²°ν•˜λŠ” 접점, κ³΅ν†΅κ·œκ²©μ΄λΌλŠ” 의미λ₯Ό 가지고 μžˆλ‹€.

이후에 μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œ 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ΄ λ“±μž₯ν•˜κ³  객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ˜ νŠΉμ§•μΈ 상속이 λ“±μž₯ν•˜κ²Œ λ˜λ©΄μ„œ μΌμ’…μ˜ κ³΅ν†΅λœ 것을 ν•˜λ‚˜λ‘œ λ¬Άμ–΄μ£Όκ³  μ—°κ²°ν•΄μ€€λ‹€λŠ” 쑰금 더 ν™•μž₯된 의미인 ν•˜λ“œμ›¨μ–΄μ—μ„œ μ‚¬μš©λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€λΌλŠ” μš©μ–΄κ°€ μ†Œν”„νŠΈμ›¨μ–΄μ—μ„œλ„ μ‚¬μš©ν•˜κ²Œ 된 것이닀.

β€’ κ·œμ•½

μΈν„°νŽ˜μ΄μŠ€μ—μ„œ νŠΉμ§•μ€ κ·œμ•½μ„ 가지고 μžˆλ‹€λŠ” 것인데 κ·œμ•½μ€ λ‹€μ†Œ 강압적인 λŠλ‚Œμ„ 가지고 있으며 기쑴에 μƒμ†μ—μ„œ μ˜€λ²„λΌμ΄λ”© 같은 경우 λ©”μ†Œλ“œλ₯Ό λ”°λ‘œ μž¬μ •μ˜ 해주지 μ•Šμ•„λ„ λ¬Έμ œκ°€ λ°œμƒλ˜μ§€ μ•Šμ•˜μ§€λ§Œ μΈν„°νŽ˜μ΄μŠ€ 같은 κ²½μš°λŠ” μΈν„°νŽ˜μ΄μŠ€λ‚΄μ—μ„œ μ„ μ–Έλœ λ©”μ†Œλ“œλŠ” λ°˜λ“œμ‹œ μ‚¬μš©ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€λŠ” νŠΉμ§•μ„ 가지고 μžˆλ‹€.

β€’ νŠΉμ§•

- κ΅¬ν˜„λΆ€κ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€ => κ·œμ•½λ§Œμ„ μ œκ³΅ν•œλ‹€.
- μΈν„°νŽ˜μ΄μŠ€λŠ” λͺ¨λ‘ public이닀.
- 상속과 λ™μΌν•œ λ©”μΉ΄λ‹ˆμ¦˜(λ‚΄λΆ€μ μœΌλ‘œ)을 가지고 μžˆμ§€λ§Œ 코딩은 extends(ν™•μž₯)κ°€ μ•„λ‹Œ implements(κ΅¬ν˜„)λ₯Ό μ‚¬μš©ν•΄μ€€λ‹€.
- μΈν„°νŽ˜μ΄μŠ€λŠ” "ν™•μž₯이 μ•„λ‹Œ κ΅¬ν˜„"이닀.
- μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ—μ„œλŠ” μ›λž˜ λ³€μˆ˜λ₯Ό μ„ μ–Έν•  수 μ—†μœΌλ‚˜, static이 μ‚¬μš©λœ κ²½μš°λŠ” κ°€λŠ₯ν•˜λ‹€. => static은 μ „μ—­μ˜μ—­μ— ν•΄λ‹Ήλ˜κΈ° λ•Œλ¬Έμ— νž™μ˜μ—­μ˜ μΈν„°νŽ˜μ΄μŠ€ν•˜κ³ λŠ” 독립적이기 λ•Œλ¬Έμ— 기계적인 이유둜 μ‚¬μš©κ°€λŠ₯ν•  뿐 ꢌμž₯ν•˜μ§„ μ•ŠλŠ”λ‹€.
- μ˜€λ²„λΌμ΄λ”©μ„ ν• λ•Œ μ‚¬μš©ν•˜λ˜ μ–΄λ…Έν…Œμ΄μ…˜ @Overrideκ°€ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

β€’ 정리


λ°˜μ‘ν˜•

λŒ“κΈ€