이 메서드는 지정된 자료형의 인자를 0개 이상 받을 수 있다. 동작 원리는 이렇다. 우선, 클라이언트에서 전달한 인자 수에 맞는 배열이 자동 생성되고, 모든 인자가 해당 배열에 대입된다. 그리고 마지막으로 해당 배열이 메서드에 인자로 전달된다.
위와 같은 메소드를 이용해 int 인자들을 받아서 합계를 구하는 메소드를 간단하게 구현할 수 있다. 그러나 때로는 하나 이상의 인자를 받을 수 있는 메서드를 구현하고 싶을 때가 있는데, 이런 메소드의 경우 인자를 하나이상의 값 인자와 , 배열인자 총 2개의 인자를 가진 메서드를 정의하면 된다.
하지만 다른 메서드가 위와 같은 형태( 인자1 , 배열 )로 마지막 인자가 배열을 받는다고 해서 모두다 가변인자로 바꿀 생각을 하면 안된다. varargs는 정말로 임의 개수의 인자를 처리할 수 있는 메서드를 만들어야 할 때만 사용해야 한다.
성능이 중요한 곳에서도 varargs의 사용은 조심해야 한다. varargs 메서드를 호출할 때마다 배열이 만들어지고 초기화되기 때문이다.
요약
varargs 메서드는 인자 개수가 가변적인 메서드를 정의할 때 편리하지만, 남용되면 곤란하다. 부적절하게 사용되면 혼란스러운 결과를 초래할 수 있다.
'개발서적 > 이펙티브자바' 카테고리의 다른 글
[메서드]규칙44. 모든 API 요소에 문서화 주석을 달라 (0) | 2017.05.05 |
---|---|
[메서드]규칙43. null 대신 빈 배열이나 컬렉션을 반환하라 (0) | 2017.05.04 |
[메서드]규칙41. 오버로딩할 때는 주의해라 (0) | 2017.05.04 |
[메서드]규칙40. 메서드 시그너처는 신중하게 설계하라 (0) | 2017.05.04 |
[메서드]규칙39. 필요하다면 방어적 복사본을 만들라 (0) | 2017.05.04 |