가변인자 = 비정형 인자
😖
가변인자를 사용하는 이유?..
일반적으로 메서드 오버로딩시 전달인자의 갯수와 메서드가 가진 파라미터 갯수가 일치해야 오류가 발생하지 않는다.
하지만 사용자가 넣을 파라미터가 몇개인지를 항상 예측하고 메서드 파라미터를 열어둘 수 없기 때문에
가변인자를 통해서 파라미터 갯수에 대한 제한을 없애도록 함.
-메서드 파라미터의 인자가 변하는 형태(갯수의 제한이 없는 전달인자)
-메서드 정의시 선언부 파라미터 부분에 변수를 선언할 때, 변수의 데이터타입과 변수명 사이에 가변인자 기호(...)를 사용
-가변인자를 사용하여 메서드를 정의하면 메서도 호출 시점에서 파라미터 갯수에 대한 제한이 없어짐
=> 같은 타입의 인자, 배열만 전달 가능
-전달받은 데이터는 변수명에 해당하는 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 |