DEV/Java

[java 기초] 가변 인자(variable args)

Bi3a 2023. 11. 10. 01:46

728x90

java 기초 깨부시기

 

1. 가변 인자

메소드의 고정적인 매개변수 인자 값의 개수를 가변적으로 조절할 수 있는 기능입니다. 

 

1-1. 동적으로 매개변수 개수를 조절할 수 없어 불편하다 ...

`한번쯤은 생각해 보신 경험이 있으실 수 있습니다.`

매개변수 인자의 개수가 다를 때마다 모든 메소드를 오버로딩해야 하는 귀찮음과 막막함!

public int void sum(a + b) {
	return a + b;
}

public int void sum(a + b + c) {
	return a + b + c;
}

public int void sum(a + b + c + d) {
	return a + b + c + d;
}

// 끝도 없다 ...

하지만 다행스럽게도 이런 비효율적인 메소드 처리를 효율적으로 줄이고,

매개변수 개수를  동적으로 조절 할 수 있는 문법이 있으니, 그것이 바로 가변인자 VarArgs입니다.

 

2. java 가변인자 사용법

2-1. 가변인자 :  ... 을 통해 사용하고, 향상된 for문(iter) 을 통해 꺼내 쓴다

매개변수 인자 Type T ... t 로 입력하며, 출력에는 향상된 for문 (T element : t) 로 사용합니다. 
public int varArgs1(int... i) {
    int sum = 0;
    for (int num : i){
        sum += num;
    }
    return sum;
}
    
 System.out.println(varArgs1(1, 3, 5, 7, 9));
 // out : 25

해당 메소드는 int 타입의 매개변수를 개수 상관 없이 동적으로 입력받아 그 합을 리턴하는 메소드입니다.

이와 같이 가변인자 사용에는 3가지 특징이 있습니다.

  1.  인자 입력에는 ... 문법을 사용합니다.
  2.  해당 인자를 메소드에서 활용할 때는 향상된 for문으로 꺼냅니다.
  3.  ... 를 통해 java에서는 메소드 내부적으로 인자값에 대한 배열을 만들어 냅니다.

 

3번에 대한 증명 예시는 아래와 같습니다.

 

2-2) 가변인자는 내부적으로 인자에 대한 배열을 생상한다

public int[] varArgs2(int...i){
    return i;
}

System.out.println(Arrays.toString(T.varArgs2(1, 3, 5, 7, 9)));
// out : [1, 3, 5, 7, 9]

이 메소드를 통해 가변인자는 메소드 내부에서 자연적으로 가변 인자들의  배열을 생성함을 알 수 있습니다.

 

 

2-3) 가변인자는 불변인자 이후 맨 뒤에 사용해야 한다

public void varArgs3(int a, int b, int...i){
    System.out.println(a + " : 저는 불변인자입니다");
    System.out.println(b + " : 저도 불변인자입니다");
    System.out.println(Arrays.toString(i) + " : 저희는 가변인자입니다");
}

varArgs3(1,3,5,7,9);
// out :  
// 1 : 저는 불변인자입니다
// 3 : 저도 불변인자입니다
// [5, 7, 9] : 저희는 가변인자입니다

가변인자는 고정으로 입력받는 매개변수 값인 불변인자가 앞에서 정의된 이후, 맨 뒤의 인자로 사용이 가능합니다.

메소드 인자의 앞에서 가변인자가 선언되고, 불변인자가 이후에 위치하면 컴파일 에러를 발생시킵니다.

 

 

가변인자 사용법에 대해 알아봤습니다.


# 구현 코드

클릭하면 깃허브로 이동합니다.