오버라이딩 vs 오버로딩

hyunnzl·2025년 4월 5일

자바

목록 보기
5/8
post-thumbnail

오버라이딩과 오버로딩

자바에서 메서드를 재정의하거나 중복 정의할 수 있는 기능은 객체지향의 핵심인 다형성(Polymorphism)을 잘 보여준다.






오버라이딩 (Overriding)

부모 클래스에 정의된 메서드를 자식 클래스에서 재정의하여 사용하는 것


특징

  • 상속 관계에서만 가능 (extends)
  • 메서드 이름, 매개변수, 반환형이 모두 동일해야 함
  • 접근 제어자는 같거나 더 넓은 범위로만 가능 (protected → public 가능)
  • @Override 애너테이션을 붙여주면 컴파일 타임에 체크 가능

예제

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

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}





오버로딩 (Overloading)

같은 이름의 메서드를 매개변수 타입/개수/순서만 다르게 하여 여러 개 정의하는 것


특징

  • 같은 클래스 내에서 사용 가능
  • 반환형은 상관없고, 매개변수가 달라야 함
  • 컴파일 타임에 어떤 메서드가 호출될지 결정됨

예제

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;
    }
}
  • 매개변수는 같고 반환형만 다른 메서드는 오버로딩 불가
int sum(int a) {...}
double sum(int a) {...} // ❌ 오버로딩 아님 → 컴파일 에러





정리

오버라이딩은 상속을 활용한 다형성 구현,
오버로딩은 편의성을 위한 다양한 메서드 제공이다.

항목오버라이딩 (Overriding)오버로딩 (Overloading)
의미부모 클래스의 메서드를 자식이 재정의하나의 클래스에 같은 이름의 메서드를 중복 정의
필요 조건상속 관계 필요상속 관계 없어도 됨
매개변수동일해야 함달라야 함 (타입/개수/순서 중 하나 이상)
반환형반드시 동일반환형만 다른 것은 오버로딩이 아님
실행 시점런타임(실행 시)컴파일 타임(컴파일 시)
대표 예시toString(), equals() 재정의System.out.println() 다양한 타입 출력 등

0개의 댓글