πŸ“‚ JAVA/μ£Όμš” κ°œλ…

μΆ”μƒν΄λž˜μŠ€(Abstract Class) VS μΈν„°νŽ˜μ΄μŠ€(Interface)

Amenable 2023. 6. 13. 14:44

  μ§€κΈˆκΉŒμ§€ μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚΄νŽ΄λ³΄μ•˜λ‹€. μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€λŠ” 각각 κ³ μœ ν•œ λͺ‡λͺ‡ νŠΉμ§•μ„ κ°€μ§€κ³  μžˆμ§€λ§Œ, "좔상 λ©”μ„œλ“œλ₯Ό 톡해 상속/κ΅¬ν˜„μ„ ν†΅ν•œ λ©”μ„œλ“œ κ°•μ œ κ΅¬ν˜„ κ·œμΉ™μ„ κ°€μ§€λŠ” 좔상화 클래슀"λΌλŠ” μ μ—μ„œ 맀우 λΉ„μŠ·ν•˜λ‹€λŠ” λŠλ‚Œμ„ 받을 것이닀.

  λ˜ν•œ, 'κ·Έλ ‡λ‹€λ©΄ λͺ¨λ“  λ©”μ„œλ“œλ₯Ό 좔상 λ©”μ„œλ“œλ‘œ λ§Œλ“€μ–΄μ„œ μ‚¬μš©ν•˜λ©΄ 좔상 ν΄λž˜μŠ€κ°€ μΈν„°νŽ˜μ΄μŠ€ μ—­ν•  ν•  수 μžˆλŠ”λ° μ™œ ꡳ이 μΈν„°νŽ˜μ΄μŠ€κ°€ μ‘΄μž¬ν•˜λŠ” 걸까? 'λΌλŠ” μ˜λ¬Έλ„ 생길 수 μžˆλ‹€.

 

  κΈ°λŠ₯적인 츑면을 λ‹€ μ œμ™Έν•˜κ³ , 두 개λ₯Ό λ‚˜λˆ„μ–΄μ„œ μ‚¬μš©ν•˜λŠ” κ°€μž₯ 큰 μ΄μœ λŠ” μ‚¬μš© λͺ©μ κ³Ό μ‚¬μš© μ‹œκΈ°κ°€ λ‹€λ₯΄λ‹€λŠ” 것이닀.

  κ·ΈλŸ¬λ―€λ‘œ '좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ μ‚¬μš© λͺ©μ κ³Ό μ‚¬μš© μ‹œκΈ°μ˜ 차이'λ₯Ό μ•Œμ•„λ³΄κ³ , 'κΈ°λŠ₯적인 차이점'에 λŒ€ν•΄μ„œλ„ μΆ”κ°€μ μœΌλ‘œ 정리해 보도둝 ν•˜μž.

 

 

πŸ“™ 1. μ‚¬μš© λͺ©μ κ³Ό μ‚¬μš© μ‹œκΈ°μ˜ 차이

πŸ“Œ 1. μ‚¬μš© λͺ©μ 

  • 좔상 클래슀
    extends(상속, ν™•μž₯의 λŠλ‚Œ) ν‚€μ›Œλ“œ κ·ΈλŒ€λ‘œ μžμ‹ μ˜ κΈ°λŠ₯듀을 ν•˜μœ„λ‘œ ν™•μž₯μ‹œν‚€λŠ” κ²ƒμœΌλ‘œ λ³Ό μˆ˜ μžˆλ‹€.
    좔상 ν΄λž˜μŠ€λ₯Ό μƒμ†λ°›μ•„μ„œ κΈ°λŠ₯을 μ΄μš©ν•˜κ³  ν™•μž₯μ‹œν‚€λŠ”λ° λͺ©μ μ΄ μžˆλ‹€.
  • μΈν„°νŽ˜μ΄μŠ€
    implements(상속, κ΅¬ν˜„μ˜ λŠλ‚Œ) ν‚€μ›Œλ“œμ²˜λŸΌ μΈν„°νŽ˜μ΄μŠ€μ— μ •μ˜λœ λ©”μ„œλ“œλ₯Ό 각 클래슀의 λͺ©μ μ— 맞게 λ™μΌν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•˜λŠ” κ²ƒμœΌλ‘œ λ³Ό 수 μžˆλ‹€.
    κ΅¬ν˜„μ„ κ°•μ œν•¨μœΌλ‘œμ¨ κ΅¬ν˜„ κ°μ²΄κ°€ κ°™μ€ λ™μž‘을 ν•œλ‹€λŠ” κ²ƒμ„ λ³΄μž₯ν•  μˆ˜ μžˆλ‹€.

πŸ“Œ 2. μ‚¬μš© μ‹œκΈ°

  • 좔상 클래슀
    상속 κ΄€κ³„λ₯Ό νƒ€κ³  μ˜¬λΌκ°”을 λ•Œ, κ°™μ€ λΆ€λͺ¨ ν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜λ©° λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ κ°€μ§„ κΈ°λŠ₯듀을 κ΅¬ν˜„ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ— μ‚¬μš©
    상속 κ΄€κ³„λ₯Ό νƒ€κ³  μ˜¬λΌκ°”을 λ•Œ κ°™μ€ μ‘°μƒν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜λŠ”λ° κΈ°λŠ₯κΉŒμ§€ μ™„μ „νžˆ λ˜‘같은 κΈ°λŠ₯이 ν•„μš”ν•œ κ²½μš°
  • μΈν„°νŽ˜μ΄μŠ€
    상속 κ΄€κ³„λ₯Ό νƒ€κ³  μ˜¬λΌκ°”을 λ•Œ, λ‹€λ₯Έ λΆ€λͺ¨ ν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜λ”라도 κ°™μ€ κΈ°λŠ₯이 ν•„μš”ν•œ κ²½μš°μ— μ‚¬μš©
    상속 κ΄€κ³„λ₯Ό νƒ€κ³  μ˜¬λΌκ°”을 λ•Œ λ‹€λ₯Έ μ‘°μƒν΄λž˜μŠ€λ₯Ό μƒμ†ν•˜λŠ”λ° κ°™μ€ κΈ°λŠ₯이 ν•„μš”ν•  κ²½μš°μ— μ‚¬μš©

 

 

πŸ“™ 2. κΈ°λŠ₯적인 차이

  이전 κΈ€μ—μ„œ μΆ”μƒν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ κΈ°λŠ₯듀이 μ •λ¦¬λ˜μ–΄ μžˆμœΌλ―€λ‘œ, μ΄λ²ˆμ—λŠ” ν‘œλ‘œλ§Œ κ°„λ‹¨νžˆ μ •λ¦¬ν•˜κ³ μž ν•œλ‹€.

  좔상 클래슀 μΈν„°νŽ˜μ΄μŠ€
μ‚¬μš© ν‚€μ›Œλ“œ abstract interface
상속 ν‚€μ›Œλ“œ extends implements
닀쀑 상속 κ°€λŠ₯ μ—¬λΆ€ λΆˆκ°€λŠ₯ κ°€λŠ₯
(ν΄λž˜μŠ€λŠ” 닀쀑 κ΅¬ν˜„, μΈν„°νŽ˜μ΄μŠ€ λΌλ¦¬λŠ” 닀쀑 상속)
μ‚¬μš© κ°€λŠ₯ λ³€μˆ˜ μ œν•œ μ—†μŒ static final
(μƒμˆ˜)
μ‚¬μš© κ°€λŠ₯ μ ‘κ·Ό μ œμ–΄μž μ œν•œ μ—†μŒ public
μ‚¬μš© κ°€λŠ₯ λ©”μ„œλ“œ μ œν•œ μ—†μŒ abstract method
default method
static method
private method
곡톡점 1. 좔상 λ©”μ„œλ“œλ₯Ό κ°€μ§€κ³  μžˆλ‹€.
2. μΈμŠ€ν„΄μŠ€ν™” ν•  수 μ—†λ‹€. (new μƒμ„±μž μ‚¬μš© λΆˆκ°€)
3. 상속/κ΅¬ν˜„ν•œ κ΅¬ν˜„μ²΄μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.
4. 상속/κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λŠ” 좔상 λ©”μ„œλ“œλ₯Ό λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€.

 

ν•΄λ‹Ή 글은
Jan92 λ‹˜μ˜ 'μžλ°” 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€μ˜ 차이점 μ΄ν•΄ν•˜κΈ°',
κ°•κ΄€μš° λ‹˜μ˜ 'μžλ°”μ˜ 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€',
마이자λͺ½ λ‹˜μ˜ '[JAVA] μΆ”μƒν΄λž˜μŠ€ VS μΈν„°νŽ˜μ΄μŠ€ μ™œ μ‚¬μš©ν• κΉŒ? 차이점, 예제둜 확인 :: 마이자λͺ½',
Inpa λ‹˜μ˜ 'μΈν„°νŽ˜μ΄μŠ€ vs μΆ”μƒν΄λž˜μŠ€ μš©λ„ 차이점 - μ™„λ²½ 이해'
λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.