λ‹€ν˜•μ„± - OverrideD06πŸ”°

μ΅œμ„±μ§„Β·2023λ…„ 1μ›” 30일
0

Java

λͺ©λ‘ 보기
14/32

λ‹€ν˜•μ„± - Override

1. Overrideλž€

  • λΆ€λͺ¨ ν΄λž˜μŠ€κ°€ κ°–κ³  μžˆλŠ” κΈ°λŠ₯을 μžμ‹ ν΄λž˜μŠ€κ°€ μž¬μ •μ˜
  • λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ •μ˜λœ 것과 λ™μΌν•œ 이름을 κ°–λŠ” λ©”μ„œλ“œλ₯Ό μžμ‹ ν΄λž˜μŠ€κ°€ μ •μ˜ν•œ 경우,
    λΆ€λͺ¨ 클래슀의 κΈ°λŠ₯은 μžμ‹μ—κ²Œ 가렀진닀.
  • μ΄λ ‡κ²Œ λΆ€λͺ¨μ˜ κΈ°λŠ₯을 μž¬μ •μ˜ ν•˜λŠ” 것을 λ©”μ„œλ“œ Override라 ν•œλ‹€.
  • λͺ¨λ“  μžμ‹ ν΄λž˜μŠ€κ°€ λ™μΌν•œ μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό κ°–κ²Œλ˜λ―€λ‘œ 각 객체에 λŒ€ν•˜μ—¬
    attack() μ΄λΌλŠ” 이름을 μ‚¬μš©ν•˜μ—¬ μ„œλ‘œ λ‹€λ₯Έ ν˜•νƒœλ₯Ό κ΅¬ν˜„ν•  수 있게 λœλ‹€.

2. Super ν‚€μ›Œλ“œ

  • 클래슀의 μƒμ†κ΄€κ³„μ—μ„œ μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀λ₯Ό κ°€λ¦¬ν‚€λŠ” μ˜ˆμ•½μ–΄
  • μ‚¬μš©λ°©λ²•
    • λ©€λ²„λ³€μˆ˜ 이름 μ•žμ— λͺ…μ‹œ
      • λΆ€λͺ¨ν΄λž˜μŠ€μ˜ λ©€λ²„λ³€μˆ˜λ₯Ό μ˜λ―Έν•œλ‹€. ν•˜μ§€λ§Œ λΆ€λͺ¨ν΄λž˜μŠ€μ˜ λ©€λ²„λ³€μˆ˜λŠ” 이미 λͺ¨λ‘ μƒμ†λ˜μ–΄ 있기 λ•Œλ¬Έμ— μ΄κ²½μš°μ—λŠ” this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ 결과이기에 잘 μ‚¬μš©ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • λ©”μ„œλ“œ 이름 μ•žμ— λͺ…μ‹œ
      • λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μ˜λ―Έν•œλ‹€.
      • μž¬μ •μ˜ λ˜μ§€ μ•Šμ€ λ©”μ„œλ“œλŠ”(μ˜€λ²„λΌμ΄λ“œ μ•ˆλœ)
        - 이미 μƒμ†λ˜μ–΄ 있기 λ•Œλ¬Έμ— this ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 것과 λ™μΌν•œ κ²°κ³Όλ₯Ό κ°–λŠ”λ‹€.
    • μž¬μ •μ˜ 된 λ©”μ„œλ“œ(μ˜€λ²„λΌμ΄λ“œλœ)
      • Override된 λ©”μ„œλ“œ 이름 μ•žμ— μ‚¬μš©ν•˜κ²Œ 되면
        μž¬μ •μ˜ 되기 μ΄μ „μ˜ 원본 λ©”μ„œλ“œλ₯Ό μ˜λ―Έν•œλ‹€.
class Hello{
	public void say(){
		System.out.println("Hello");
	}
	
}

class Korean extends Hello{
	public void say(){
		System.out.println("μ•ˆλ…•ν•˜μ„Έμš”");// μ˜€λ²„λΌμ΄λ“œν•¨
	}
	public void sayHello(){
		super.say(); // Hello (μ˜€λ²„λΌμ΄λ“œ μ „μ˜ κ°’)
		this.say(); // μ•ˆλ…•ν•˜μ„Έμš” (μ˜€λ²„λΌμ΄λ“œ κ°’)
	}
}

	-> ν‚€μ›Œλ“œ 자체λ₯Ό λ©”μ„œλ“œμ²˜λŸΌ μ‚¬μš©
	- λΆ€λͺ¨ν΄λž˜μŠ€μ˜ μƒμ„±μžλ₯Ό 의미
	- super();  // νŒŒλΌλ―Έν„°λ„ μ μš©κ°€λŠ₯

3. 상속 κ΄€κ³„μ—μ„œμ˜ μƒμ„±μž 처리

  • μƒμ„±μžκ°€ μ •μ˜λœ 클래슀의 상속 μ œν•œ
  • ν•˜μ§€λ§Œ μƒμ„±μžκ°€ μ •μ˜λœ ν΄λž˜μŠ€λŠ” 객체 생성을 μœ„ν•΄μ„œ μƒμ„±μž νŒŒλΌλ―Έν„°λ₯Ό λ°˜λ“œμ‹œ
    전달받아야 ν•˜κΈ° λ•Œλ¬Έμ— νŒŒλΌλ―Έν„°λ₯Ό κ°–λŠ” μƒμ„±μžκ°€ μ •μ˜λœ 클래슀λ₯Ό μƒμ†λ°›κ²Œ 되면 μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

4. λΆ€λͺ¨ μƒμ„±μžμ˜ κ°•μ œ 호좜

  • μƒμ„±μžκ°€ μ •μ˜λœ 클래슀λ₯Ό 상속받은 κ²½μš°μ—λŠ”
    μžμ‹ 클래슀의 μƒμ„±μžλ₯Ό ν†΅ν•΄μ„œ λΆ€λͺ¨ μƒμ„±μžλ₯Ό κ°•μ œλ‘œ ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.
  • λΆ€λͺ¨μ˜ μƒμ„±μžλ₯Ό ν˜ΈμΆœν•˜λŠ” 방법은 superν‚€μ›Œλ“œλ₯Ό λ©”μ„œλ“œ μ΄λ¦„μœΌλ‘œ μ‚¬μš©ν•˜λŠ” 것이닀.
package override;

class Hello3{
	public Hello3(String name) {
		System.out.println(name);
	}
}

class Korean3 extends Hello3 {
	/*
	 * λΆ€λͺ¨μ™€ λ™μΌν•œ νŒŒλΌλ―Έν„°λ₯Ό 받도둝 μƒμ„±μžλ₯Ό μ •μ˜ν•˜κ³ ,
	 * 전달받은 νŒŒλΌλ―Έν„°λ₯Ό λΆ€λͺ¨μ—κ²Œ μž¬μ „λ‹¬ ν•œλ‹€.
	 */
	public Korean3(String name) {
		super(name);  // 이뢀뢄이 superλ₯Ό λ§€μ„œλ“œ μ΄λ¦„μœΌλ‘œ μ‚¬μš©ν•œ λΆ€λΆ„
	}
}

5. @Override

  • λ©”μ„œλ“œ μž¬μ •μ˜ κ³Όμ •μ—μ„œ μ˜€νƒ€ 방지 μ˜΅μ…˜
  • @OverrideλŠ” ν‚€μ›Œλ“œκ°€ λͺ…μ‹œλœ μœ„μΉ˜ μ•„λž˜μ— μ •μ˜λ˜λŠ” λ©”μ„œλ“œκ°€
    λΆ€λͺ¨ ν΄λž˜μŠ€μ— μ‘΄μž¬ν•˜μ§€ μ•Šμ„ 경우 ꡬ문 μ—λŸ¬λ‘œ μ²˜λ¦¬ν•œλ‹€.
  • λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•˜κ³ μž ν•  경우,
    μ˜λ„μΉ˜ μ•Šμ€ μ‹€μˆ˜λ₯Ό μ˜ˆλ°©ν•˜κΈ° μœ„ν•œ'μ˜€νƒ€λ°©μ§€ μ˜΅μ…˜'이닀
  • μ—¬λŸ¬ 개의 λ©”μ„œλ“œλ₯Ό μž¬μ •μ˜ ν•œλ‹€λ©΄ μž¬μ •μ˜ λ˜λŠ” λͺ¨λ“  λ©”μ„œλ“œλ“€ μœ„μ— 각기 λͺ…μ‹œν•΄μ•Ό ν•œλ‹€.
profile
λ§ˆλΆ€λ¦¬μž…λ‹ˆλ‹€

0개의 λŒ“κΈ€