1 필요성
함수의 매개변수로 정해진 수가 아니라 가변 개수의 인자를 받아야 하는 경우가 있다.
이때 '...'을 사용하면 함수에서 받을 매개변수의 수를 미리 정하지 않아도 된다.
2 문법
void test(int... test)
위와 같이 함수의 매개변수 타입 뒤에 '...'을 붙이면 된다.
- 특징
- 이렇게 받은 매개변수는 함수 내에서 배열로 처리된다.
- 메서드의 가변인자는 하나만 가능하고 마지막 매개변수만 가능하다.
- 값을 전달하지 않을 수도 있고, 1개 이상 여러개를 전달할 수도 있다.
3 예시
public class Main {
public static void main(String[] args) {
test(1, 2, 3);
}
public static void test(int... test) {
System.out.println("class name: " + test.getClass());
System.out.println("length: " + test.length);
}
}
위의 예시를 실행하면 아래의 결과가 나온다.
class name: class [I
length: 3
매개변수의 클래스를 보면 배열임을 확인할 수 있다.
또한 배열의 길이는 함수를 호출할 때 해당 가변인자로 넘겨준 인자의 수와 같다.
만약 아무것도 입력하지 않으면 길이는 0이 된다.
public class Main {
public static void main(String[] args) {
test(new int[]{1,2,3});
}
public static void test(int... test) {
System.out.println("class name: " + test.getClass());
System.out.println("length: " + test.length);
}
}
함수 호출 시에 가변인자들을 넘길 때 컴파일러에서 배열로 변화을 해서 함수로 넘긴다. 그래서 함수를 호출할 때 가변인자를 나열하는 것 대신 배열을 입력할 수도 있다.
4 주의점
주의1
public class Main { public static void main(String[] args) { test(1, 2, 3, 3.3); } public static void test(int... test) { System.out.println("class name: " + test.getClass()); System.out.println("length: " + test.length); } }
위 처럼 int를 받을 때 3.3같이 int가 아닌 다른 값을 넣으면 컴파일 에러가 발생한다.
주의2
public static void test(int... numbers, String name) { } // 컴파일 에러 public static void test(String name, int... numbers) { } // 정상
가변인자가 마지막이 아닐 경우 컴파일 에러가 발생한다.
주의3
너무 많은 인자를 전달할 경우 stack overflow가 발생할 수 있다.
'스터디 > Java' 카테고리의 다른 글
[Java 자바] 체크 예외와 언체크 예외(Checked Exception, Unchecked Exception) (0) | 2024.11.14 |
---|---|
[Java 자바] finally는 반드시 실행된다. (0) | 2024.11.10 |
[Java 자바] 정적 초기화 블록, 인스턴스 초기화 블록 (0) | 2024.09.20 |
[Java 자바] equals()와 hashCode() 메서드 (0) | 2024.09.10 |
[Java 자바] 제네릭(generic)이란? (0) | 2024.03.19 |