JDK5.1 부터 가변 인자 기능이 생겼다고 한다.
타입... 매개변수명
이런 식으로 사용할 수 있다.
대표적으로 printf가 가변 인자를 사용해서 구현되어 있다.
public PrintStream printf(String format, Object... args) { /* 생략 */ }
가변 인자는 매개변수 목록 중에서 가장 마지막에 와야 한다.
그렇지 않으면 다른 매개변수와 구분이 안 되기 때문이다.
//컴파일 에러
public PrintStream printf(Object... args, String format) { /* 생략 */ }
즉 위와 같은 가변 인자 사용은 안된다.
어디까지가 가변 인자이고(Object... args) 어디부터가 이후의 매개변수인지(String format) 구분할 수 없기 때문이다.
String varargsMethod(String... args) { /* */ }
varargsMethod();
varargsMethod("a");
varargsMethod("a", "b");
varargsMethod(new String[] {"a", "b", "c"});
가변 인자는 인자가 아예 없어도 되고, 배열을 인자로 받을 수 있다.
가변 인자는 내부적으로 배열을 이용하기 때문이다. 따라서 배열을 쓸 수 있는 경우에는 그냥 배열을 쓰는 게 더 효율적이라고 한다.
단 배열을 쓰는 경우에는 인자를 아예 넘겨주지 않으면 컴파일 에러가 나기 때문에, 길이가 0인 배열이나 null을 넘겨줘야 한다는 차이점이 있다.
'Java' 카테고리의 다른 글
[Java] 람다식(Lambda Expression) (0) | 2022.10.12 |
---|---|
Exception 관련 클래스의 계층 구조 (Unchecked Exception/Checked Exception) (0) | 2022.03.31 |
변수의 초기화 (0) | 2022.01.20 |
[소소한 정보] this와 this() (0) | 2022.01.20 |
[소소한 정보] 컴파일러의 리터럴 연산, 길이가 0인 배열 (0) | 2022.01.18 |
댓글