IT

Java 오버로딩(Overloading)과 오버라이딩(Overriding)???

0and24 2024. 11. 15. 15:12

자바(Java)를 학습하다 보면 자주 등장하는 개념 중 하나가 오버로딩(Overloading)오버라이딩(Overriding)입니다. 이 두 개념은 비슷해 보이지만 완전히 다른 목적을 가지고 있습니다. 이번 글에서는 오버로딩과 오버라이딩의 개념과 차이를 간단한 예제와 함께 알아보겠습니다.

출처: https://medium.com/@mesfandiari77/understanding-overloading-and-overriding-in-java-achieving-polymorphism-in-object-oriented-41a5315029cf

1. 오버로딩(Overloading) - 같은 이름, 다른 매개변수

오버로딩(Overloading)같은 이름의 메서드다른 매개변수를 사용하여 정의하는 것을 의미합니다. 메서드 이름은 같지만, 매개변수의 개수나 타입이 다르다면 오버로딩이 가능합니다.

public class Calculator {
    // 두 정수를 더하는 메서드
    public int add(int a, int b) {
        return a + b;
    }

    // 세 정수를 더하는 메서드 (매개변수 개수가 다름)
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 두 실수를 더하는 메서드 (매개변수 타입이 다름)
    public double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(2, 3));          // 5 출력
        System.out.println(calc.add(2, 3, 4));       // 9 출력
        System.out.println(calc.add(2.5, 3.5));      // 6.0 출력
    }
}

핵심 포인트

  • 이름이 같은 메서드를 여러 개 정의할 수 있음.
  • 매개변수의 개수타입이 다르면 오버로딩이 가능.
  • 컴파일 시점에 호출할 메서드가 결정됩니다.

2. 오버라이딩(Overriding) - 부모 메서드 재정의

오버라이딩(Overriding)부모 클래스의 메서드자식 클래스에서 재정의하는 것을 의미합니다. 부모 클래스의 메서드와 이름, 매개변수, 리턴 타입이 모두 동일해야 하며, 자식 클래스에서 구현 내용을 바꿀 수 있습니다.

// 부모 클래스
class Animal {
    public void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

// 자식 클래스
class Dog extends Animal {
    @Override
    public void sound() {
        System.out.println("강아지가 멍멍 소리를 냅니다.");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal animal = new Animal();
        animal.sound();  // "동물이 소리를 냅니다." 출력

        Animal dog = new Dog();
        dog.sound();     // "강아지가 멍멍 소리를 냅니다." 출력
    }
}

핵심 포인트

  • 부모 클래스의 메서드와 이름, 매개변수, 리턴 타입이 동일해야 함.
  • @Override 어노테이션을 사용하여 오버라이딩 여부를 명시.
  • 실행 시점에 호출할 메서드가 결정됩니다(다형성).

 

3. 오버로딩과 오버라이딩의 차이점

항목오버로딩(Overloading)오버라이딩(Overriding)

정의 위치 같은 클래스 부모 클래스와 자식 클래스
메서드 이름 같아야 함 같아야 함
매개변수 다를 수 있음 같아야 함
리턴 타입 달라도 됨 같아야 함
결정 시점 컴파일 시점 실행 시점
목적 다양한 입력에 대해 하나의 메서드 이름으로 처리 상속받은 메서드를 자식 클래스에서 재정의

 

마무리

  • 오버로딩은 같은 이름의 메서드를 매개변수의 차이를 통해 정의하는 것이며, 컴파일 시점에 호출이 결정됩니다.
  • 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이며, 실행 시점에 호출이 결정됩니다.

이 두 개념은 자바에서 다형성과 코드 재사용성을 높이는 핵심 기술입니다. 오버로딩과 오버라이딩의 차이를 명확히 이해하고, 예제를 통해 직접 연습해 보세요! 🎉