본문 바로가기

develop/Java

가변인자 Variable Arguments

가변인자 = 비정형 인자

 

😖

가변인자를 사용하는 이유?..

일반적으로 메서드 오버로딩시 전달인자의 갯수와 메서드가 가진 파라미터 갯수가 일치해야 오류가 발생하지 않는다.

하지만 사용자가 넣을 파라미터가 몇개인지를 항상 예측하고 메서드 파라미터를 열어둘 수 없기 때문에

가변인자를 통해서 파라미터 갯수에 대한 제한을 없애도록 함.

 

-메서드 파라미터의 인자가 변하는 형태(갯수의 제한이 없는 전달인자)

-메서드 정의시 선언부 파라미터 부분에 변수를 선언할 때, 변수의 데이터타입과 변수명 사이에 가변인자 기호(...)를 사용

-가변인자를 사용하여 메서드를 정의하면 메서도 호출 시점에서 파라미터 갯수에 대한 제한이 없어짐

=> 같은 타입의 인자, 배열만 전달 가능

-전달받은 데이터는 변수명에 해당하는 1차원 배열로 자동 저장됨.

=> 배열 사용법과 완전히 동일한 코드로 사용 가능.

 

가변 인자는 마지막 파라미터로 단 한번만 지정 가능함

 

메서드 정의 시

[제한자] 리턴타입 메서드명(데이터타입 ...변수명){}

=> 매개변수의 데이터타입 뒤에 가변인자 (...)를 붙이고 변수명 작성

class VariableArguments {
	public void variableArguments(int...nums){
    	System.out.println("가변인자 배열 크기" + nums.length);
    }
}

 

전달받는 데이터는 갯수에 상관없이 모두 nums라는 이름의 배열로 관리

아무 데이터도 전달하지 않는 경우도 커버 가능. 

 

배열로서 저장되기 때문에 반복문을 사용하여 전달받은 데이터가 저장된 배열을 

차례대로 접근해 배열 내 모든 데이터를 사용 가능하다.

 

1. 일반 for문 사용

for(int i=0;i<nums.length;i++){
	System.out.println(nums[i]);
}

2. 확장 for문 사용

for(int num : nums) { //num이라는 변수에 nums를 ....
	System.out.println(num);
}

 

암튼 위에서 인스턴스를 생성하고 메서드를 호출해준다.

 

 

가변인자가 적용된 메서드는 파라미터 갯수에 제한x

파라미터가 없는 빈 메서드도 가능

별도의 오버로딩 없이 파라미터를 한번에 처리 가능

VariableArguments va = new VariableArguments();

va.variableArguments(1,2);
va.variableArguments(1,2,3,5);
va.variableArguments(1,2,3,5,6,7,8);
va.variableArguments();

//배열도 전달가능
int[] nums = {1,2,3,4,5,6,7,8,9,10};
va.variableArguments(nums);

 

가변인자는 2개 이상 사용할 수 없고, 반드시 마지막에 사용되어야 함

(String...name, int...nums) => x

(int...nums,String name) => x

 

'develop > Java' 카테고리의 다른 글

this 키워드  (0) 2021.02.17
생성자 오버로딩(Constructor Overloading)  (0) 2021.02.16
출력 메서드(System.out.p---) 분류(?)  (0) 2021.02.16
접근제한자, 메서드 오버로딩  (0) 2021.02.09
객체 지향 -(2) 생성자  (0) 2021.02.09