자바

메소드 오버로딩

growdeveloper 2021. 3. 13. 15:08

메소드 오버로딩

자바에서는 한 클래스내에, 이름이 같지만, 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성할 수 있다. 이것을 메소드 오버로딩(method overloading) 혹은 메소드 중복이라고 부른다. 메소드 오버로딩은 자바 다향성의 한 경우이다. 여러 개의 메소드가 오버로딩되려면 다음 두 조건을 모두 만족하여야 한다.

1. 메소드 이름이 동일 하여야 한다.

2. 매개변수의 개수나 타입이 서로 달라야 한다.

  • 메소드 오버로딩 성공사례
    다음은 2개의 getSum() 메소드가 정상적으로 오버로딩된 사례이다. 메소드 이름은 동일하고 매개변수의 개수가 서로 다르기 때문에, 두 메소드는 한 클래스 내에 공존하는데 아무 문제가없다.
class MethodOverloadingFail {
	public int getSum(int i, int j) {
    	return i+j;
    }
    
    public int getSum(int i, int j, int k) {
    	return i+j+k;
    }
}
  • 메소드 오버로딩 실패사례
    메소드 오버로딩은 자바 컴파일러에 의해 판단되며, 컴파일러가 이름이 같은 메소드들을 구분할 수 있으면 메소드 오버로딩이 성공한다. 다음 코드는 오버로딩이 실패한 경우이다. 2개의 getSum() 메소드의 매개변수 개수와 타입이 모두 간다. 이 두 메소드는 호출자의 입장에서 구분할 수 없으며, 자바 컴파일러는 컴파일 오류를 발생시킨다. 메소드의 리턴 타입이 서로 다르니 두 메소드가 서로 다른 것 이라고 생각할 수 있겠지만, 리턴 타입은 메소드를 구분하는 기준으로 사용하지 않는다.
class MethodOverloadingFail {
	public int getSum(int i, int j) {
    	return i+jl
    }
    
    public doble getSum(int i, int j) {
    	return (double)(i+j);
    }
}
  • 오버로딩된 메소드 호출
    이제 오버로딩된 메소드를 호출하느 경우. MethodSample 클래스에는 3개의 getSum() 메소드가 작성되어 있고 main() 메소드는 getSum()을 호출하는 여러 문장이 있다. 자바 컴파일러는 각 호출문에 대해, 매개변수의 타입과 개수에 일치하는 getSum() 메소드를 찾아낸다.
public static void main(String args[]) {
	MethodSample a = new MethodSample();
    
    int i = a.getSum(1,2);
    
    int j = a.getSum(1, 2, 3);
    
    double k = a.getSum(1.1, 2.2);
}

public class MethodSample {
	public int getSum(int i, int j) {
    	return i + j;
    }
    
    public int getSum(int i, int j, int k) {
    	return i + j + k;
    }
    
    public int getSum(double i, double j) {
    	return i + j;
    }
}