DEV/cs

[CS] 오버로딩 vs 오버라이딩 비교

강한 2026. 9. 27. 15:28

메서드 오버로딩과 오버라이딩의 차이를 자바 코드로 정리했습니다.


 

오버로딩(Overloading)

같은 클래스 안에서, 같은 이름의 메서드를 매개변수만 다르게 여러 개 만드는 것입니다.

 
java
class Calculator {
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) { // 매개변수 타입이 다름
        return a + b;
    }

    int add(int a, int b, int c) { // 매개변수 개수가 다름
        return a + b + c;
    }
}

메서드 이름은 add로 똑같지만, 매개변수의 타입이나 개수가 다르면 별개의 메서드로 취급됩니다. 어떤 걸 호출할지는 컴파일 시점에, 넘긴 인자를 보고 정해집니다.

 

 

오버라이딩(Overriding)

부모 클래스에서 물려받은 메서드를 자식 클래스의 상황에 맞게 다시 정의(재정의)하는 것을 의미합니다.

 
java
class Animal {
    void sound() {
        System.out.println("동물이 소리를 낸다");
    }
}

class Dog extends Animal {
    @Override
    void sound() { // 부모 메서드를 재정의
        System.out.println("멍멍");
    }
}
 
java
Animal animal = new Dog();
animal.sound(); // "멍멍" 출력

Animal 타입 변수로 선언했지만, 실제 담긴 객체는 Dog이기 때문에 Dog의 sound()가 실행됩니다. 어떤 메서드가 실행될지는 실행 시점에, 실제 객체 타입을 보고 정해집니다.

 

핵심 차이

오버로딩 - 오버라이딩

 

관계 같은 클래스 내부 부모-자식 클래스 사이
메서드 시그니처 이름은 같고 매개변수가 다름 이름·매개변수 완전히 동일
결정 시점 컴파일 시점(정적) 실행 시점(동적)
목적 같은 기능을 다양한 입력으로 제공 부모의 기능을 자식이 다르게 구현

 

마무리

오버로딩은 매개변수를 다르게, 오버라이딩은 부모의 동작을 다르게.