가변 인수 메서드는 명시한 타입의 인수를 0개 이상 받을 수 있다.
메서드를 호출하면 인수의 개수와 길이가 같은 배열을 생성 후, 메서드에 건네준다.
- 인수가 1개 이상이어야 하는 경우
- 0개가 받아지도록 설계하는 건 🤮
public void min(int... args) { if (args.length == 0) { throw new IllegalArgumentException(); } int min = args[0]; for (int arg : args) { if (arg < min) { min = arg; } } System.out.println(min); }
- 가변 인수의 갯수로 검증하게끔 하면 런타임에 에러를 확인 할 수 있다.
- 지저분한 코드
- 필수 매개변수를 추가로 받도록 하면 된다.
public void min(int firstArg, int... args){ int min = firstArg; for(int arg : args){ if(arg < min){ min = arg; } } System.out.println(min); }
- 0개가 받아지도록 설계하는 건 🤮
- 성능에 민감한 상황에 가변인수를 사용하는 패턴
가변 인수 메서드는 호출 될 떄마다 배열을 새로 할당하고 초기화
이 비용을 감당하기 힘들지만, 가변 인수의 유연성이 필요하다면 다음과 같은 패턴을 적용할 수 있다.
ex) 해당 메서드의 호출의 대부분이 인수를 3개 이하로 사용한다면, 다음과 같이 메서드를 다중정의public void method(){ ... } public void method(int a1){ ... } public void method(int a1, int a2){ ... } public void method(int a1, int a2, int a3){ ... } public void method(int a1, int a2, int a3, int... args){ ... }
가변 인수를 사용하는 메서드의 호출 책임을 줄일 수 있다.