Varargs

자바 5.0에서 소개되는 기법중에서 가변인수(Varargs)라는 것이 있다. 가변인수라는 것은 필요에 따라 매개변수(인수)를 가변적으로 조정할 수 있는 기술이다. 가변인수가 없던 시절에는 가변인수 대신 컬렉션이나 배열을 이용해서 가변인수를 대체했었다.

가변인수(Varargs java 5.0)

필요에 따라 매개변수를 가변적으로 조정할 수 있는 기술.

컬렉션을 이용한 가변인수(method)

public class VarArgsMain{
  public static void display(Vector v){
    for(Object s : v){
      System.out.println("컬렉션형태 : "+ s );
    }
  }
}

컬렉션을 이용한 가변인수(caller)

Vector vec = new Vector();
vec.add("hello");
vec.add("world");
vec.add("korea");
VarArgsMain.display(vec);

위의 예에서 Vector 에 데이터를 원하는 만큼 넣어서 메서드 내부로 전달 할 수 있다. 하지만 자바 5.0에서는 가변인수 기법을 이용하면 보다 쉽게 가변인수를 적용할 수 있다.

가변인수를 이용한 메서드

public class VarArgsMain{
  public static void display(String... strs){
    for(String s : strs){
      System.out.println("가변인수형태 : "+ s);
    }
  }
}

가변인수를 이용한 메서드 호출

VarArgsMain.display("hello", "world", "korea");

TEST CODE

import java.util.ArrayList;
import java.util.List;

public class VarArgsTest {

	public static void main(String[] args) {

		List<String> argsArr = new ArrayList<String>();
		argsArr.add("a");
		argsArr.add("b");
		argsArr.add("c");

		//call list args
		VarArgsTest.argsPrint(argsArr );

		//call Varargs
		VarArgsTest.argsPrint("a","b","c" );

	}

	static <T> void argsPrint(List<T> argsArr){
		for(T t :  argsArr){
			System.out.println("List args : " + t.toString());
		}
	}

	static void argsPrint(String... strs){
		for(String s : strs){
			System.out.println("Varargs : "+ s);
		}
	}
}

가변인수에서 컴파일러가 하는 일

매개변수를 배열로 변환한다

  • 원본 : public static void display(String… strs)
  • 변환 : public static void display(String strs[])

메서드 호출시 인자들을 이용해 배열로 만든다

  • 원본 : VarArgsMain.display(“hello”, “world”, “korea”)
  • 변환 : VarArgsMain.display(new String[]{“hello”, “world”, “korea”})



출처 : Minsub’s Blog