[지식창고]/정보처리기사

[정처기] 오버로딩(overloading) vs 오버라이딩(overrideing)

개발새발주발 2025. 2. 3. 16:53
728x90

오버로딩과 오버라이딩 모두 다형성과 관련 있지만 다른 개념이다. 

정리

  • 오버로딩(Overloading) → 같은 클래스에서 같은 이름의 메서드를 여러 개 정의 (매개변수 다르게)
  • 오버라이딩(Overriding)상속받은 부모 클래스의 메서드를 자식 클래스에서 재정의 (메서드 이름, 매개변수, 반환 타입 동일)

    즉, 오버로딩은 같은 이름의 메서드 여러 개, 오버라이딩은 상속받은 메서드를 새롭게 정의하는 것 

출처 : 시나공 2025 정보처리기사 필기 요약본 pdf

1. 오버로딩(Overloading)

👉 같은 클래스 내에서 같은 이름의 메서드를 매개변수의 개수나 타입을 다르게 해서 여러 개 정의하는 것

특징

  • 같은 클래스 안에서 이루어짐
  • 메서드 이름은 동일하지만 매개변수의 개수, 타입, 순서가 달라야 함
  • 반환 타입(return type)은 오버로딩에 영향을 주지 않음
  • 컴파일러가 매개변수를 보고 호출할 메서드를 결정(컴파일 타임 결정 → 정적 바인딩)
  • 메서드의 기능을 유사하게 유지하면서 다양한 입력을 받을 수 있도록 함

예제 (Java)

class MathUtil {
    // 오버로딩: 메서드 이름은 동일하지만 매개변수의 타입이 다름
    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;
    }
}

public class Main {
    public static void main(String[] args) {
        MathUtil mu = new MathUtil();
        System.out.println(mu.add(2, 3));       // int 버전 호출
        System.out.println(mu.add(2.5, 3.5));   // double 버전 호출
        System.out.println(mu.add(1, 2, 3));    // 3개 인자 버전 호출
    }
}
 
 

📌 정리: 같은 이름의 메서드를 다양한 매개변수 형태로 정의하여 코드의 가독성을 높이고 편리하게 사용할 수 있음.


2. 오버라이딩(Overriding)

👉 부모 클래스에서 상속받은 메서드를 자식 클래스에서 재정의하는 것

특징

  • 상속 관계에서 부모 클래스의 메서드를 자식 클래스가 재정의하는 것
  • 메서드 이름, 매개변수, 반환 타입이 동일해야 함
  • 접근 제한자는 부모 메서드보다 더 강한 수준으로 설정할 수 없음 (예: 부모가 public이면 자식도 public이어야 함)
  • 동적 바인딩(dynamic binding) → 런타임 시 실제 객체의 타입에 따라 메서드가 결정됨

예제 (Java)

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

class Dog extends Animal {
    @Override  // 오버라이딩: 부모의 메서드를 재정의
    void makeSound() {
        System.out.println("멍멍!");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound(); // "멍멍!" 출력 (자식 클래스의 메서드가 실행됨)
    }
}

 

📌 정리: 부모 클래스로부터 상속받은 메서드를 자식 클래스가 필요에 맞게 재정의하여 다형성을 구현할 수 있음.


3. 오버로딩 vs 오버라이딩 비교 정리

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

적용 대상 같은 클래스 내 상속 관계 (부모-자식 클래스)
메서드 이름 동일 동일
매개변수 다르게 정의해야 함 완전히 동일해야 함
반환 타입 상관없음 부모와 동일해야 함 (일부 경우 covariant return 가능)
접근 제한자 영향 없음 부모보다 좁아질 수 없음
실행 시점 컴파일 타임(정적 바인딩) 런타임(동적 바인딩)

4. 언제 사용하면 좋을까?

  • 오버로딩: 같은 기능을 하되, 다양한 입력을 받을 수 있도록 유연하게 메서드를 설계할 때
  • 오버라이딩: 부모 클래스로부터 상속받은 기능을 자식 클래스에 맞게 수정하여 다형성을 구현할 때

🔥 결론

  • 오버로딩"같은 클래스 내에서" 같은 이름의 메서드를 여러 개 정의하는 것.
  • 오버라이딩은 **"부모 클래스의 메서드를 자식 클래스에서 재정의"**하는 것.
  • 오버로딩은 컴파일 타임에 결정, 오버라이딩은 런타임에 결정.