본문으로 바로가기

[Java] 가변인자(varargs) 사용법 (매개변수 동적사용)

category Java 2020. 5. 30. 11:41

 

하나의 함수에서 매개변수를 동적으로 받을수 있는 방법으로 가변인자를 사용 할 수 있다.

(가변인자는 자바 1.5부터 지원된다고 한다.)

 

비슷한 방법으로 오버로딩을 볼 수 있는데, 오버로딩은 함수 정의를 여러개 해야한다.

public class test {
	public static void main(String[] args) {
		test t = new test();
		t.variable("A");
		t.variable("A","B");
		t.variable("A","B","C");
	}
	
	public void variable(String s) {
		System.out.println(s);
	}
	
	public void variable(String s, String ss) {
		System.out.println(s);
		System.out.println(ss);
	}
	
	public void variable(String s, String ss, String sss) {
		System.out.println(s);
		System.out.println(ss);
		System.out.println(sss);
	}
}
////////////Console////////////
A
A
B
A
B
C

정의된 매개변수보다 많거나 적은 매개변수를 넘기면 당연히 안된다.

 

가변인자

가변인자는 가변인자를 나타내는 기호(...)를 사용한다.

변수 타입뒤에 붙여주고 변수명을 쓰면 끝

public class test {
	public static void main(String[] args) {
		test t = new test();
		t.variable();
		t.variable("A");
		t.variable("A","B");
		t.variable("A","B","C");
		t.variable("A","B","C","D");
	}
	
	public void variable(String... s) {
		System.out.println(s);
	}
}
////////////Console////////////
[Ljava.lang.String;@15db9742
[Ljava.lang.String;@6d06d69c
[Ljava.lang.String;@7852e922
[Ljava.lang.String;@4e25154f
[Ljava.lang.String;@70dea4e

 

가변인자는 전달인자를 0개부터 n개까지 넣을수 있다.

 

가변인자는 컴파일시 배열로 처리되기때문에 사용할때 주의해야한다. (0개나 1개도 마찬가지)

 

따라서 위 코드의경우 아래처럼 사용하면 값을 볼 수 있다.

 

배열의 값을 보여주기위해 Arrays.toString()

public class test {
	public static void main(String[] args) {
		test t = new test();
		t.variable();
		t.variable("A");
		t.variable("A","B");
		t.variable("A","B","C");
		t.variable("A","B","C","D");
	}
	
	public void variable(String... s) {
		System.out.println(Arrays.toString(s));
	}
}
////////////Console////////////
[]
[A]
[A, B]
[A, B, C]
[A, B, C, D]

for 문으로 배열의 값을 하나씩 출력

public class test {
	public static void main(String[] args) {
		test t = new test();
		t.variable();
		t.variable("A");
		t.variable("A","B");
		t.variable("A","B","C");
		t.variable("A","B","C","D");
	}
	
	public void variable(String... s) {
		for(String str : s) {
			System.out.println(str);
		}
	}
}
////////////Console////////////
A
A
B
A
B
C
A
B
C
D

 

배열로 처리되는만큼 배열로 리턴을 해도 문제 없다.

public class test {
	public static void main(String[] args) {
		test t = new test();
		System.out.println(Arrays.toString(t.variable("A","B","C")));
	}
	
	public String[] variable(String... s) {
		return s;
	}
}
////////////Console////////////
[A, B, C]