오버로딩이란
오버로딩의 사전적 의미는 과적하다, 많이 싣는다는 뜻 입니다.
자바에서는 하나의 메서드 이름으로 여러 기능을 담는다 또는 구현한다.
반환 타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다.
오버로딩 예시 1)
int plus(int x, int y){
int result = x + y;
return result;
}
double plus(double x, double y){
double result = x + y;
return result;
}
plus(10, 20); -- int plus 메서드 호출
plus(10.5, 20.3); -- double plus 메서드 호출
plus() 메서드를 호출하기 위해서는 int형 매개 값이 필요하지만 int 타입이 아닌 double형 인 경우에는 double plus(double x, double y)가 실행이 된다.
이렇게 구분할 수 있는 것은 JVM이 타입을 보고 타입에 맞는 메서드를 선택 한다.
오버로딩 예시 2)
해당 코드일 경우에는 타입 변환을 하여 메서드를 호출한다.
int x = 10;
double y = 20.3;
plus(x, y);
첫 번째 매개 변수는 int, 두 번재 매개 변수는 double일 경우 해당 매개 변수 타입과 순서에 맞는 메서드를 찾지 못하여 컴파일 오류가 날 것 같지만 JVM이 일차적으로 매개 변수 타입을 보지만 매개 변수 타입이 일치하지 않을 경우 자동 타입 변환이 가능한지 확인을 한다. 해당 코드의 경우는 타입 변환이 가능하여 plus(double x, double y) 메서드를 선택하여 호출한다.
오버로딩 예시
오버로딩의 예시로는 println이 있다. println의 경우 지정해주는 매개변수 타입에 따라 pritnln의 결과가 나온다.
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(Object x)
void println(String x)
오버로딩의 장점
만약 위의 예시처럼 메소드 이름이 같지 않고 아래와 같이 다를 경우
void println()
void printlnBoolean(boolean x)
void printlnChar(char x)
void printlnDouble(double x)
void printlnString(String x)
메서드를 작성하는 쪽에서는 이름을 짓기도 어렵고 메서드를 사용하는 쪽에서도 이름을 일일이 구분해서 기역해야하기 때문에 서로 부담이 된다. 하지만 오버로딩을 통해 여러 메서드들이 하나의 이름으로 정의되어 쉽고 이름도 짧게 할 수 있어서 오류의 가능성을 많이 줄일 수 있다.
※ 참고 문헌
남궁성, 『Java의 정석 3nd Edition』, 도우출판(2016) 책으로 공부하고 정리한 내용 입니다.