DEV/Java

[java] 가변 인자(variable args) 설명 및 예시

Bi3a 2023. 11. 10. 01:46

목차
반응형

java 기초, 가변 인자에 대해 알아봅시다.
java 기초 깨부시기

 

1. 가변 인자

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

 

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

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

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

java
닫기
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)로 사용합니다. 
java
닫기
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) 가변인자는 내부적으로 인자에 대한 배열을 생상 한다

java
닫기
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) 가변인자는 불변인자 이후 맨 뒤에 사용해야 한다

java
닫기
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] : 저희는 가변인자입니다

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

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

 

 

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


# 구현 코드

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

 

반응형