본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Effective Java] 가변인자(varargs)를 분별력 있게 사용하자.

by 돼지왕 왕돼지 2017. 1. 17.
반응형

 [Effective Java] 가변인자(varargs)를 분별력 있게 사용하자.


1.5, Call, Effective JAVA, enum, enumset, no param, Param, runtime exception, static factory, Validity, varargs, [Effective Java] 가변인자(varargs)를 분별력 있게 사용하자., 가변 인자, 남용, 배열 생성, 분별력, 성능, 유연함, 의미, 초기화



-
1.5 이후에 사용 가능한 가변 인자.


-
가변 인자만 받는 method 는 문제가 많다.
가장 심각한 것은 클라이언트가 인자를 주지 않고 메소드를 호출하면 Runtime Exception 이 나기 쉽다. ( 파라미터 없이 call 해도 args 값은 null 은 아니다. )
또한 validity 를 명시적으로 추가해야 하며, 그 코드가 복잡해질 수 있다.


-
가변 인자만 받는 method 대신 어떤 의미를 담은 하나의 인자를 더 받아서 처리하는 것이 좋다.


-
성능이 중요한 상황에서 가변 인자를 사용하는 것을 주의하자.
가변 인자 메소드는 호출할 때마다 배열 생성과 초기화가 일어난다.
가변 인자의 유연함이 필요하다면 아래와 같은 패턴을 사용하는 것이 좋다.
만약 어떤 메소드 호출의 95퍼센트가 3개 이하의 매개 변수를 갖는다면,

public void foo(){ }
public void foo(int a){ }
public void foo(int a, int b){ }
public void foo(int a, int b, int c){ }
public void foo(int a, int b, int c, int... rest){ }

EnumSet 클래스에서는 enum 생성 비용을 최소화하기 위해 자신의 static factory 메소드에 이 방법을 사용한다.



Summary


가변 인자(varargs 메소드는 가변적인 개수의 인자를 필요로 하는 메소드를 정의하는 편리한 방법이다.
그러나 절대로 남용해서는 안된다.
부적합하게 사용하면 혼란스러운 결과만 초래할 수 있다.





반응형

댓글