본문 바로가기
카테고리 없음

자바 오버로딩 vs 오버라이딩 차이 완벽 정리

by 기록하는 거부기 2025. 11. 2.

자바(Java)에서 객체지향 프로그래밍을 다루다 보면 오버로딩(Overloading)오버라이딩(Overriding) 개념을 자주 접하게 됩니다.
두 용어는 비슷해 보이지만 목적과 동작 시점이 완전히 다릅니다.
이번 글에서는 오버로딩과 오버라이딩의 차이와 사용법을 명확히 정리해보겠습니다.


1. 오버로딩(Overloading)과 오버라이딩(Overriding) 개념

구분 오버로딩 (Overloading) 오버라이딩 (Overriding)
의미 같은 이름의 메서드를 여러 개 정의 상속받은 메서드를 재정의
위치 같은 클래스 내 부모 클래스 - 자식 클래스 간
호출 시점 컴파일 시 결정 실행 시(Runtime) 결정

즉, 오버로딩은 메서드 이름은 같지만 매개변수가 다를 때 사용되고,
오버라이딩은 상속받은 메서드의 동작을 바꿀 때 사용됩니다.


2. 자바 오버로딩(Overloading) 특징과 예제

오버로딩(Overloading) 은 동일한 메서드 이름으로 여러 기능을 제공하고 싶을 때 사용합니다.
컴파일 시점에 어떤 메서드가 호출될지 결정됩니다.

 

📘 예제 코드

public class Calculator {
    // 정수 덧셈
    int add(int a, int b) {
        return a + b;
    }

    // 실수 덧셈
    double add(double a, double b) {
        return a + b;
    }
}

 

📘 호출 예시

Calculator calc = new Calculator();
System.out.println(calc.add(5, 3));     // int 버전 호출
System.out.println(calc.add(2.5, 3.2)); // double 버전 호출

💡 매개변수의 타입, 개수, 순서가 다르면 오버로딩이 가능합니다.
단, 반환형만 다르고 매개변수가 동일하면 오버로딩 불가능합니다.


3. 자바 오버라이딩(Overriding) 특징과 예제

오버라이딩(Overriding) 은 상속 관계에서 부모 클래스의 메서드를 재정의하는 것입니다.
자식 클래스가 부모의 메서드를 그대로 사용하지 않고,
상황에 맞게 기능을 변경할 수 있습니다.

 

📘 예제 코드

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

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

 

📘 호출 예시

Animal animal = new Dog();
animal.sound();  // 출력: 멍멍!

💡 @Override 어노테이션을 붙이면 컴파일러가 올바르게 재정의되었는지 확인합니다.
오버라이딩은 런타임에 동적으로 결정되는 다형성(Polymorphism) 의 핵심입니다.


4. 오버로딩 vs 오버라이딩 비교 표

항목 오버로딩 (Overloading) 오버라이딩 (Overriding)
적용 위치 같은 클래스 내 상속 관계 (부모–자식)
목적 같은 기능의 다양한 형태 제공 상속된 기능의 재정의
결정 시점 컴파일 시 실행 시(Runtime)
매개변수 반드시 다름 동일해야 함
어노테이션 사용하지 않음 @Override 필수 권장
다형성 지원하지 않음 다형성 구현의 핵심

5. 실무에서의 활용 포인트

  1. 오버로딩
    • 유틸성 클래스나 계산기, 로깅(log) 메서드처럼
      동일 기능을 다양한 입력 형태로 처리할 때 유용합니다.
  2. 오버라이딩
    • 상속받은 클래스를 커스터마이징하거나
      스프링(Spring) 같은 프레임워크에서 추상 메서드 구현, Bean 재정의 등에 자주 활용됩니다.
  3. 정리하면
    • 오버로딩 → 컴파일러가 메서드를 구분
    • 오버라이딩 → JVM이 실행 시점에 메서드를 결정

✅ 마무리

자바의 오버로딩과 오버라이딩은 이름은 비슷하지만 의미, 사용 위치, 동작 시점이 모두 다릅니다.

  • 오버로딩: 같은 클래스에서 같은 이름의 메서드 여러 개 정의
  • 오버라이딩: 상속받은 메서드의 기능 재정의

이 두 개념을 명확히 구분하면 코드의 확장성과 유지보수성을 크게 높일 수 있습니다.