오버로딩이란
한 클래스 내에 매개변수의 개수나 타입이 다른 같은 이름의 메서드를 여러 개 정의하는 것.
오버로딩의 조건
1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
가변인자(varargs)와 오버로딩
기존에는 메서드의 매개변수 개수가 고정적이었으나 JDK1.5부터 동적으로 지정해 줄 수 있게 되었다.
이 기능을 '가변인자(variable arguments)'라고 한다.
가변인자는 '타입... 변수명'과 같은 형식으로 선언한다.
public printStream printf(String format, Object... args){...}
// 컴파일 에러 발생. 가변인자는 무조건 맨 마지막 선언해야함.
public printStream printf(Object... args, String format){...}
String concatenate(String s1, String s2){...}
String concatenate(String s1, String s2, String s3){...}
//가변인자 사용
String concatenate(String... str){...}
//호출
System.out.println(concatenate()); // 인자 없음
System.out.println(concatenate("a")); // 인자 1개
System.out.println(concatenate("a", "b")); // 인자 2개
System.out.println(concatenate(new String[] {"a", "b"})); // 배열도 가능
가변인자는 내부적으로 배열을 이용하는 것.
매개변수로 배열을 넣는 것과 차이는 위의 코드처럼 인자를 생략할 수가 없다.
가변인자 주의점
class VarArgsEx {
public static void main(String[] args) {
String[] strArr = { "100", "200", "300" };
System.out.println(concatenate("", "100", "200", "300"));
System.out.println(concatenate("-", strArr));
System.out.println(concatenate(",", new String[]{"1", "2", "3"}));
System.out.println("["+concatenate(",", new String[0])+"]");
System.out.println("["+concatenate(",")+"]");
}
static String concatenate(String delim, String... args) {
String result = "";
for(String str : args) {
result += str + delim;
}
return result;
}
/* 해당 주석부분은 에러 발생함.
static String concatenate(String... args) {
return concatenate("",args);
}
*/
} // class
해당 오버로딩된 주석부분에서 에러가 발생하는데, 이유는 메서드가 구분되지 않아서 발생한다.
가능하면 가변인자를 사용한 메서드는 오버로딩하지 않는게 좋다.
참조
'Java의 정석' 책
'Language > Java' 카테고리의 다른 글
변수의 초기화, 초기화 블럭 (0) | 2022.03.02 |
---|---|
[Java] 생성자(Constructor) (0) | 2022.03.02 |
[Java] 변수와 메서드 (0) | 2022.03.02 |
[Java] 객체지향언어특징과 클래스와 객체 (0) | 2022.03.01 |
[Java] 배열(Array) (0) | 2022.03.01 |
댓글