Java

μ˜€λ²„λ‘œλ”©(Overloading)κ³Ό μ˜€λ²„λΌμ΄λ”©(Overriding)

KJihun 2023. 6. 9. 19:02
728x90

πŸ” μ˜€λ²„λ‘œλ”© (Overloading)

같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ‚˜ μƒμ„±μžλ₯Ό λ§€κ°œλ³€μˆ˜λ§Œ λ‹€λ₯΄κ²Œ μ—¬λŸ¬ 개 μ •μ˜ν•˜λŠ” 것

  • 같은 μ΄λ¦„μ˜ λ©”μ„œλ“œλ₯Ό μ—¬λŸ¬ 개 μ •μ˜ν•  수 μžˆλ‹€.
  • 단, λ§€κ°œλ³€μˆ˜μ˜ 개수, νƒ€μž…, μˆœμ„œ 쀑 ν•˜λ‚˜ 이상이 달라야 ν•œλ‹€.
  • 호좜 μ‹œ μ»΄νŒŒμΌλŸ¬κ°€ μ „λ‹¬λœ 인자λ₯Ό λ°”νƒ•μœΌλ‘œ μ–΄λ–€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• μ§€ νŒλ‹¨ν•œλ‹€.
  • 가독성과 일관성을 높일 수 μžˆμ–΄ 맀우 μœ μš©ν•˜λ‹€
//μ˜€λ²„λ‘œλ”© 예제
	public int add(int a, int b) { 
    	return a + b; 
    } 
    public double add(double a, double b) { 
    	return a + b; 
    } 
    public int add(int a, int b, int c) { 
    	return a + b + c; 
    }

같은 addλΌλŠ” μ΄λ¦„μ΄μ§€λ§Œ, 인자의 νƒ€μž…/κ°œμˆ˜κ°€ λ‹¬λΌμ„œ 각각 λ‹€λ₯Έ λ©”μ„œλ“œλ‘œ μΈμ‹λœλ‹€.

 

 

 

πŸ”„ μ˜€λ²„λΌμ΄λ”© (Overriding)

μƒμœ„ 클래슀의 λ©”μ„œλ“œλ₯Ό ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜λŠ” 것

  • 상속 κ΄€κ³„μ—μ„œ λ°œμƒν•˜λŠ” κ°œλ…μ΄λ‹€.
  • ν•˜μœ„ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀의 λ©”μ„œλ“œλ₯Ό λ™μΌν•œ λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λ‘œ λ‹€μ‹œ μ •μ˜ν•œλ‹€.
  • κΈ°μ‘΄ λ™μž‘μ„ λ³€κ²½ν•˜κ±°λ‚˜ ν™•μž₯ν•  수 μžˆλ‹€.
  • @Override μ–΄λ…Έν…Œμ΄μ…˜μ„ λΆ™μ—¬μ£ΌλŠ” 것이 μ’‹λ‹€. (컴파일 νƒ€μž„ 체크 κ°€λŠ₯)
//μ˜€λ²„λΌμ΄λ”© 예제
public class Animal {
    public void makeSound() {
        System.out.println("동물이 μ†Œλ¦¬λ₯Ό λ‚Έλ‹€.");
    }
}

public class Cat extends Animal {
    @Override		//μ˜€λ²„λΌμ΄λ”©μ„ ν•˜κΈ° μœ„ν•œ μ–΄λ…Έν…Œμ΄μ…˜
    public void makeSound() {
        System.out.println("μ•Όμ˜Ήμ•Όμ˜Ή");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.makeSound();  // "동물이 μ†Œλ¦¬λ₯Ό λ‚Έλ‹€."

        Cat cat = new Cat();
        cat.makeSound();  // "μ•Όμ˜Ήμ•Όμ˜Ή"
    }
}

Cat ν΄λž˜μŠ€κ°€ Animal 클래슀의 makeSound()λ₯Ό μ˜€λ²„λΌμ΄λ”©ν•΄μ„œ, κ³ μ–‘μ΄λ§Œμ˜ μ†Œλ¦¬λ₯Ό 내도둝 μž¬μ •μ˜ν•œ 것.

βœ… 두 κ°œλ…μ˜ 차이 정리

 

ꡬ뢄 μ˜€λ²„λ‘œλ”© (Overloading) μ˜€λ²„λΌμ΄λ”© (Overriding)
적용 λŒ€μƒ 같은 클래슀 λ‚΄ λ©”μ„œλ“œ 상속 관계에 μžˆλŠ” 클래슀 κ°„ λ©”μ„œλ“œ
λ§€μ„œλ“œ 이름 동일해야 함 동일해야 함
λ§€κ°œλ³€μˆ˜ λ‹€λ₯΄κ²Œ μ •μ˜ν•΄μ•Ό 함 μ™„μ „νžˆ κ°™μ•„μ•Ό 함 (νƒ€μž…, 개수, μˆœμ„œ)
λ°˜ν™˜ νƒ€μž… λ‹€λ₯Ό 수 있음 기본적으둜 κ°™μ•„μ•Ό ν•˜μ§€λ§Œ, μžμ‹ νƒ€μž…μ€ ν—ˆμš©λ¨
λͺ©μ  λ©”μ„œλ“œ 이름 μž¬μ‚¬μš©μœΌλ‘œ 가독성 ν–₯상 κΈ°λŠ₯ λ³€κ²½/ν™•μž₯을 μœ„ν•œ μž¬μ •μ˜
컴파일 νƒ€μž„ μ–΄λ–€ λ©”μ„œλ“œκ°€ ν˜ΈμΆœλ μ§€ 컴파일 μ‹œ 결정됨 μ‹€ν–‰ μ‹œμ μ— μ‹€μ œ 객체 νƒ€μž…μ— 따라 결정됨 (λ‹€ν˜•μ„±)