Java
[소소한 정보] 가변 인자 (Variable arguments)
Kloong
2022. 1. 20. 02:36
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을 넘겨줘야 한다는 차이점이 있다.