μƒˆμ†Œμ‹

Languages/JAVA

[Java] 상속

  • -
λ°˜μ‘ν˜•

μ˜€λŠ˜μ€ μƒμ†μ—λŒ€ν•΄μ„œ ν¬μŠ€νŒ…μ„ ν• κ²λ‹ˆλ‹€.γ…Žγ…Ž

Javaλ₯Ό κ³΅λΆ€ν•˜λ˜ 쀑 ν”„λ‘œκ·Έλž¨μ„ μ§€λ•Œ μƒμ†νŒŒνŠΈμ— λŒ€ν•œ 이해가 많이 λΆ€μ‘±ν•œ 것 κ°™μ•„

μ œκ°€ 볡슡 ν• κ²Έ κ³΅λΆ€ν–ˆλ˜ 지식을 λ°”νƒ•μœΌλ‘œ 자료λ₯Ό μ°Έκ³ ν•΄κ°€λ©°, 글을 ν¬μŠ€νŒ… ν–ˆμ–΄μš”.

그럼 Start


 

객체 지ν–₯μ—μ„œμ˜ 상속 

λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ •μ˜λœ ν•„λ“œμ™€ λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ λ¬Όλ €λ°›λŠ” 것

λΆ€λͺ¨ 클래슀 -> 슈퍼 클래슀, μžμ‹ 클래슀 -> μ„œλΈŒ 클래슀

 

μƒμ†μ˜ ν•„μš”μ„±

β–Ά 클래슀 μ‚¬μ΄μ˜ 멀버 쀑볡 μ„ μ–Έ λΆˆν•„μš”

β–Ά ν•„λ“œμ™€ λ©”μ†Œλ“œ μž¬μ‚¬μš©μœΌλ‘œ 클래슀 κ°„κ²°ν™”

β–Ά ν΄λž˜μŠ€ κ°„ 계측적 λΆ„λ₯˜ 및 정리

 

*상속선언: extends

β–Ά  슈퍼 클래슀 Person public class Person

β–Ά  μ„œλΈŒ 클래슀 Student -> public class Student extends Person

 

μžλ°” μƒμ†μ˜ νŠΉμ§•

β–Ά μžλ°”μ—μ„œλŠ” 닀쀑 상속을 μ§€μ›ν•˜μ§€ μ•ŠλŠ”λ‹€.

β–Ά μžλ°”μ—μ„œλŠ” μƒμ†μ˜ νšŸμˆ˜μ— μ œν•œμ„ 두지 μ•ŠλŠ”λ‹€.

β–Ά μžλ°”μ—μ„œ 계측 ꡬ쑰의 μ΅œμƒμœ„ ν΄λž˜μŠ€λŠ” java.lagn.Object ν΄λž˜μŠ€μ΄λ‹€.

 

 

<슈퍼 클래슀 λ©€λ²„μ˜ μ ‘κ·Ό μ§€μ •μž>

(O λŠ” μ ‘κ·Ό κ°€λŠ₯함 , X λŠ” μ ‘κ·Ό λΆˆκ°€ )

 

β–Ά private: 슈퍼 클래슀 멀버가 private둜 μ„ μ–Έλ˜λ©΄ μ„œλΈŒν΄λž˜μŠ€λ„ 자기 멀버같이 μ‚¬μš© κ°€λŠ₯

β–Ά protected: 같은 νŒ¨ν‚€μ§€μ— μ†ν•œ λ‹€λ₯Έ 클래슀의 μ ‘κ·Ό ν—ˆμš©.

   κ°™μ€ νŒ¨ν‚€μ§€λ“  λ‹€λ₯Έ νŒ¨ν‚€μ§€λ“  μƒμ†λ°›λŠ” μ„œλΈŒ ν΄λž˜μŠ€μ— μ ‘κ·Ό ν—ˆμš©.

β–Ά public: μ–΄λ–€ ν΄λž˜μŠ€μ—μ„œλ„ μ ‘κ·Ό κ°€λŠ₯(같은 νŒ¨ν‚€μ§€λ“  μ•„λ‹ˆλ“  상관X)

β–Ά default: μ„œλΈŒν΄λž˜μŠ€μ΄λ“  μ•„λ‹ˆλ“  같은 νŒ¨ν‚€μ§€ 클래슀 μ „λΆ€ λ‹€ μ ‘κ·Ό κ°€λŠ₯

 

super()λ₯Ό μ‚¬μš©ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ 슈퍼 클래슀의 μƒμ„±μž 호좜

μ„œλΈŒ 클래슀의 μƒμ„±μžμ—μ„œ 슈퍼 클래슀 μƒμ„±μžμ˜ ν˜ΈμΆœμ„ λͺ…μ‹œμ μœΌλ‘œ μ„ νƒν•˜λŠ” ν‚€μ›Œλ“œλŠ” super()이닀.

super()λŠ” 슈퍼 클래슀 μƒμ„±μžμ˜ ν˜ΈμΆœμ„ μ˜λ―Έν•˜κ³ , 맀개 λ³€μˆ˜κ°€ μžˆλŠ” κ²½μš°λŠ” 맀개 λ³€μˆ˜ 리슀트λ₯Ό μ λŠ”λ‹€.

 

μΊμŠ€νŒ…(casting)

β–Ά κ°œλ°œμžκ°€ ν”„λ‘œκ·Έλž¨ μ½”λ“œλ‘œ ν–‰ν•˜λŠ” κ°•μ œ νƒ€μž… λ³€ν™˜

β–Ά μ—…μΊμŠ€νŒ…(upcasting), 

   μ„œλΈŒ 클래슀 객체가 슈퍼 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜λ˜λŠ” 것

   ex) Person p;

   Student s = new Student();

   p = s; // μ—…μΊμŠ€νŒ…, μžλ™ νƒ€μž… λ³€ν™˜

 

λ‹€μš΄μΊμŠ€νŒ…(downcasting)

β–Ά μ—…μΊμŠ€νŒ…μœΌλ‘œ λ³€ν™˜λœ 것을 μ›λž˜λŒ€λ‘œ λ˜λŒλ¦¬λŠ” 것. (μ—…μΊμŠ€νŒ…κ³Ό 달리 λͺ…μ‹œμ μœΌλ‘œ νƒ€μž…μ„ 지정해야함.)

    ex)Student s = (Student)p; //λ‹€μš΄μΊμŠ€νŒ…, κ°•μ œ νƒ€μž… λ³€ν™˜

 

instanceof μ—°μ‚°μžμ™€ 객체 ꡬ별

β–Ά instanceof: λ ˆνΌλŸ°μŠ€κ°€ κ°€λ¦¬ν‚€λŠ” μ‹€μ œ 객체가 μ–΄λ–€ 클래슀 νƒ€μž…μΈμ§€ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©

β–Ά booleanν˜•μœΌλ‘œ λ‹€μŒκ³Ό 같이 μ‚¬μš© [객체 레퍼런슀 instanceof 클래슀 νƒ€μž…]

 

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©

β–Ά μŠˆνΌν΄λž˜μŠ€μ™€ μ„œλΈŒν΄λž˜μŠ€μ˜ λ©”μ†Œλ“œ 사이에 λ°œμƒν•˜λŠ” 관계.

    슈퍼 클래슀의 λ©”μ†Œλ“œλ₯Ό λ™μΌν•œ μ΄λ¦„μœΌλ‘œ μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ μž¬μž‘μ„±ν•˜λŠ” 것. 

 

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”© 쑰건

β–Ά λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©μ€ 슈퍼 클래슀의 λ©”μ†Œλ“œμ™€ μ™„μ „νžˆ λ™μΌν•œ λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ ν•œλ‹€.

β–Ά λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”© μ‹œμ— 슈퍼 클래슀 λ©”μ†Œλ“œμ˜ μ ‘κ·Ό μ§€μ •μžλ³΄λ‹€ μ ‘κ·Όμ˜ λ²”μœ„κ°€ μ’μ•„μ§ˆ 수 μ—†λ‹€.

β–Ά λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©μ—μ„œ λ©”μ†Œλ“œ 이름, 맀개 λ³€μˆ˜ λ¦¬μŠ€νŠΈλŠ” κ°™μœΌλ‚˜ 리턴 νƒ€μž…λ§Œ λ‹€λ₯Ό 수 μ—†λ‹€.

β–Ά static, private, final둜 μ„ μ–Έλœ λ©”μ†Œλ“œλŠ” μ˜€λ²„λΌμ΄λ”©λ  수 μ—†λ‹€.

 

μ˜€λ²„λ‘œλ”©(overloading)κ³Ό μ˜€λ²„λΌμ΄λ”©(overriding)

β–Ά μ˜€λ²„라이딩

슈퍼클래슀의 λ©”μ†Œλ“œμ™€ 이름, λ§€κ°œλ³€μˆ˜νƒ€μž…, λ§€κ°œλ³€μˆ˜λ¦¬μŠ€νŠΈ, 리턴 νƒ€μž… 등이 λͺ¨λ‘ λ™μΌν•œ λ©”μ†Œλ“œκ°€ μ„œλΈŒ ν΄λž˜μŠ€μ— μž¬μ •μ˜ λ˜μ—ˆμ„ 경우λ₯Ό κ°€λ¦¬ν‚€λŠ” μš©μ–΄

 

β–Ά μ˜€λ²„λ‘œλ”©

ν•œ ν΄λž˜μŠ€λ‚˜ 상속 관계에 μžˆλŠ” ν΄λž˜μŠ€λ“€μ—μ„œ μ„œλ‘œ 인자의 νƒ€μž…μ΄ λ‹€λ₯΄κ±°λ‚˜ 인자의 κ°œμˆ˜κ°€ λ‹€λ₯Έ μ—¬λŸ¬ 개의 λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ†Œλ“œκ°€ μž‘μ„±λ˜λŠ” 것을 지칭

 

 

좔상 λ©”μ†Œλ“œ & 클래슀

β–Ά μΆ”상 λ©”μ†Œλ“œ

   - 선언은 λ˜μ–΄ μžˆμœΌλ‚˜ μ½”λ“œκ°€ κ΅¬ν˜„λ˜μ–΄ μžˆμ§€ μ•Šμ€, 껍데기만 μžˆλŠ” λ©”μ†Œλ“œ.

   - abstract ν‚€μ›Œλ“œμ™€ ν•¨κ»˜ λ©”μ†Œλ“œμ˜ νƒ€μž…, 이름, 맀개 λ³€μˆ˜ 리슀트만 μ„ μ–Έν•΄μ•Ό 함

 

β–Ά 좔상 클래슀

   - 좔상 λ©”μ†Œλ“œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ abstract ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ 클래슀.

 

>>좔상 ν΄λž˜μŠ€κ°€ λ˜λŠ” κ²½μš°λŠ” λ°‘μ˜ 두가지.

- 좔상 λ©”μ†Œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” ν΄λž˜μŠ€λ‘œμ„œ λ°˜λ“œμ‹œ abstract둜 μ„ μ–Έλ˜μ–΄μ•Ό 함.

- 좔상 λ©”μ†Œλ“œκ°€ ν•˜λ‚˜λ„ μ—†μ§€λ§Œ abstract둜 μ„ μ–Έν•œ 클래슀

- 좔상 ν΄λž˜μŠ€λŠ” μΈμŠ€ν„΄μŠ€λ₯Ό 생성할 수 μ—†λ‹€.

 

μžλ°” μΈν„°νŽ˜μ΄μŠ€

μžλ°”μ˜ μΈν„°νŽ˜μ΄μŠ€λŠ” 좔상 ν΄λž˜μŠ€μ™€ μœ μ‚¬ν•˜λ©° interface ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„ μ–Έν•œλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€μ˜ νŠΉμ§•

β–Ά λ©€λ²„λŠ” 좔상 λ©”μ†Œλ“œμ™€ μƒμˆ˜λ§ŒμœΌλ‘œ κ΅¬μ„±λœλ‹€.

β–Ά λͺ¨λ“  λ©”μ†Œλ“œλŠ” public이며 μƒλž΅μ΄ κ°€λŠ₯ν•˜λ‹€.

β–Ά μƒμˆ˜λ„ public static final을 μƒλž΅ν•˜μ—¬ μ„ μ–Έν•  수 μžˆλ‹€.

β–Ά μΈν„°νŽ˜μ΄μŠ€μ˜ 객체λ₯Ό 생성할 수 μ—†λ‹€.

β–Ά λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€μ— 상속될 수 μžˆλ‹€.

β–Ά μΈν„°νŽ˜μ΄μŠ€λ„ 레퍼런슀 λ³€μˆ˜μ˜ νƒ€μž…μœΌλ‘œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

 

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

ν΄λž˜μŠ€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속받을 수 μ—†κ³  였직 μΈν„°νŽ˜μ΄μŠ€λ§Œμ΄ 상속이 κ°€λŠ₯ν•˜λ‹€.

클래슀의 닀쀑 상속은 μ§€μ›ν•˜μ§€ μ•ŠμœΌλ‚˜, μΈν„°νŽ˜μ΄μŠ€μ˜ 닀쀑 상속은 ν—ˆμš©ν•œλ‹€.

μΈν„°νŽ˜μ΄μŠ€ 상속 μ‹œ extends ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•œλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

μΈν„°νŽ˜μ΄μŠ€μ˜ 좔상 λ©”μ†Œλ“œλ₯Ό ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜λŠ” 것을 말함. implementsλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•΄ 클래슀λ₯Ό μž‘μ„±. μ΄λ•Œ ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ μΈν„°νŽ˜μ΄μŠ€μ˜ λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Όν•œλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€μ˜ 닀쀑 κ΅¬ν˜„

ν΄λž˜μŠ€λŠ” ν•˜λ‚˜ μ΄μƒμ˜ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ©°, μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•  λ•ŒλŠ” 콀마둜 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬λΆ„ν•˜μ—¬ λ‚˜μ—΄ν•˜λ©°, 각 μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

 

<μΈν„°νŽ˜μ΄μŠ€μ™€ 좔상 클래슀>

λ°˜μ‘ν˜•

'Languages > JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Java] μžλ°” API클래슀  (3) 2020.04.25
[Java] Collection-list예제  (0) 2020.04.25
[Java] μ»¬λ ‰μ…˜(Collection)  (0) 2020.04.21
[JavaFx] 블둝 μƒμ„±ν•˜κΈ°  (0) 2020.04.20
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.