IT

[JAVA] 자바 ... 파라미터 = 가변인자 ( varargs )

채보 2021. 2. 2. 00:07

java에서 파라미터를 전달하다 보면 아래와 같은 코드를 보신 적이 있으실 겁니다. 

 

public void test(string... parameter) {
	
    contents
    
}

 

저것은 가변인자로 말 그대로 여러 개의 매개변수를 받을 수 있다는 말 입니다. 

 

 

 오버로딩

 

자바에서는 파라미터 개수가 다르면 다른 메소드로 인식을 합니다. 

 

동일한 기능을 하지만 파라미터가 가변적으로 변경되는 경우 오버로딩을 사용합니다. 

그런데 오버로딩은 파라미터 개수에 맞춰 메소드가 계속 늘어나는 구조입니다. 

// 파라미터가 한 개인 경우
public void search(String one) {}

// 파라미터가 두 개인 경우
public void search(String one, String two) {}

// 파라미터가 세 개인 경우
public void search(String one, String two, String three) {}

 

아니면 이런 케이스에서는 map, List, 배열 객체 등으로 파라미터를 전달하기도 하였습니다. 

// Map을 사용하는 경우
public void search(Map<String, String> param) {}

// 배열을 사용하는 경우
public void search(String[] param) {}

// List를 사용하는 경우
public void search(List<String> param) {}

// VO객체를 사용하는 경우
public void search(ParamVO param) {}

 

 

 가변인자

 

가변인자를 사용하면 동적으로 파라미터를 받을 수 있습니다. 

사용법은 변수 타입 뒤에 기호(...)를 붙여주면 됩니다. 

 

가변인자를 가지고 있는 메소드를 호출할 때는 아래 방법 모두 가능합니다. 

public void callMethod() {
	
    // 파라미터가 없음
    test();
    
    // 파라미터가 한개
    test("A");
    
    // 파라미터가 두개
    test("A", "B");
    
    // 배열로 전달
    test(new String[]{"A", "B", "C"});
}

public void test(String... param) {

	System.out.println("param: " + param);
    
}

 

다른 파라미터와 가변인자를 같이 사용하는 경우에는 가변인자를 제일 뒤에 위치 시켜야 합니다. 

public void test2(String name, String... param) {

	System.out.println("param: " + param);
    
}