포스트

가변 인수 (varvargs: Variable Arguments)

가변 인수(varargs : Variable Arguments)

가변 인수는 자바 5(jdk 1.5)에서 추가된 기능 입니다.
가변 인수는 메서드의 인수의 길이가 가변적일 수 있도록 하는 기능합니다.
메서드의 매개 변수를 선언할 때 사용하며 사용 방식은 아래의 형식을 가집니다.

1
2
3
4
5
//생략
public void methodName(Object... obj){
	// 로직 
} 
//생략

매개 변수에서 Object... obj 부분이 가변 인수가 사용된 부분이며 이는 배열로써 사용할 수 있습니다.

이해를 위한 간단한 예시입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class VarargsExam {

	@Test
	public void main() {
		varargsPrint("The", "World!!!!"); // 2개
		varargsPrint("ORA", "ORA", "ORA", "ORA", "ORA", "ORA"); // 여러개
		varargsPrint(); // 0개
	}
	
	public static void varargsPrint(String...str) {
		for(String s : str) {
			System.out.println(s);
		}
	}
}

위의 예제에서 varargsPrint() 메서드의 인자를 보면 String... str 을 사용하고 있으며 이 부분이 가변 인수가 사용된 부분입니다.
그리고 가변 인수로 받은 str은 배열로써 사용되기 때문에 for문을 통해 사용하고 있음을 확인할 수 있습니다.

장점

위에서 예시로 들었던 메서드를 가변 인수를 사용하지 않고 구현하려면 개발자는 오버로딩으로 이를 처리해야합니다.
하지만 위의 예시에서 매개 변수의 길이는 얼마나될지 알 수 없습니다. 이런 상황에서 오버로딩으로 처리하려면 같은 이름의 인자 수가 다른 무수히 많은 메서드를 구현해야합니다.
이런 부분을 가변 인수를 사용하여 손쉽게 해결할 수 있습니다.

주의점

  • 가변 인수는 반드시 변수들 중 뒤에 위치해야 합니다.
    method(Object arg1, Object... args, Object arg3) 의 형태로는 사용할 수 없다는 말입니다.
    이는 컴파일러가 가변 인수의 시작과 끝을 알 수 없기 때문이며 컴파일러 단계에서 부터 에러를 반환합니다.
  • 기본자료형은 사용할 수 없습니다. 기본자료형 ( int, boolean, double 등)은 가변 인수로 사용할 수 없습니다.
    이 자료형을 가변 인수로 사용하려면 래퍼 클래스를 사용해야 합니다.(Integer, Boolean, Double 등)
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.