오버로딩 & 오버라이딩
Aug 05, 2024
오버로딩(Overloading)과 오버라이딩(Overriding)
이 둘은 다형성을 높여주는 개념이며, 비슷한 이름을 가지고 있지만, 전혀 다른 개념이라고 봐도 될만큼 차이가 있다
오버로딩(Overloading)
- 오버로딩은 같은 이름의 메서드를 여러 개 정의해, 인자의 수나 타입에 따라 다른 동작을 수행하게 하는 것을 의미.
- 동일한 이름을 가진 메서드가 여러 개 정의됨.
- 메서드의 파라미터 수나 타입이 달라야 함.
- 어떤 메서드가 호출될 지 컴파일 타임에 결정됨.
class Math { // 두 개의 정수를 더하는 메서드 int add(int a, int b) { return a + b; } // 세 개의 정수를 더하는 메서드 int add(int a, int b, int c) { return a + b + c; } // 두 개의 실수를 더하는 메서드 double add(double a, double b) { return a + b; } } public class Main { public static void main(String[] args) { Math math = new Math(); // 메서드 오버로딩 호출 예시 System.out.println(math.add(1, 2)); // Output: 3 System.out.println(math.add(1, 2, 3)); // Output: 6 System.out.println(math.add(1.5, 2.5)); // Output: 4.0 } }
오버라이딩(Overriding)
- 오버라이딩은 부모 클래스에 정의된 메서드를 자식클래스에서 재정의하여, 부모 클래스의 메서드를 덮어쓰는 것을 말함. 이는 런타임에 결정되며, 동적 다형성을 구현함.
- 부모 클래스와 동일한 이름의 메서드를 자식 클래스에서 재정의함.
- 메서드의 파라미터, 반환타입이 동일해야 한다.
- 어떤 메서드가 호출이 되는지 런타임에 결정됨.
// 상위 클래스 class Animal { // 상위 클래스의 메서드 public void sound() { System.out.println("Some sound"); } } // 하위 클래스 class Dog extends Animal { // 메서드 오버라이딩 @Override public void sound() { System.out.println("Bark"); } } // 또 다른 하위 클래스 class Cat extends Animal { // 메서드 오버라이딩 @Override public void sound() { System.out.println("Meow"); } } public class Main { public static void main(String[] args) { Animal animal = new Animal(); Animal dog = new Dog(); Animal cat = new Cat(); // 메서드 오버라이딩 호출 예시 animal.sound(); // Output: Some sound dog.sound(); // Output: Bark cat.sound(); // Output: Meow } }
요약 비교
특성 | 오버로딩(Overloading) | 오버라이딩(Overriding) |
메서드 이름 | 동일 | 동일 |
파라미터(매개변수) | 다름 | 동일 |
반환 타입 | 다를 수 있음 | 동일 |
접근 제어자(public,private…) | 상관없음 | 동일 혹은 더 넓은 범위 |
결정 시점 | 컴파일 타임 | 런타임 |
사용하는 상황 | 같은 클래스 내에 여러 버전의 메서드를 제공할 때 | 부모 클래스의 메서드를 자식 클래스에서 재정의 할 때 |
Share article