Search

Item 53. 가변인수는 신중히 사용하라

생성일
2023/08/01 08:19
챕터
8장 - 메서드

요약

인자의 개수가 일정하지 않을 때는 가변 인수를 사용하고, 가변 인수 앞 필수로 받아야 하는 매개변수를 추가하여 개수를 제한하자.

가변인수에서 인자의 개수를 제한하기

static int sum(int... args) { int sum = 0; for (int arg: args) sum += arg; return sum; }
Java
복사
이런 메서드의 경우 sum(1, 2, 3)을 넣으면 6을 반환하고, sum()이면 0을 반환한다.
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; }
Java
복사
이와 같이 받는 인자의 개수를 최소 1개 이상 받고 싶어 예외를 던지도록 코드를 작성하면. 오류 발생 시점이 컴파일 타임이 아닌 런타임 중에 발생하고 코드가 지저분해진다.
static int min(int firstArg, int... args) { int min = firstArg; for (int arg : args) if (arg < min) min = arg; return min; }
Java
복사
이와 같이 매개변수를 가변인수를 포함해 2개를 받으면 훨씬 나은 코드를 작성할 수 있다.
가변 인수를 사용하면 성능이 저하되기 때문에, 메서드 호출이 많이 되는 부분에 대해서 다중 정의를 사용해 메서드를 선언해두는 것도 권장된다.
public void foo() {} public void foo(int a1) {} public void foo(int a1, int a2) {} public void foo(int a1, int a2, int a3) {} public void foo(int a1, int a2, int a3, int... rest) {}
Java
복사