본문 바로가기
Java

[소소한 정보] 가변 인자 (Variable arguments)

by Kloong 2022. 1. 20.

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을 넘겨줘야 한다는 차이점이 있다.

댓글