Java Study

TIL - 오버로딩 vs 오버라이딩

초코너무조코 2024. 12. 23. 17:37
728x90

오버로딩(Overloading)

오버로딩같은 이름의 메서드를 매개변수의 개수나 타입을 다르게 정의하여 사용하는 것을 말한다. 주로 컴파일 시점에 결정되며, 같은 클래스 내에서 메서드의 다양성을 제공한다는 장점이 있다.

(Java)

class Calculator {
    // 두 개의 정수를 더하는 메서드
    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) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(3, 5));        // 출력: 8
        System.out.println(calc.add(1, 2, 3));     // 출력: 6
        System.out.println(calc.add(1.2, 3.4));    // 출력: 4.6
    }
}

특징

  • 메서드 이름은 같지만 매개변수의 개수나 타입이 다르다.
  • 반환 타입은 오버로딩을 구분하는 데 영향을 미치지 않는다.

오버라이딩(Overriding)

오버라이딩상위 클래스의 메서드를 하위 클래스에서 재정의하여 사용하는 것을 의미한다. 주로 런타임 시점에 결정되며, 다형성을 제공한다.

 

class Animal {
    // 상위 클래스 메서드
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

class Dog extends Animal {
    // 오버라이딩된 메서드
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}

class Cat extends Animal {
    // 오버라이딩된 메서드
    @Override
    void sound() {
        System.out.println("야옹!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.sound();  // 출력: 멍멍!
        myCat.sound();  // 출력: 야옹!
    }
}

특징

  • 상위 클래스의 메서드를 같은 이름, 같은 매개변수로 재정의한다.
  • @Override 어노테이션을 사용하여 오버라이딩 여부를 명시적으로 표현할 수 있다.
  • 메서드의 접근 제어자는 상위 클래스보다 더 제한적일 수 없다.

비교

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

정의 같은 이름의 메서드를 매개변수 형태를 다르게 정의 상위 클래스의 메서드를 하위 클래스에서 재정의
시점 컴파일 타임 런타임
적용 범위 같은 클래스 내에서 적용 상속 관계에서 적용
다형성 제공하지 않음 제공함

 

728x90