728x90
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가지 특징이 있습니다.
- 인자 입력에는 ... 문법을 사용합니다.
- 해당 인자를 메소드에서 활용할 때는 향상된 for문으로 꺼냅니다.
- ... 를 통해 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] : 저희는 가변인자입니다
가변인자는 고정으로 입력받는 매개변수 값인 불변인자가 앞에서 정의된 이후, 맨 뒤의 인자로 사용이 가능합니다.
메소드 인자의 앞에서 가변인자가 선언되고, 불변인자가 이후에 위치하면 컴파일 에러를 발생시킵니다.
가변인자 사용법에 대해 알아봤습니다.
# 구현 코드
'DEV > Java' 카테고리의 다른 글
[lombok] @Builder와 @ToBuilder의 이해 (1) | 2023.11.30 |
---|---|
[lombok] @ToString에 대한 이해와 적용 (0) | 2023.11.14 |
[java 기초] 스트림 도전기 (3 / 4) - 스트림 생성 ~ 연산까지 (0) | 2023.10.26 |
[java 기초] json.simple 활용 JSON 데이터 저장, 불러오기 (0) | 2023.10.25 |
[java 기초] NoSuchElementException 예외의 이해와 발생사례 (1) | 2023.10.25 |