가변인자(varargs)

gryoh·2022년 6월 15일
0

하나의 함수에서 매개변수를 동적으로 받을수 있는 방법

  • 자바 1.5부터 지원된다
  • 가변인자를 나타내는 기호(...)를 사용한다. 기호는 변수 타입뒤에 붙여준다
  • 가변인자는 전달인자를 0개부터 n개까지 넣을수 있다
  • 가변인자는 컴파일 시 배열로 처리되기때문에 사용할때 주의해야한다 (0개나 1개도 마찬가지)

가변인자가 있기 전에는 함수명 하나로 매개변수를 다양하게 받기 위해 아래와 같이 오버로딩 방식을 사용하였다

public static void main(String[] args) {
    varargs("A");
    varargs("A", "B");
    varargs("A", "B", "C");
    varargs("A", "B", "C", "D"); //error
}

public static void varargs(String str1){
    System.out.println(str1);   //A
}

public static void varargs(String str1, String str2){
    System.out.println(str1 + "," + str2);  //A,B
}

public static void varargs(String str1, String str2, String str3){
    System.out.println(str1 + "," + str2 + "," + str3); //A,B,C
}

varargs("A", "B", "C", "D") 와 같이 정의된 매개변수보다 많거나 적은 매개변수를 넘기면 에러가 발생하게 된다

이러한 경우 오버로딩되는 메소드가 무한정 늘어날 수 있으므로 가변인자를 사용해주면 좋다


가변인자 사용 예시)

public static void main(String[] args) {
    varargs("A");
    varargs("A", "B");
    varargs("A", "B", "C");
}

public static void varargs(String... strings){
    System.out.println(strings[0]);

    System.out.println(Arrays.toString(strings));

    for(String str : strings){
        System.out.println(str);
    }
}

결과)

A
[A]
A
A
[A, B]
A
B
A
[A, B, C]
A
B
C

가변인자는 컴파일시 배열로 처리되기 때문에 배열 접근이 가능하다

0개의 댓글