프로그래밍/자바(Java)

[ 자바 / JAVA ] 오버라이딩 vs 오버로딩

후르트링 2021. 7. 22. 14:30
728x90

Overriding과 Overloading은 객체 지향언어에서 다형성을 높여주는 개념입니다.

이름이 비슷해서 비슷하게 생각할 수 있지만 전혀 다른 개념입니다.

 

[오버로딩(Overloading)]

오버로딩은 동일한 이름의 메소드를 여러개 정의하는 것입니다.

메소드의 이름과 return 타입은 동일하지만, 매개변수의 형(type)이나 개수가 다른 상황입니다.

이렇게 함으로써 다양한 상황에서 메소드가 호출 될 수 있도록합니다.

  • 아래와 같이 함수의 이름과 리턴타입은 같지만 매개변수의 개수가 다르므로 오버로딩이 가능합니다.
int sum(int n1, int n2){ 
    int ans = n1+n2; 
    return ans; 
} 

int sum(int n1){ 
    int ans = n1+1 
    return ans; 
}
  • 다음과 같은 경우는 반환형이 다르기 때문에 오버로딩이 불가능합니다.
int sum(int n1, int n2){ ... } 
double sum(int n1, int n2){ ... }

 

[오버라이딩(Overriding)]

  • 상위 클래스 혹은 인터페이스에 존재하는 메소드를 하위 클래스에서 필요에 맞게 동일한 이름의 메서드를 재정의 하는 것입니다.
  • 자바에서는 항상 인스턴스의 메서드가 호출됩니다. (가상메서드의 원리)
  • 아래와 같은 경우, SuperClass의 func이라는 인터페이스를 통해 SubClass의 func이 실행됩니다.
SuperClass object = new SubClass(); 
object.func();