[JAVA] 상속

2021. 4. 2. 18:46Β·πŸ“ Language/✏ JAVA

상속

 

1. 상속

상속은 λΆ€λͺ¨κ°€ μžμ‹μ—κ²Œ λ¬Όλ €μ£ΌλŠ” ν–‰μœ„λ₯Ό λ§ν•œλ‹€. μžμ‹μ€ 상속을 ν†΅ν•΄μ„œ λΆ€λͺ¨κ°€ λ¬Όλ €μ€€ 것을 μžμ—°μŠ€λŸ½κ²Œ μ΄μš©ν•  수 μžˆλ‹€.

  • 이미 잘 개발된 클래슀λ₯Ό μž¬μ‚¬μš©ν•΄μ„œ μƒˆλ‘œμš΄ 클래슀λ₯Ό λ§Œλ“€κΈ° λ•Œλ¬Έμ— μ€‘λ³΅λ˜λŠ” μ½”λ“œλ₯Ό 쀄여쀀닀.
  • λΆ€λͺ¨ 클래슀의 μˆ˜μ •μœΌλ‘œ λͺ¨λ“  μžμ‹ ν΄λž˜μŠ€λ“€λ„ μˆ˜μ •λ˜λŠ” 효과λ₯Ό κ°€μ Έμ˜€κΈ° λ•Œλ¬Έμ— μœ μ§€ 보수 μ‹œκ°„μ„ μ΅œμ†Œν™”ν•œλ‹€.

 

1) 클래슀 상속

μžμ‹ 클래슀λ₯Ό μ„ μ–Έν•  λ•Œ μ–΄λ–€ λΆ€λͺ¨ 클래슀λ₯Ό 상속받을 것인지 λͺ…μ‹œν•œλ‹€.

  • μ—¬λŸ¬ 개의 λΆ€λͺ¨ 클래슀λ₯Ό 상속할 수 μ—†λ‹€.
  • μ ‘κ·Ό μ œν•œμžμ— 따라 상속 λŒ€μƒ ν•„λ“œμ™€ λ©”μ„œλ“œκ°€ 달라진닀.
class μžμ‹ν΄λž˜μŠ€ extends λΆ€λͺ¨ν΄λž˜μŠ€ {
	// ν•„λ“œ
	// μƒμ„±μž
	// λ©”μ†Œλ“œ
}

 

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

μžμ‹ 객체λ₯Ό μƒμ„±ν•˜λ©΄ λΆ€λͺ¨ 객체가 λ¨Όμ € μƒμ„±λ˜κ³  κ·Έλ‹€μŒμ— μžμ‹ 객체가 μƒμ„±λœλ‹€. λͺ¨λ“  κ°μ²΄λŠ” 클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ”λ° λΆ€λͺ¨ μƒμ„±μžλŠ” μžμ‹ μƒμ„±μžμ˜ 맨 첫 μ€„μ—μ„œ ν˜ΈμΆœλœλ‹€.

// 1. μžμ‹ μƒμ„±μžκ°€ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έλ˜μ§€ μ•Šμ•˜λ‹€λ©΄
// μ»΄νŒŒμΌλŸ¬κ°€ μ•„λž˜μ™€ 같은 κΈ°λ³Έ μƒμ„±μžλ₯Ό μƒμ„±ν•œλ‹€.

public μžμ‹ν΄λž˜μŠ€() {
	super();	// λΆ€λͺ¨ 클래슀의 κΈ°λ³Έ μƒμ„±μž 호좜
}

// 2. 직접 μžμ‹ μƒμ„±μžλ₯Ό μ„ μ–Έν•˜κ³  λͺ…μ‹œμ μœΌλ‘œ λΆ€λͺ¨ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•œλ‹€λ©΄

public μžμ‹ν΄λž˜μŠ€(λ§€κ°œλ³€μˆ˜, ...) {
	super(λ§€κ°œλ³€μˆ˜, ...);	// μ—†λ‹€λ©΄ μ»΄νŒŒμΌλŸ¬μ— μ˜ν•΄ λΆ€λͺ¨ 클래슀의 κΈ°λ³Έ μƒμ„±μž μžλ™μœΌλ‘œ μΆ”κ°€
}

 

3) λ©”μ„œλ“œ μž¬μ •μ˜(μ˜€λ²„λΌμ΄λ”©)

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

 

이런 경우 μƒμ†λœ 일뢀 λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬ μˆ˜μ •ν•œλ‹€. μ΄λ•Œ λΆ€λͺ¨ 객체의 λ©”μ„œλ“œλŠ” μˆ¨κ²¨μ§€κΈ° λ•Œλ¬Έμ— μžμ‹ κ°μ²΄μ—μ„œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜λ©΄ μž¬μ •μ˜λœ μžμ‹ λ©”μ„œλ“œλ§Œ ν˜ΈμΆœλœλ‹€. λ§Œμ•½ λΆ€λͺ¨ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜κ³  μ‹Άλ‹€λ©΄ super ν‚€μ›Œλ“œ(super. λΆ€λͺ¨ λ©”μ„œλ“œ())λ₯Ό 톡해 ν˜ΈμΆœν•  수 μžˆλ‹€.

  • λΆ€λͺ¨ λ©”μ„œλ“œμ™€ λ™μΌν•œ μ‹œκ·Έλ‹ˆμ²˜(리턴 νƒ€μž…, λ©”μ„œλ“œ 이름, 맀개 λ³€μˆ˜ λͺ©λ‘)λ₯Ό κ°€μ Έμ•Ό ν•œλ‹€.
  • μ ‘κ·Ό μ œν•œμ„ 더 κ°•ν•˜κ²Œ μ •μ˜ν•  수 μ—†λ‹€.
  • μƒˆλ‘œμš΄ μ˜ˆμ™Έλ₯Ό throws ν•  수 μ—†λ‹€.
  • λ©”μ„œλ“œ μœ„μ— @Override μ–΄λ…Έν…Œμ΄μ…˜μ„ λΆ™μ—¬μ£Όλ©΄ μ»΄νŒŒμΌλŸ¬κ°€ μ •ν™•νžˆ μž¬μ •μ˜λœ 것인지 ν™•μΈν•˜μ—¬ 개발자의 μ‹€μˆ˜λ₯Ό 쀄여쀀닀.

 

4) final

final ν‚€μ›Œλ“œλŠ” 클래슀, ν•„λ“œ, λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©ν•˜λŠ”λ° ν•΄λ‹Ή 선언이 μ΅œμ’… μƒνƒœμ΄κ³  κ²°μ½” μˆ˜μ •λ  수 μ—†μŒμ„ λœ»ν•œλ‹€.

  • 클래슀: 상속할 수 μ—†λŠ” ν΄λž˜μŠ€κ°€ λœλ‹€. 즉, μžμ‹ 클래슀λ₯Ό λ§Œλ“€ 수 μ—†λ‹€.
  • λ©”μ„œλ“œ: μž¬μ •μ˜ν•  수 μ—†λŠ” λ©”μ„œλ“œκ°€ λœλ‹€. 즉, μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•  수 μ—†λ‹€.
  • ν•„λ“œ: μ΄ˆκΈ°κ°’ μ„€μ • ν›„ 더 이상 값을 λ³€κ²½ν•  수 μ—†λ‹€.

 

2. νƒ€μž… λ³€ν™˜κ³Ό λ‹€ν˜•μ„±

λ‹€ν˜•μ„±μ€ μ‚¬μš© 방법은 λ™μΌν•˜μ§€λ§Œ λ‹€μ–‘ν•œ 객체λ₯Ό μ΄μš©ν•΄μ„œ λ‹€μ–‘ν•œ μ‹€ν–‰κ²°κ³Όκ°€ λ‚˜μ˜€λ„λ‘ ν•˜λŠ” μ„±μ§ˆμ΄λ‹€. λ‹€ν˜•성을 κ΅¬ν˜„ν•˜λ €λ©΄ λ©”μ„œλ“œ μž¬μ •μ˜μ™€ νƒ€μž… λ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€.

 

1) μžλ™ νƒ€μž… λ³€ν™˜

클래슀의 νƒ€μž… λ³€ν™˜μ€ 상속 관계에 μžˆλŠ” 클래슀 μ‚¬μ΄μ—μ„œ λ°œμƒν•œλ‹€. μ—¬κΈ°μ„œ μžλ™ νƒ€μž… λ³€ν™˜μ€ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 도쀑에 μžλ™μ μœΌλ‘œ νƒ€μž… λ³€ν™˜μ΄ μΌμ–΄λ‚˜λŠ” 것을 λ§ν•œλ‹€. μžμ‹μ€ λΆ€λͺ¨μ˜ νŠΉμ§•κ³Ό κΈ°λŠ₯을 상속받기 λ•Œλ¬Έμ— λΆ€λͺ¨μ™€ λ™μΌν•˜κ²Œ μ·¨κΈ‰λ˜μ–΄ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.

λΆ€λͺ¨νƒ€μž… λ³€μˆ˜ = μžμ‹νƒ€μž…;

// ex 1
Animal animal = new Cat();

// ex 2
Cat cat = new Cat();
Animal animal = cat;

 

λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜λœ μ΄ν›„μ—λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ„œλ“œλ§Œ 접근이 κ°€λŠ₯ν•˜λ‹€. κ·ΈλŸ¬λ‚˜ λ©”μ„œλ“œκ°€ μžμ‹ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜λ˜μ—ˆλ‹€λ©΄ μžμ‹ 클래슀의 λ©”μ„œλ“œκ°€ λŒ€μ‹  ν˜ΈμΆœλœλ‹€.

 

2) ν•„λ“œμ˜ λ‹€ν˜•μ„±

ν•„λ“œμ˜ νƒ€μž…μ„ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜λ©΄ λ‹€μ–‘ν•œ μžμ‹ 객체듀이 μ €μž₯될 수 있기 λ•Œλ¬Έμ— ν•„λ“œ μ‚¬μš© κ²°κ³Όκ°€ 달라진닀. μ΄κ²ƒμ΄ ν•„λ“œμ˜ λ‹€ν˜•μ„±μ΄λ‹€.

 

1. λΆ€λͺ¨ 클래슀λ₯Ό μƒμ†ν•˜λŠ” μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨κ°€ κ°€μ§€κ³  μžˆλŠ” ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό κ°€μ§€κ³  μžˆμœΌλ‹ˆ μ‚¬μš© 방법이 λ™μΌν•˜λ‹€.
2. μžμ‹ ν΄λž˜μŠ€λŠ” λΆ€λͺ¨μ˜ λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ν•˜μ—¬ λ©”μ„œλ“œμ˜ μ‹€ν–‰ λ‚΄μš©μ„ λ³€κ²½ν•¨μœΌλ‘œμ¨ λ‹€λ₯Έ μ‹€ν–‰κ²°κ³Όλ₯Ό 얻을 수 μžˆλ‹€.
3. μžμ‹ νƒ€μž…μ„ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•  수 μžˆλ‹€.

이 μ„Έ κ°€μ§€κ°€ λ‹€ν˜•μ„±μ„ κ΅¬ν˜„ν•  수 μžˆλŠ” 기술적 쑰건이닀.

 

3) 맀개 λ³€μˆ˜μ˜ λ‹€ν˜•μ„±

μžλ™ νƒ€μž… λ³€ν™˜μ€ ν•„λ“œμ˜ 값을 λŒ€μž…ν•  λ•Œ λ°œμƒν•˜μ§€λ§Œ 주둜 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œ 많이 λ°œμƒν•œλ‹€. λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•  λ•Œμ—λŠ” 맀개 λ³€μˆ˜μ˜ νƒ€μž…κ³Ό λ™μΌν•œ 맀개 값을 μ§€μ •ν•˜λŠ” 것이 μ •μ„μ΄μ§€λ§Œ, λ§€κ°œ 값을 λ‹€μ–‘ν™”ν•˜κΈ° μœ„ν•΄ 맀개 λ³€μˆ˜μ— μžμ‹ 객체λ₯Ό μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€.

class Driver {
    void drive(Vehicle vehicle) // bus
    {
        vehicle.run();
    }
}

 

맀개 κ°’μœΌλ‘œ μ–΄λ–€ μžμ‹ 객체가 μ œκ³΅λ˜λŠλƒμ— 따라 λ©”μ„œλ“œμ˜ μ‹€ν–‰κ²°κ³ΌλŠ” λ‹€μ–‘ν•΄μ§ˆ 수 μžˆλ‹€.

 

4) κ°•μ œ νƒ€μž… λ³€ν™˜

κ°•μ œ νƒ€μž… λ³€ν™˜μ€ λΆ€λͺ¨ νƒ€μž…μ„ μžμ‹ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것을 λ§ν•œλ‹€. μžμ‹ νƒ€μž…μ΄ λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜ν•œ ν›„ λ‹€μ‹œ μžμ‹ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•  λ•Œ κ°•μ œ νƒ€μž… λ³€ν™˜μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

μžμ‹νƒ€μž… λ³€μˆ˜ = (μžμ‹νƒ€μž…)λΆ€λͺ¨νƒ€μž…;

 

λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μžλ™ νƒ€μž… λ³€ν™˜λ˜λ©΄ λΆ€λͺ¨μ— μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ„œλ“œλ§Œ μ‚¬μš© κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μžμ‹μ— μ„ μ–Έλœ ν•„λ“œμ™€ λ©”μ„œλ“œλ₯Ό κΌ­ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€λ©΄ κ°•μ œ νƒ€μž… λ³€ν™˜μœΌλ‘œ λ‹€μ‹œ μžμ‹ νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•œ ν›„ μ‚¬μš©ν•œλ‹€.

 

λ§Œμ•½ μ²˜μŒλΆ€ν„° λΆ€λͺ¨ νƒ€μž…μœΌλ‘œ μƒμ„±λœ 객체가 μžˆλ‹€λ©΄ κ°•μ œ νƒ€μž… λ³€ν™˜μ„ μ‚¬μš©ν•  수 μ—†λ‹€.

κ·Έλ ‡λ‹€λ©΄ μ–΄λ–»κ²Œ μ°Έμ‘°ν•˜λŠ” 객체λ₯Ό μ•Œ 수 μžˆμ„κΉŒ?

 

μ–΄λ–€ 객체가 μ–΄λ–€ 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ instanceof μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œλ‹€. instanceof μ—°μ‚°μžλ‘œ μ–΄λ–€ 객체인지 ν™•μΈν•œ ν›„ μ•ˆμ „ν•˜κ²Œ κ°•μ œ νƒ€μž… λ³€ν™˜μ„ ν•΄μ•Ό ν•œλ‹€.

// λ§žλ‹€λ©΄ true μ•„λ‹ˆλΌλ©΄ false
boolean result = μ’Œν•­(객체) instanceof μš°ν•­(νƒ€μž…)
μ €μž‘μžν‘œμ‹œ (μƒˆμ°½μ—΄λ¦Ό)
'πŸ“ Language/✏ JAVA' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [JAVA] 쀑첩 ν΄λž˜μŠ€μ™€ 쀑첩 μΈν„°νŽ˜μ΄μŠ€
  • [JAVA] 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
  • [JAVA] 클래슀
  • [JAVA] κΈ°λ³Έν˜• λ³€μˆ˜μ™€ μ°Έμ‘°ν˜• λ³€μˆ˜
Blxxming
Blxxming
CS 지식과 κ³΅λΆ€ν•˜λ‹€ 배운 것, κ²½ν—˜ν•œ 것 등을 κΈ°λ‘ν•˜λŠ” λΈ”λ‘œκ·Έμž…λ‹ˆλ‹€.
  • Blxxming
    πŸ’‘λ²ˆλœ©πŸ’‘
    Blxxming
  • 전체
    였늘
    μ–΄μ œ
  • 곡지사항

    • Tech Interview
    • πŸ“š Tech (246)
      • πŸ“ Computer Science (96)
        • ✏ OS (12)
        • ✏ Network & Web (10)
        • ✏ Database (11)
        • ✏ Data Structure (6)
        • ✏ Algorithm (40)
        • ✏ Design Pattern (9)
        • ✏ Cloud Computing (3)
        • ✏ (5)
      • πŸ“ Language (73)
        • ✏ Language (6)
        • ✏ C & C++ (11)
        • ✏ C# (19)
        • ✏ JAVA (37)
      • πŸ“ Game (43)
        • ✏ Computer Graphics (2)
        • ✏ Unity (14)
        • ✏ Unreal (26)
        • ✏ (1)
      • πŸ“ Book (34)
        • ✏ Effective (3)
        • ✏ Game Server (16)
        • ✏ Clean Code (14)
        • ✏ (1)
  • hELLOΒ· Designed Byμ •μƒμš°.v4.10.0
Blxxming
[JAVA] 상속
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”