오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점은 무엇인가요?

김상욱·2024년 11월 19일

오버로딩(Overloading)과 오버라이딩(Overriding)의 차이점은 무엇인가요?

오버로딩(Overloading) : 동일한 이름의 메서드를 매개변수의 타입, 개수, 순서가 다르게 정의하여 여러 개의 메서드를 구현하는 기법
-> 컴파일 타임(Compile Time)에 결정 : 컴파일러가 메서드 호출시 적합한 메서드를 결정
-> 반환 타입은 오버로딩과 관련x
: 동일한 기능을 수행하지만 입력값이 다를 경우 메서드 이름을 통일하여 코드의 가독성을 높입니다.

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;
    }
}

오버라이딩(Overriding) : 부모 클래스의 메서드를 자식 클래스에서 재정의(override)하여 사용자가 원하는 방식으로 구현을 변경하는 기법.
-> 런타임(Runtime)에 결정 : 실행 중 동적 바인딩(Dynamic Binding)을 통해 호출될 메서드가 결정
-> 상속 관계에서 사용 (부모 클래스와 자식 클래스 간)
-> 메서드 이름, 매개변수, 반환 타입이 동일해야 한다.
-> 접근 제어자는 부모 메서드보다 더 좁게 설정할 수 없다.
-> 부모 메서드가 final 또는 static으로 선언된 경우 오버라이딩이 불가능
: 상속받은 메서드의 동작을 자식 클래스의 요구사항에 맞게 수정합니다.

class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

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

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

0개의 댓글