본문 바로가기
Web Programming

오버로딩(Overloading)과 오버라이딩(Overriding) 쉽게 이해하

by hyeon'H 2023. 12. 11.
반응형

메서드 시그니처(method signature)

메서드 오버로딩의 핵심은 바로 메서드 시그니처(method siganture)에 있습니다.
메서드 시그니처랑 메서드의 선언부에 명시되는 매개변수의 리스트를 가리킵니다.
만약에 두 메서드가 매개변수의 개수와 타입, 그 순서까지 모두 같다면, 이 두 메서드의 시그니처는 같다고 할 수 있습니다.


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

오버라이딩(Overriding)과 오버로딩(Overloading)은 객체 지향 프로그래밍에서 다형성을 구현하는 방법이다.
그러나 둘은 서로 다른 개념이다.


오버라이딩(Overriding)

오버라이딩이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 시그니쳐를 갖는 메서드로 다시 정의하는 것이라고 할 수 있습니다.
자바에서는 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메서드를 상속받습니다.
이렇게 상속받은 메서드는 그대로 사용해되 되고, 필요한 동작을 위해서 재정의 하여 사용할 수도 있습니다.
즉, 메서드 오버라이딩이란 상속받은 부모 클래스의 메서드를 재정의하여 사용하는 것을 의미합니다.

오버라이딩하기 위한 조건

1. 오버라이딩이란 메서드의 동작만 정의하는 것이므로, 메서드의 선언부는 기존 메서드와 완전히 같아야 합니다.
2. 부모 클래스의 메서드보다 접근 제어자를 더 좁은 범위로 변경할 수 없습니다.
3. 부모 클래스의 메서드보다 더 큰 범위의 예외를 선언할 수 없습니다.


오버로딩(Overloading)

메서드 오버로딩이란 같은 이름의 메서드를 중복하여 정의하는 것을 의미한다.
자바에서는 원래 한 클래스 내에 같은 이름의 메서드를 둘 이상 가질 수 없습니다.
하지만 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메서드를 작성할 수 있습니다.
즉, 메서드 오버로딩은 서로 다른 시그니처를 갖는 여러 메서드를 같은 이름으로 정의하는 것이라고 할 수 있습니다.

오버로딩하기 위한 조건

1. 메서드의 이름이 같아야 합니다.
2. 메서드의 시그니처, 즉 매개변수의 개수 또는 타입이 달라야 합니다.


오버로딩의 예제


오버라이딩 예제

public class Animal {
    public void makeSound() {
        System.out.println("동물이 소리를 낸다.");
    }
}
public class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("멍멍!");
    }
}

반응형