🏁 기타/μ½”λ“œν”„λ ˆμ†Œ μ²΄ν—˜λ‹¨_BE

[Java] 상속(Inheritance) | μ˜€λ²„λΌμ΄λ”© | λ‹€ν˜•μ„±

Dhey 2022. 1. 21. 03:12
λ°˜μ‘ν˜•
상속
(inheritance)

μΌλ°˜ν™”λœ 클래슀λ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ specific ν•œ 클래슀λ₯Ό μƒμ„±ν•˜λŠ” 것

 

 

UserλŠ” 좔상적, PaidUserλŠ” ꡬ체적이라 ν•  수 있음

상속을 ν•˜λŠ” 클래슀(User)λ₯Ό 'λΆ€λͺ¨(Parent) 클래슀, μƒμœ„(Super) 클래슀, 기반(Base) 클래슀'라고 ν‘œν˜„ν•˜κ³ ,

상속을 λ°›λŠ” 클래슀(PaidUser)λ₯Ό 'μžμ‹(Child) 클래슀, ν•˜μœ„(Sub) 클래슀, νŒŒμƒ(Derived) 클래슀'라고 ν‘œν˜„ν•˜κΈ°λ„ ν•œλ‹€.

 

- μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨ 클래슀의 λͺ¨λ“  λ©€λ²„λ³€μˆ˜μ™€ λ©”μ†Œλ“œλ₯Ό μƒμ†λ°›λŠ”λ‹€

  (But, JavaλŠ” λ‹¨μΌμƒμ†λ§Œ ν—ˆμš©ν•˜κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜μ˜ ν΄λž˜μŠ€λ‘œλΆ€ν„°λ§Œ 상속을 받을 수 μžˆλ‹€)

- 상속을 μ‚¬μš©ν•˜λ©΄ 클래슀 κ°„μ˜ 계측적 λΆ„λ₯˜(hierarchical classifications)κ°€ κ°€λŠ₯ν•΄μ§„λ‹€

 

μ „λΆ€ User 클래슀λ₯Ό 상속받기 λ•Œλ¬Έμ—, λͺ¨λ“  멀버λ₯Ό 상속받고 각 클래슀만이 κ°€μ§ˆ 수 μžˆλŠ” ꡬ체적인 ν˜•νƒœμ˜ 멀버 λ³€μˆ˜λ₯Ό κ°€μ§„λ‹€

 

 

 

β–· Javaμ—μ„œλŠ” extendsλ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨ 클래슀의 멀버λ₯Ό 상속받아 ν™•μž₯μ‹œν‚¬ 수 μžˆλ‹€.

class μžμ‹_클래슀λͺ… extends λΆ€λͺ¨_클래슀λͺ… { ··· }

 

λ”°λΌμ„œ μœ„ 그림을 μ½”λ“œλ‘œ ν‘œν˜„ν•˜λ©΄ μ•„λž˜μ™€ κ°™μ•„μ§„λ‹€.

class PaidUser extends User{}
class EnterpriseUser extends User{}
class AdministratorUser extends User{}

 

λ˜ν•œ 상속받은 λ©€λ²„λŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ³„λ„λ‘œ μ„ μ–Έν•˜μ§€ μ•ŠλŠ”λ‹€.

λ‹€λ₯Έ λ©€λ²„λ³€μˆ˜λ“€μ€ User ν΄λž˜μŠ€λ‘œλΆ€ν„° 이미 상속을 λ°›μ•˜κΈ°λ•Œλ¬Έμ— λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•˜μ§€ μ•ŠμŒ

 

 

그럼 상속 κ΄€κ³„μ—μ„œ μƒμ„±μžλŠ” μ–΄λ–»κ²Œ λ™μž‘ν• κΉŒ?

3개의 ν΄λž˜μŠ€μ— 각각 μƒμ„±μžλ₯Ό μΆ”κ°€ν•˜κ³  main λ©”μ†Œλ“œμ— μƒμ„±μžλ₯Ό μ‹€ν–‰ν•˜μ—¬ 좜λ ₯ν–ˆμ„ λ•Œμ˜ κ²°κ³Ό

 

- λΆ€λͺ¨ 클래슀의 μƒμ„±μžλŠ” μƒμ†λ˜μ§€ μ•ŠλŠ”λ‹€.

- μžμ‹ 클래슀의 객체λ₯Ό 생성 μ‹œ, λΆ€λͺ¨ 클래슀의 κΈ°λ³Έ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.

- μ΅œμƒμœ„ λΆ€λͺ¨ 클래슀의 μƒμ„±μžλΆ€ν„° μƒμ„±μž ν•œ 단계 μ•„λž˜ μžμ‹μœΌλ‘œ μ°¨λ‘€λŒ€λ‘œ ν˜ΈμΆœλœλ‹€

 

 


 

μ ‘κ·Ό μ œμ–΄μž(access modifier)
: μ™ΈλΆ€λ‘œλΆ€ν„°μ˜ 접근을 μ œν•œν•˜κΈ° μœ„ν•œ λͺ©μ μ˜ ν‚€μ›Œλ“œ

 → 상속 κ΄€κ³„μ—μ„œμ˜ 접근을 μ œν•œν•˜κΈ° μœ„ν•΄μ„œλ„ μ‚¬μš©λœλ‹€.

 

β–Ά private μ ‘κ·Ό μ œμ–΄μž

   : 였직 같은 클래슀 λ‚΄μ—μ„œλ§Œ 접근이 κ°€λŠ₯ν•˜λ―€λ‘œ, 상속받은 μžμ‹ ν΄λž˜μŠ€μ—μ„œμ˜ 접근도 μ œν•œλœλ‹€.

 

β€» private λ©€λ²„λ³€μˆ˜μ— λŒ€ν•΄ μ™ΈλΆ€ 접근이 ν•„μš”ν•œ 경우, λΆ€λͺ¨ ν΄λž˜μŠ€μ— public getter, setter λ©”μ†Œλ“œλ₯Ό μ œκ³΅ν•œλ‹€.

setter λ©”μ†Œλ“œλ‘œ 접근이 κ°€λŠ₯ν•˜κ²Œ 함

 

β–Ά protected μ ‘κ·Ό μ œμ–΄μž

  : 상속 받은 μžμ‹ ν΄λž˜μŠ€μ—μ„œμ˜ 접근을 κ°€λŠ₯ν•˜κ²Œ ν•œλ‹€.

 

 


 

≫ super ν‚€μ›Œλ“œ
  - Javaμ—μ„œ superλŠ” λΆ€λͺ¨ 클래슀λ₯Ό μ˜λ―Έν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€.
  - super( ); λŠ” λΆ€λͺ¨ 클래슀의 νŒŒλΌλ―Έν„° μ—†λŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” μ½”λ“œ
  - μžμ‹ ν΄λž˜μŠ€μ—μ„œ λΆ€λͺ¨ 클래슀 μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•˜μ§€ μ•ŠμœΌλ©΄, Java μ»΄νŒŒμΌλŸ¬λŠ” μžμ‹ 클래슀 μƒμ„±μžμ˜ 첫 번째 라인에 super( ); λ₯Ό μžλ™μœΌλ‘œ μ‚½μž…ν•œλ‹€.
  - λ©€λ²„λ³€μˆ˜ or λ©”μ†Œλ“œμ— μ ‘κ·Ό ν•˜κΈ° μœ„ν•΄μ„œλŠ” .(점 μ—°μ‚°μž)을 μ‚¬μš©ν•˜μ—¬ super.λ©€λ²„λ³€μˆ˜( ); λ₯Ό μ‚¬μš©ν•œλ‹€.

  * νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό ν˜ΈμΆœν•  λ•ŒλŠ” λ°˜λ“œμ‹œ λͺ…μ‹œμ μΈ 선언이 ν•„μš”ν•˜λ‹€.

 

μ‹€ν–‰μ „ Java μ»΄νŒŒμΌλŸ¬κ°€ μžλ™μœΌλ‘œ super( )λ₯Ό μƒμ„±ν•΄μ€Œ

main λ©”μ†Œλ“œμ—μ„œ UniversityUser 객체λ₯Ό 생성할 λ•Œ, UniversityUserκ°€ μ‹€ν–‰λ˜κΈ° 전에 super() 호좜둜 λΆ€λͺ¨μƒμ„±μžμΈ EnterpriseUserκ°€ ν˜ΈμΆœλœλ‹€. 또 μ‹€ν–‰ 전에 super()κ°€ μžˆμœΌλ―€λ‘œ λΆ€λͺ¨μƒμ„±μž Userλ₯Ό ν˜ΈμΆœν•œλ‹€. 이후 UserλΆ€ν„° β‘ , β‘‘, β‘’ μˆœμ„œλŒ€λ‘œ 좜λ ₯이 λœλ‹€. ( User ν΄λž˜μŠ€κ°€ κ°€μž₯ λ¨Όμ € 좜λ ₯이 됐닀고 ν•΄μ„œ 첫번째둜 호좜이 된 것이 μ•„λ‹˜!)

 

νŒŒλΌλ―Έν„°κ°€ μžˆλŠ” μƒμ„±μž μ΄λ―€λ‘œ 선언을 ν•΄μ£Όμ–΄μ•Ό 함

* λ§Œμ•½ λΆ€λͺ¨ ν΄λž˜μŠ€μ— 같은 μ΄λ¦„μ˜ λ©€λ²„λ³€μˆ˜κ°€ μžˆλ‹€λ©΄ λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” super.λ₯Ό 자기 μžμ‹ μ€ this.λ₯Ό μ‚¬μš©ν•˜μ—¬ μ§€μΉ­ν•œλ‹€. 

 

 

 

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©(method overriding)
: λΆ€λͺ¨ ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ†Œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ μžμ‹ λ§Œμ˜ νŠΉμ„±μ— 맞게 μƒˆλ‘­κ²Œ κ΅¬ν˜„ν•˜λŠ” 것

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

μ˜€λ²„λΌμ΄λ”©μ˜ μ˜ˆμ‹œ

 

λΆ€λͺ¨ν΄λž˜μŠ€ User
μžμ‹ν΄λž˜μŠ€ PaidUser
μžμ‹ν΄λž˜μŠ€ EnterpriseUser
μžμ‹ν΄λž˜μŠ€ Administrator

 

μœ„μ˜ μ˜ˆμ‹œ μ½”λ“œλ“€μ²˜λŸΌ λΆ€λͺ¨ν΄λž˜μŠ€μΈ User ν΄λž˜μŠ€μ—μ„œ 상속받은 login λ©”μ†Œλ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜μ§€ μ•Šκ³ , loginμ΄λΌλŠ” 것은 μœ μ‚¬ν•˜μ§€λ§Œ μ½”λ“œλ₯Ό 자기 νŠΉμ„±μ— 맞게 κ΅¬ν˜„ν•˜μ˜€κΈ° λ•Œλ¬Έμ— λ™μž‘λ“€μ΄ μ‘°κΈˆμ”© λ‹€λ₯Έ 것을 λ³Ό 수 μžˆλ‹€. μ΄λ ‡κ²Œ μ˜€λ²„라이딩을 톡해 μ½”λ“œμ˜ 간결성을 μœ μ§€ν•˜λ©΄μ„œ λ‚΄μš©μ„ ν™•μž₯μ‹œν‚¬ 수 μžˆλ‹€λŠ” μž₯점이 μžˆλ‹€.

 

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

  → λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œμ™€ "이름, νŒŒλΌλ―Έν„°, λ¦¬ν„΄νƒ€μž…"이 κ°™μ•„μ•Όν•œλ‹€. (즉, μ€‘κ΄„ν˜Έ μ•ˆμ˜ 둜직 μ™Έμ—λŠ” μ „λΆ€ 동일해야 함)

 

 

 

 


 

μ½”λ“œν”„λ ˆμ†Œ Java μ›Ή 개발 μ²΄ν—˜λ‹¨ ν™œλ™ 쀑 'Java ν”„λ‘œκ·Έλž˜λ° μ΄ˆκΈ‰' μ΄λŸ¬λ‹ κ°•μ˜λ₯Ό λ“£κ³  μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€ :)
μ½”λ“œν”„λ ˆμ†Œ URL: https://www.codepresso.kr/

 

프리미엄 IT ꡐ윑 μ„œλΉ„μŠ€ - μ½”λ“œν”„λ ˆμ†Œ

 

www.codepresso.kr

λ°˜μ‘ν˜•