본문 바로가기
Develop/Java

오버로딩(Overloading) vs 오버라이딩(Overriding)

by jaeyoungb 2022. 9. 2.

오버로딩과 오버라이딩은 둘 다 하나의 메소드를 가공해서 사용한다라는 공통점이 있다.

 

 

오버로딩은 한 클래스 내에서 이미 같은 이름을 가진 메소드를 가공하는 것이다.

 

조건은 이름은 같게 하고,

접근 제어자 or 반환 타입 or 매개 변수의 개수나 타입을 다르게 해야 한다.

접근제어자만 다르게 하는 것으로 오버로딩 할 수는 없다.
리턴값만 다른 것으로 오버로딩 할 수는 없다.

 

오버로딩의 장점은 다음과 같다.

  1.  메소드의 이름을 절약할 수 있다. (오버로딩한 메소드들의 이름은 같아야 하기 때문에)
  2. 하나의 메소드로 여러 상황에서 같은 기능을 하게끔 만들 수 있다. (같은 기능을 하되, 상황에 따라 결과는 다름)

 

 

오버라이딩은 부모 클래스로부터 상속받은 자식 클래스에서 메소드를 가공(재정의)하는 것이다.

 

조건은 이름, 매개 변수, 리턴 값이 모두 같게 하고,

접근 제어자나 메소드 바디의 내용만을 다르게 해야 한다.

접근 제어자를 다르게할 설정할 때, 규칙이 존재한다.
1. 오버라이딩하는 메소드의 접근 제어자는 부모 클래스보다 더 좁게 설정할 수 없다.
2. 예외(Exception)는 부모 클래스의 메소드보다 더 많이 선언할 수 없다.
3. static 메소드를 인스턴스의 메소드로 또는 그 반대로 바꿀 수 없다.

 

한 줄로 요약해보면,

 

오버로딩 : 기존에 없는 새로운 메소드를 추가하는 것

오버라이딩 : 상속받은 메소드를 재정의하는 것

 

 

(참고 : Java의 정석 - 남궁성 https://jdm.kr/blog/216)