Java varargs 메소드에 대해서


Java에서 다음과 같은 형태의 메소드를 보게 될것이다.


private void makeDir(String... args) {

   ...

}


위의 메소드에서 매개인자(argument)의 형태가 특이하다. String... args

String 타입인건 알겠는데 3개의 ...(three dots)로 표현된 부분이 의미하는 것이 무엇인가하는 것이다.


이러한 메소드를 이름하여 Java varargs라고 한다.  varargs란 또 뭔가? 사전에 찾아도 나오지 않는단어이다. 이건 variable arguments의 줄임 표현같다. 그래서 '가변 인자'라고 표현하면 되겠다.


이러한 형태의 메소드는 Java version 5부터 소개된 파라미터 타입니다.

아마도 Android를 해본 사람은 AsyncTask 클래스에서 이런 모양의 메소드 파라미터를 보았을 것이다.


varargs 파라미터는 해당 데이터 타입의 argument를 0개 이상의 임의의 갯수의 argument를 받을수 있다는 뜻이다.

위의 경우 String... args에는 makeDir() 메소드를 호출하는 곳에서 아래의 경우가 모두 가능하다.


makeDir("aaa", "bbb", "ccc", "ddd", "eee");

makeDir("ddd", "eee");

makeDir("ccc");

makeDir("aaa", "bbb", "eee");

makeDir();

makeDir("aaa", "bbb", "ccc", "ddd", "eee", "fff");


이와같이 임의의 갯수의 argument를 전달할수 있다.

다음과 같이 int형 varargs도 당연히 가능하다.


public String myAddr(int... number) {

  ...

}


varargs 메소드 내부에서 사용법은 다음과 같다.


public int sum(String name, int... args) {

int sum = 0;

for(int i=0; i<args.length; i++){

sum += args[i];

}


return sum;

}


varargs 파라미터 사용시 주의 사항은 varargs 파라미터는 파라미터들의 순서상 맨 마지막에 위치해야된다는 점이다.


다음의 경우는 올바른 사용법이다.


public int sum(String a, int b, int... args) { ... }


그러나 다음의 두 경우는 잘못된 경우이다. 허용되지 않는다.


//varargs가 맨 앞에 온 경우이다.

public int sum(int... args, String a, int b) { ... }


//varargs가 가운데 온 경우이다.

public int sum(String a, int... args, int b) { ... }



+ Recent posts