[Java] 오버로딩과 오버라이딩

kuku·2023년 1월 15일
0

Java

목록 보기
6/7

📖오버로딩이란?

오버로딩(overloading)이란 한 클래스 내에 같은 이름을 가진 메소드를 여러 개 정의하는 것이다. 한 클래스 내에 같은 이름을 가진 메소드가 이미 존재하더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해 메소드를 정의할 수 있다. 따라서 보통 같은 기능을 하지만 매개변수를 달리해야하는 경우 오버로딩을 사용한다.

📁오버로딩의 조건

앞서 언급한 바와 같이 오버로딩이 성립하기 위해서는 메소드의 이름이 동일하되 매개변수의 개수 또는 타입이 달라야 한다. 이외에는 오버로딩이 성립하는 데에 아무런 영향을 주지 않는다. 다음은 오버로딩 성립에 대한 몇 가지 예시이다.

int add(int a, int b) { return a + b; }
int add(int x, int y) { return x + y; }

위의 두 메소드는 매개변수의 이름만 다를 뿐 매개변수의 개수와 타입은 동일하다. 따라서 오버로딩이 성립하지 않는다.

int add(int a, int b) { return a + b; }
long add(int a, int b) { return (long)(a + b); }

위의 두 메소드는 반환형만 다른 경우이다. 이런 경우에도 오버로딩은 성립되지 않는다.

long add(int a, long b) { return a + b; }
long add(long a, int b) { return a + b; }

위의 두 메소드는 매개변수의 개수와 타입이 동일하지만, 서로 순서가 다르다. 이런 경우에는 호출 시 매개변수의 값에 의해 호출할 메소드를 구별할 수 있으므로 오버로딩이 성립하는 것으로 본다.


📖오버라이딩이란?

오버라이딩(overriding)이란 조상 클래스로부터 상속받은 메소드의 내용을 변경하는 것이다. 즉, 메소드를 재정의한다.

📁오버라이딩의 조건

오버라이딩이 성립하기 위해서는 자손 클래스에서 오버라이딩하는 메소드의 선언부가 조상 클래스의 메소드와 동일해야 한다. 자세히 설명하면 다음과 같다.

  1. 메소드의 이름이 같아야 한다.
  2. 매개변수가 같아야 한다.
  3. 반환타입이 같아야 한다.

다만 조건 3의 경우 JDK 1.5부터는 반환타입은 변경 가능하게 되었다고 한다.

참고 : 자바의 정석 3판

0개의 댓글