Item 53 : 가변인수는 신중히 사용하라
2021. 8. 21. 11:17
- 가변인수(varargs) 메소드는 명시한 타입의 인수를 0개 이상 받을 수 있다.
- 가변인수 메소드를 호출하면 인수의 개수와 길이가 같은 배열을 만들고 인수들을 배열에 저장한다.
//입력받은 int 인수들의 합을 계산 해주는 가변인수 메소드
static int sum(int... args) {
int sum = 0;
for (int arg : args) {
sum += arg;
}
return sum;
}
//인수가 1개 이상이어야 하는 가변인수 메소드 - 잘못 구현 한 예
static int min(int... args) {
if (args.length == 0)
throw new IllegalArgumentException("인수가 1개 이상 필요합니다.");
int min = args[0];
for (int i = 1; i < args.length; i++) {
if (args[i] < min) {
min = args[i];
}
}
return min;
}
이 메소드의 가장 큰 문제는 인수를 0개 넣었을 때 런타임시에 실패한다는 점
(컴파일 때 잡아야 좋다)
args 유효성 검사를 명시적으로 해야하고 for-each문도 사용하기 힘들다.
//제대로 사용한 가변인수 메소드
static int min(int firstArg, in... remainingArgs) {
int min = firstArg;
for (int arg : remainingArgs) {
if (arg < min)
min = arg;
}
return min;
}
- 가변인수는 인수 개수가 정해지지 않았을 때 유용하다.
- 성능에 민감한 상황에는 가변인수가 걸림돌이 된다.
- 가변인수 메소드는 호출될 때 마다 배열을 새로 하나 할당하고 초기화하기 때문이다.
'책 > 이펙티브자바' 카테고리의 다른 글
Item 55 : 옵셔널 반환은 신중히 하라 (0) | 2021.08.23 |
---|---|
Item 54 : null이 아닌, 빈 컬렉션이나 배열을 반환하라 (0) | 2021.08.22 |
Item 52 : 다중정의는 신중히 사용하라 (0) | 2021.08.20 |
Item 51 : 메소드 시그니처를 신중히 설계하라 (0) | 2021.08.19 |
Item 50 : 적시에 방어적 복사본을 만들라 (0) | 2021.08.18 |