πŸ’»

Java ν”„λ‘œκ·Έλž˜λ° - 상속(inheritance) / λ©”μ†Œλ“œ μž¬μ •μ˜(μ˜€λ²„λΌμ΄λ”© Overriding) λ³Έλ¬Έ

KITRI/JAVA

Java ν”„λ‘œκ·Έλž˜λ° - 상속(inheritance) / λ©”μ†Œλ“œ μž¬μ •μ˜(μ˜€λ²„λΌμ΄λ”© Overriding)

λ˜νš¨λ‹ˆ 2020. 5. 7. 10:05

클래슀의 νŠΉμ§• 3가지

β‘  은닉화 -> public 보닀 privateλ₯Ό μ‚¬μš©ν•œλ‹€.

β‘‘ 쀑볡성 -> 쀑볡 (ν•¨μˆ˜μ€‘λ³΅/μƒμ„±μžμ€‘λ³΅)

β‘’ μƒμ†μ„± -> λΆ€λͺ¨ν΄λž˜μŠ€μ˜ 멀버λ₯Ό μžμ‹μ—κ²Œ λ¬Όλ €μ€€λ‹€.

μžλ°”μ—μ„œ λ§Œλ“€μ–΄μ§„ λͺ¨λ“  ν΄λž˜μŠ€λŠ” Object 클래슀λ₯Ό μƒμ†λ°›λŠ”λ‹€.

μžλ°”λŠ” 닀쀑 상속을 ν—ˆμš©ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉, μ—¬λŸ¬ 개의 λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό 상속할 수 μ—†μœΌλ―€λ‘œ extends λ’€μ—λŠ” ν•˜λ‚˜μ˜ λΆ€λͺ¨ν΄λž˜μŠ€λ§Œ μ™€μ•Όν•œλ‹€. 


상속

: μƒμ†μ΄λž€? 기쑴의 클래슀λ₯Ό μž¬μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•˜λŠ” 것이닀. 상속을 ν†΅ν•΄μ„œ 클래슀λ₯Ό μž‘μ„±ν•˜λ©΄ 적은 μ–‘μ˜ μ½”λ“œλ‘œ μƒˆλ‘œμš΄ 클래슀λ₯Ό μž‘μ„±ν•  수 있고 μ½”λ“œλ₯Ό κ³΅ν†΅μ μœΌλ‘œ 관리할 수 있기 λ•Œλ¬Έμ— μ½”λ“œμ˜ μΆ”κ°€ 및 변경이 μš©μ΄ν•˜λ‹€. μ΄λŸ¬ν•œ νŠΉμ§•μ€ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 μ½”λ“œμ˜ 쀑볡을 μ œκ±°ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ˜ 생산성과 μœ μ§€λ³΄μˆ˜μ— κΈ°μ—¬ν•œλ‹€. 

 

- λ³€μˆ˜, ν•¨μˆ˜, μƒμ„±μžλ₯Ό 가지고 μžˆλ‹€. 

- λ‹€λ₯Έ 객체지ν–₯언어인 C++μ—μ„œλŠ” 닀쀑상속이 κ°€λŠ₯ν•˜μ§€λ§Œ μžλ°”μ—μ„œλŠ” 단일 μƒμ†λ§Œμ„ ν—ˆμš©ν•œλ‹€. 

- μƒμ†μ˜ μž₯단점

        μž₯점 :  효율적이고 κ°œλ°œμ‹œκ°„μ„ 쀄인닀.

                 μœ μ§€λ³΄μˆ˜ μ‹œκ°„μ„ 쀄일 수 μžˆλ‹€.(λΆ€λͺ¨ 클래슀의 μˆ˜μ •μœΌλ‘œ λͺ¨λ“  μžμ‹ ν΄λž˜μŠ€λ“€μ˜ μˆ˜μ •νš¨κ³Ό)

        단점 : 상속ꡬ쑰가 λ³΅μž‘ν•΄μ§€λ©΄ μ΄ν•΄ν•˜κΈ° νž˜λ“€κ³  ν”„λ‘œκ·Έλž¨μ΄ λ¬΄κ±°μ›Œμ§„λ‹€.

 

 

 

  • 클래슀 상속

예제1)

 

λΆ€λͺ¨ν΄λž˜μŠ€μ˜ private둜 μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ†Œλ“œλŠ” 상속 λŒ€μƒμ—μ„œ μ œμ™Έλœλ‹€. 

- μ™ΈλΆ€μ—μ„œ 접근이 λΆˆκ°€λŠ₯ ν•˜λ©΄μ„œ 상속해쀄 수 μžˆλŠ” μ ‘κ·Όμ œμ–΄μž => protected

λΆ€λͺ¨λ‘œλΆ€ν„° 상속받은 속성듀은 λ‚΄ κ²ƒμ²˜λŸΌ(this) μ“Έ 수 μžˆλ‹€.

 

 

상속받은 것에 ν•œν•΄μ„œ super λ₯Ό μ‚¬μš©ν•΄μ„œ λΆ€λͺ¨ν•„λ“œμ™€ λΆ€λͺ¨ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.

super λŠ” μžμ† ν΄λž˜μŠ€μ—μ„œ 쑰상 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 멀버λ₯Ό μ°Έμ‘°ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” μ°Έμ‘°λ³€μˆ˜μ΄λ‹€. λ©€λ²„λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ˜ 이름이 같을 λ•Œ thisλ₯Ό λΆ™μ—¬μ„œ κ΅¬λ³„ν–ˆλ“―μ΄ 상속받은 멀버와 μžμ‹ μ˜ ν΄λž˜μŠ€μ— μ •μ˜λœ λ©€λ²„μ˜ 이름이 같을 λ•ŒλŠ” superλ₯Ό λΆ™μ—¬μ„œ ꡬ별할 수 μžˆλ‹€. 

쑰상 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 멀버도 μžμ† 클래슀 μžμ‹ μ˜ λ©€λ²„μ΄λ―€λ‘œ thisλ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, κ΅¬λ³„ν•˜κΈ° μœ„ν•΄μ„œ superλ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€. 

 

this.x = x; 도가λŠ₯ν•˜μ§€λ§Œ 상속받은 λ³€μˆ˜μž„μ„ κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄ superλ₯Ό μ‚¬μš©ν•œλ‹€.

 

예제 2)

 

 

<클래슀 λ‹€μ΄μ–΄κ·Έλž¨>

 

관계(Relationship)

 

1. μ •μ˜ 

- κ΅¬μ„±μš”μ†Œλ“€κ°„μ˜ 의미 μžˆλŠ” 연관성을 ν‘œν˜„

- 일반적으둜 ν΄λž˜μŠ€λ“€κ°„μ˜ 관계 ν‘œν˜„ μ‹œ μ‚¬μš©λœλ‹€. 

 

2. μ’…λ₯˜

  • μΌλ°˜ν™”κ΄€κ³„(Generalization Relationship)
  • 싀체화, μ‹€ν˜„ν™” 관계(Realization Relationship)
  • μ˜μ‘΄κ΄€κ³„(Dependency Relationship)
  • 연관관계(Association Relationship)
    • 집합연관(Aggregation Relationship)
    • 볡합연관(Composition Relationship)

 

예제 3)

 


  • λΆ€λͺ¨μƒμ„±μž 호좜

예제 4)

 

 

DSonμ΄λΌλŠ” 클래슀의 객체둜 aλ₯Ό μƒμ„±ν•΄μ„œ μƒμ„±μžλ₯Ό μ°Ύμ•„κ°„λ‹€.

자기거 μ°Ύμ•„μ„œ default μƒμ„±μž μ—†μ–΄. λΆ€λͺ¨κΊΌ μ˜¬λΌκ°€μ„œ μ—†μœΌλ©΄ defaultμƒμ„±μž

즉, μžμ‹ν΄λž˜μŠ€μ—μ„œ 자기 μžμ‹ μ˜ μƒμ„±μžκ°€ μ—†μœΌλ©΄ λΆ€λͺ¨μƒμ„±μžλ₯Ό μ°Ύμ•„κ°„λ‹€. (λ§Œμ•½ 자기 μžμ‹ μ˜ μƒμ„±μžκ°€ μ‘΄μž¬ν•˜λ©΄ μžμ‹ν΄λž˜μŠ€ μƒμ„±μžκ°€ μš°μ„ )

 

 

μƒμ†μ˜ μƒμ„±μžλŠ” super λΌλŠ” ν‚€μ›Œλ“œλ‘œ μ ‘κ·Όν•œλ‹€. 

super() : defaultμƒμ„±μž

super()λŠ” λΆ€λͺ¨μ˜ κΈ°λ³Έ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€.

super(10): intλ₯Ό νƒ€μž…μœΌλ‘œ νŒŒλΌλ―Έν„° ν•œκ°œλ₯Ό 가지고 μžˆλŠ” μƒμ„±μž.

 

 

예제 5)

 

 

예제 6) 

 

setAccumulator λ©”μ†Œλ“œμ—μ„œ totalValule +=initValue; λ₯Ό μž‘μ„±ν–ˆλ”λ‹ˆ 값이 λ‘λ²ˆ λ”ν•΄μ Έμ„œ totalValue값이 μ΄μƒν•˜κ²Œ λ‚˜μ™”μ—ˆλ‹€. getTotal() λ©”μ†Œλ“œλ₯Ό λ”°λ‘œ λΉΌμ„œ μž‘μ„±ν•΄μ£Όλ„λ‘ ν•˜μž.

 


// 클래슀, μΆ”μƒν΄λž˜μŠ€, μΈν„°νŽ˜μ΄μŠ€ ν•¨μˆ˜ μž¬μ •μ˜κ°€ κ°€λŠ₯ν•˜λ‹€.  

// μΈν„°νŽ˜μ΄μŠ€λŠ” λ°˜λ“œμ‹œ μž¬μ •μ˜ν•΄μ•Όν•œλ‹€.

 

μ˜€λ²„λΌμ΄λ”©

:μ˜€λ²„λΌμ΄λ”©μ΄λž€? 쑰상 ν΄λž˜μŠ€λ‘œλΆ€ν„° 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ λ³€κ²½ν•˜λŠ” 것을 μ˜€λ²„λΌμ΄λ”©μ΄λΌκ³  ν•œλ‹€. 상속받은 λ©”μ„œλ“œλ₯Ό κ·ΈλŒ€λ‘œ μ‚¬μš©ν•˜κΈ°λ„ ν•˜μ§€λ§Œ, μžμ† 클래슀 μžμ‹ μ— 맞게 λ³€κ²½ν•΄μ•Όν•˜λŠ” κ²½μš°κ°€ λ§Žλ‹€.  이럴 λ•Œ μ‘°μƒμ˜ λ©”μ„œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©ν•œλ‹€. 

 

쑰건  μžμ† ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•˜λŠ” λ©”μ„œλ“œλŠ” 쑰상 클래슀의 λ©”μ„œλ„μ™€ 1) 이름이 κ°™μ•„μ•Όν•œλ‹€. 2) λ§€κ°œλ³€μˆ˜κ°€ κ°™μ•„μ•Όν•œλ‹€. 3) λ°˜ν™˜νƒ€μž…μ΄ κ°™μ•„μ•Όν•œλ‹€.  

 

  • ν•¨μˆ˜(λ©”μ†Œλ“œ) μž¬μ •μ˜(Overriding)

λΆ€λͺ¨ν΄λž˜μŠ€μ˜ λͺ¨λ“  λ©”μ†Œλ“œκ°€ μžμ‹ ν΄λž˜μŠ€μ—κ²Œ 맞게 μ„€κ³„λ˜μ—ˆλ‹€λ©΄ κ°€μž₯ 이상적인 μƒμ†μ΄μ§€λ§Œ, μ–΄λ–€ λ©”μ†Œλ“œλŠ” μžμ‹ ν΄λž˜μŠ€κ°€ μ‚¬μš©ν•˜κΈ°μ— μ ν•©ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆλ‹€. 이 경우 μƒμ†λœ 일뢀 λ©”μ†Œλ“œλŠ” μžμ‹ν΄λž˜μŠ€μ—μ„œ λ‹€μ‹œ μˆ˜μ •ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 

 

λ©”μ†Œλ“œ μ˜€λ²„λΌμ΄λ”©μ€ μƒμ†λœ λ©”μ†Œλ“œμ˜ λ‚΄μš©μ΄ μžμ‹ ν΄λž˜μŠ€μ— λ§žμ§€ μ•Šμ„ 경우, μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ™μΌν•œ λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•˜λŠ” 것을 λ§ν•œλ‹€. 

 

예제 1) 

 

disp()ν•¨μˆ˜κ°€ μžμ‹ν΄λž˜μŠ€μΈ BBμ—μ„œ μž¬μ •μ˜

λ©”μ†Œλ“œκ°€ μ˜€λ²„λΌμ΄λ”©λ˜μ—ˆλ‹€λ©΄ λΆ€λͺ¨ 객체의 λ©”μ†Œλ“œλŠ” μˆ¨κ²¨μ§€κΈ° λ•Œλ¬Έμ—, μžμ‹ κ°μ²΄μ—μ„œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μ˜€λ²„λΌμ΄λ”©λœ μžμ‹ λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλœλ‹€.

 

예제 2)

 

yousan()ν•¨μˆ˜κ°€ μžμ‹ν΄λž˜μŠ€μΈ HSonμ—μ„œ μž¬μ •μ˜ 

 

 


λ‹€ν˜•μ„±

:λ‹€ν˜•μ„±μ΄λž€? 상속과 ν•¨κ»˜ 객체지ν–₯κ°œλ…μ˜ μ€‘μš”ν•œ νŠΉμ§• μ€‘μ˜ ν•˜λ‚˜μ΄λ‹€. 객체지ν–₯κ°œλ…μ—μ„œ 'λ‹€ν˜•μ„±' μ΄λž€ μ—¬λŸ¬κ°€μ§€ ν˜•νƒœλ₯Ό κ°€μ§ˆ 수 μžˆλŠ” λŠ₯λ ₯을 μ˜λ―Έν•˜λ©°, μžλ°”μ—μ„œλŠ” ν•œ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μ—¬λŸ¬ νƒ€μž…μ˜ 객체λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•˜λŠ” 것이닀. ꡬ체적으둜 λ§ν•˜μžλ©΄, λΆ€λͺ¨ν΄λž˜μŠ€μ˜ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μžμ†ν΄λž˜μŠ€μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°ν•  수 μžˆλ„λ‘ ν•˜μ˜€λ‹€λŠ” 것이닀. 

 

μ•„λž˜μ˜ μ˜ˆμ‹œμ—μ„œ HParents r = new HSon(1, 2); ->  λΆ€λͺ¨ νƒ€μž…μ˜ μ°Έμ‘°λ³€μˆ˜λ‘œ μžμ† μΈμŠ€ν„΄μŠ€λ₯Ό μ°Έμ‘°

 

 

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

λΆ€λͺ¨ν΄λž˜μŠ€μ—μ„œ μžμ‹ν΄λž˜μŠ€λ‘œ μ—…μΊμŠ€νŒ… ν•  수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μžμ‹μ€ λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό 담을 수 μ—†λ‹€. 

κ·Έλ ‡κ²Œ μƒμ„±ν•œ 객체둜 ν•¨μˆ˜μž¬μ •μ˜ ν•œ μžμ‹ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ μžμ‹ν΄λž˜μŠ€μ—μ„œ μƒμ„±ν•œ ν•¨μˆ˜λŠ” μ‚¬μš©ν•  수 μ—†λ‹€. 

 

 

upCasting ν•œ μžμ‹ν΄λž˜μŠ€λ§Œ λ‹€μ‹œ downCasting ν•  수 μžˆλ‹€. 

 

aκ°μ²΄λŠ” upCastingν•˜κ³  downCastingν–ˆκΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠλŠ”λ‹€.

 

[정리]

- λΆ€λͺ¨ν΄λž˜μŠ€λŠ” μžμ‹ν΄λž˜μŠ€λ₯Ό 담아쀄 수 μžˆλ‹€. μ˜€λ²„λΌμ΄λ”©λœ ν•¨μˆ˜λ₯Ό κ°€μ Έλ‹€κ°€ μ“Έ 수 μžˆλ‹€.

- μ—…μΊμŠ€νŒ…λœ μžμ‹ν΄λž˜μŠ€λŠ” λ‹€μš΄μΊμŠ€νŒ…ν•  수 μžˆλ‹€. 

 

μžμ‹νƒ€μž… -> μ‘°μƒνƒ€μž…(Upcasting) : ν˜•λ³€ν™˜ μƒλž΅κ°€λŠ₯

μžμ†νƒ€μž… <- μ‘°μƒνƒ€μž…(DownCasting) : ν˜•λ³€ν™˜ μƒλž΅λΆˆκ°€

 

 

예제 3)

 

μ΅œμƒμœ„ 클래슀인 Object둜 λ°›μ•„μ„œ λ‹€μš΄μΊμŠ€ν‚Ή

예제 4)

 

배열을 μ΄μš©ν•΄μ„œ μ‚¬μš©ν•  수 μžˆλ‹€. 

 

final 은 ν•¨μˆ˜ μž¬μ •μ˜κ°€ μ•ˆλœλ‹€. 

μž¬μ •μ˜λ§κ³  λΆ€λͺ¨ν•¨μˆ˜μ˜ final λ©”μ†Œλ“œλ₯Ό κ°€μ Έλ‹€ μ“°λŠ” 것은 κ°€λŠ₯ν•˜λ‹€. 

 

 

 

[μ°Έκ³ ] μ˜€λ²„λ‘œλ”© vs μ˜€λ²„λΌμ΄λ”©

 

μ˜€λ²„λ‘œλ”©(Overloading): 기쑴에 μ—†λŠ” μƒˆλ‘œμš΄ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 것

μ˜€λ²„λΌμ΄λ”©(Overriding): 상속받은 λ©”μ„œλ“œμ˜ λ‚΄μš©μ„ λ³€κ²½ν•˜λŠ” 것

 

λ°˜μ‘ν˜•
Comments