18. 오버로딩(Over loading)
Overview
동일한 이름의 메소드를 여러 개 정의하는 것을 메소드 오버로딩(method overloading)이라고 한다.
자바에서는 한 클래스내에 이름이 같지만 인자의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성할 수 있다.
메소드 오버로딩은 객체지향적 특징 중 다형성의 한 종류이다.
여러 개의 메소드가 메소드 오버로딩으로 성립되려면 다음 세 조건을 모두 만족해야 한다.
메소드 이름이 동일해야 한다.
메소드 인자의 개수가 서로 다르거나, 메소드 인자의 타입이 서로 달라야 한다.
메소드의 이름이 같고 인자의 개수나 타입이 모두 같은데 메소드의 리턴 타입이 다르면 메소드 오버로딩이 성립되지 않으며 컴파일 오류가 발생한다.
이름이 동일하고 인자의 타입이나 개수가 모두 동일하지만 접근 지정자가 서로 다른 두 메소드가 작성되면 컴파일 오류가 발생하며 메소드 오버로딩이 성립되지 않는다.
접근 지정자는 메소드 오버로딩과 전혀 관계 없다.
메소드 오버로딩 사례
아래는 2개의 getSum()
메소드가 성공적으로 오버로딩된 예로서, 앞의 세 조건을 모두 만족한다.
메소드 이름이 동일하며 인자의 개수나 타입이 서로 다르기 때문에, 이 두 메소드를 서로 다른 것으로 다룬다.
/**
* code_05
*/
public class MethodSample {
public int getSum(int i, int j) {
return i + j;
}
public int getSum(int j, int j, int k) {
return i + j + k;
}
}
오버로딩된 메소드 호출
위 code_05
코드에서 MethodSample
클래스에는 2개의 getSum()
메소드가 정의되어 있다.
main()
메소드는 MethodSample
클래스의 오버로딩된 메소드 getSum()
을 호출하는 여러 문장을 가지고 있다.
컴파일러는 main()
내의 각 호출문에 대해 적절한 인자의 타입과 인자의 개수를 고려하여 MethodSample
클래스의 getSum()
메소드를 찾아낸다.
/**
* code_06
*/
public static void main(String[] args) {
MethodSample a = new MethodSample();
int i = a.getSum(1, 2);
int j = a.getSum(3, 4, 5);
}