JAVA - 메서드 오버로딩

메서드 오버로딩이란?

한 클래스 내에 이미 정의되어 있는 메서드와 동일한 이름을 가진 메서드를 (재)정의 하는것. 하나의 메서드 이름으로 여러 기능을 구현하기 위해 사용.

오버로딩이 성립하기 위해선 다음과 같은 조건이 붙는다.
  1. 메서드의 이름이 같아야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.
  3. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다.


예를들어 다음과 같이 sum()이라는 메서드를 만들었다고 했을때...
public static int sum(int a, int b) {
    return a + b;
}


오버로딩을 사용하지 않을경우, 이 메서드와 비슷한 기능의 한번에 3개 이상의 수를 더해주는 메서드를 만들고자 한다면 같은 기능에 다른이름을 가진 메서드를 생성해야 할것이다.
public static int sum(int a, int b) {
    return a + b;
}
    
public static int sumThree(int a, int b, int c) {
    return a + b + c;
}
    
public static int sumFour(int a, int b, int c, int d) {
    return a + b + c + d;
}


이처럼 메서드도 변수처럼 단지 이름만으로 구별된다면, 한 클래스내의 모든 메서드들의 이름을 달리해야하고, 그렇게되면 근본적으로 같은 기능을 하는 메서드라고 하더라도 이름을 다르게 지어줘야해서 메서드를 작성하는 쪽에서는 이름을 짓기 어렵고, 메서드를 사용하는 쪽에서는 이름을 일일이 구분해서 기억해야 하기 때문에 서로 부담이 된다.


그래서 자바에서는 오버로딩을 이용하여 다음과 같이 메서드를 작성 가능하다.



위의 매개변수의 개수를 달리한 경우 외에 매개변수의 타입을 가지고도 오버로딩이 가능하다.



단, 한가지 주의할점은 매개변수의 개수나 타입은 건드리지 않고 단순히 리턴타입만 변경한다면 오버로딩이 성립되지 않는다는 것이다.


위와같이 에러가 발생하는 이유는, 리턴타입만을 달리한경우 sum()메서드를 불러올때 불러와야 할 메서드가 3개중 어떤것인지 컴퓨터로선 구별할 방법이 없기 때문이다.

댓글