안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
가변 인자 (Variable Argument)란?
- 타입이 동일한 매개인자를 개수 상관없이 처리할 수 있다.
- 해당 타입의 배열인듯 처리
//기본 구문
리턴 타입 메소드명 (자료형... 참조 변수명) {
...
}
자료형 다음에 (...)이 있는 형태입니다.
public static void main(String[] args) {
ArgumentStudy study = new ArgumentStudy();
study.test3(10, 20);
study.test3(10, 20, 30);
study.test3(10, 20, 30, 40);
}
public void test3(int...nums) {
for(int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
}
@콘솔출력값
10 20
10 20 30
10 20 30 40
넘겨 받은 매개인자들을 test3의 매개변수로 받았고, 모두 배열 타입으로 저장되므로 for문을 통해 출력을 해보았습니다.
배열의 크기는 함수가 호출될 때 전달된 입력값의 개수로 정해지기 때문에 for문으로 구현 가능했습니다.
public void test3(int...nums) {
System.out.println("매개변수 길이 : " + nums.length);
// for(int i = 0; i < nums.length; i++) {
//// System.out.print(nums[i] + " ");
// }
// System.out.println();
}
@콘솔출력값
매개변수 길이 : 2
매개변수 길이 : 3
매개변수 길이 : 4
입력 받은 개수만큼 배열의 길이가 정해지는 것을 위처럼 확인할 수 있습니다.
값 없음, null, 배열도 매개변수로 받아 처리 가능!!
public static void main(String[] args) {
ArgumentStudy study = new ArgumentStudy();
// study.test1(args);
// study.test2(args);
// study.test3(10, 20);
// study.test3(10, 20, 30);
// study.test3(10, 20, 30, 40);
study.test3();
study.test3(null);
int[] arr = {1, 2, 3};
study.test3(arr);
}
public void test3(int...nums) {
// System.out.println("매개변수 길이 : " + nums.length);
if(nums != null) {
for(int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + " ");
}
System.out.println();
}
}
@콘솔출력값
1 2 3
다만 null 값을 넘겨준 후 출력을 하려고 하면 당연히 NullPointException 에러가 발생되겠죠?
if문으로 null이 아니라면 출력 구문을 실행하라고 코드를 다시 짜주었습니다.
가변인자는 메소드의 매개변수 선언부에 마지막에 사용 가능!!
//오류 발생
//매개변수가 다양할 시, 반드시 가변인자는 맨 뒤에
public void test4(int...nums, String s) {
...
}
메소드의 매개변수가 하나 이상일 경우에, 가변인자는 반드시 맨 마지막에 선언 해줘야 합니다.
위 코드는
The variable argument type int of the method test4 must be the last parameter 에러메세지가 발생됩니다.
//문제 없음
public void test4(Stirng s, int...nums) {
...
}
가변인자를 맨 마지막에 선언해주면 문제 없이 사용 가능합니다.
가변인자는 메소드 당 딱 한 번만 사용 가능!!
//오류 발생
//가변인자는 메소드 당 한번만 선언할 수 있음
public void test4(int...nums, double... dnums) {
...
}
가변인자는 메소드 당 한 번만 선언할 수 있으므로, 위와 같이 처리하면 안됩니다.
public void test4(int...nums) {
...
}
public void test5(double... dnums) {
...
}
int형, double형 둘 다 만들고 싶다면 메소드를 분리하여 사용해야 합니다.
printf도 가변인자 메소드였다...!
Object... args, 무슨 타입이든 개수 제한 없이 다 받아준다!!
'Java > Java' 카테고리의 다른 글
클래스와 객체) 클래스 내부/외부 구성요소, 객체지향형 프로그램(OOP) (0) | 2022.03.15 |
---|---|
정렬 알고리즘) 값 교환, 순차 정렬, 선택 정렬 (0) | 2022.03.11 |
main메소드의 입력 매개변수, 타입 변환 메소드 (0) | 2022.03.11 |
2차원 배열) 가변 배열 (Jagged Array)란? (0) | 2022.03.11 |
2차원 배열) 2차원 배열이란?, 생성 방법 (0) | 2022.03.09 |