Light Blue Pointer
본문 바로가기
Developing/TIL(Develop)

오버라이딩과 오버로딩 차이

by Greedy 2024. 5. 23.

오버로딩(Overloading)

메서드의 이름은 같고 매개변수의 유형과 개수가 다르도록 하는 것

리턴값만을 다르게 갖는 오버로딩은 작성할 수 없다

오버로딩은 같은 이름의 메서드를 여러 개 정의하되, 매개변수의 개수나 타입을 다르게 하여 구분하는 것이다

오버로딩은 주로 메서드의 사용 편의성을 높이기 위해 사용된다

특징

메서드 이름이 같아야 한다

매개변수의 개수나 타입이 달라야 한다

반환 타입은 같아도 되고 달라도 된다

같은 클래스 내에서 정의된다

public class OverloadingExample {
    // 두 개의 정수를 더하는 메서드
    public int add(int a, int b) {
        return a + b;
    }

    // 세 개의 정수를 더하는 메서드
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 두 개의 실수를 더하는 메서드
    public double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        OverloadingExample example = new OverloadingExample();
        System.out.println(example.add(1, 2));        // 출력: 3
        System.out.println(example.add(1, 2, 3));     // 출력: 6
        System.out.println(example.add(1.0, 2.0));    // 출력: 3.0
    }
}

오버라이딩 (Overriding)

상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용하는 것

메서드의 이름은 물론 파라미터의 개수나 타입도 동일해야 하며, 주로 상위 클래스의 동작을 상속받는 하위 클래스에서 변경하기 위해 사용된다

오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 재정의하는 것이다

이는 객체 지향 프로그래밍에서 다형성을 구현하는 중요한 방법이다

특징

메서드 이름이 같아야 합니다

매개변수의 개수와 타입이 같아야 합니다

반환 타입도 동일해야 합니다

접근 제어자는 동일하거나 더 넓은 범위여야 합니다

예외는 부모 클래스 메서드에서 던진 예외와 같거나 그 하위 타입만 던질 수 있습니다

class Animal {
    // 부모 클래스의 메서드
    public void makeSound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    // 자식 클래스에서 부모 클래스의 메서드를 오버라이딩
    @Override
    public void makeSound() {
        System.out.println("Dog barks");
    }
}

public class OverridingExample {
    public static void main(String[] args) {
        Animal myDog = new Dog();
        myDog.makeSound();  // 출력: Dog barks
    }
}

비교

오버로딩 (Overloading)

같은 클래스 내에서 메서드 이름을 재사용

매개변수 목록이 달라야 함

정적 바인딩(컴파일 타임에 결정)

 

오버라이딩 (Overriding)

상속 관계에서 메서드를 재정의

매개변수 목록과 반환 타입이 같아야 함

동적 바인딩(런타임에 결정)