SafeVarargs — 안전한 가변 인자 애너테이션

SafeVarargs — 안전한 가변 인자 애너테이션

@SafeVarargs는 애너테이션이 적용된 메서드나 생성자의 본문이 가변 인자(varargs) 매개변수에 대해 잠재적으로 안전하지 않은 연산을 수행하지 않는다는 프로그래머의 단언(assertion)이에요. 이 애너테이션을 메서드나 생성자에 적용하면 비재현(reifiable)하지 않은 가변 인자 타입에 대한 체크되지 않은 경고와, 호출 지점에서의 매개변수화 배열 생성에 대한 체크되지 않은 경고를 억제해요. 이 애너테이션 타입에는 추가 사용 제약이 있는데, 메서드나 생성자 선언에 @SafeVarargs를 붙였을 때 그 선언이 고정 인자(fixed arity) 메서드·생성자이거나, static·final·private이 아닌 가변 인자 메서드이면 컴파일 오류예요.

출처: Java API Reference

본문

@SafeVarargs@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})로 선언되며, @Retention(RetentionPolicy.RUNTIME)으로 유지돼요.

이 애너테이션을 적용하려면 다음 조건을 만족해야 해요:

  • 애너테이션이 적용된 선언은 가변 인자 메서드 또는 생성자여야 해요 (고정 인자면 오류).
  • 가변 인자 메서드라면 static, final, private 중 하나여야 해요 (인스턴스 메서드나 상속 가능한(overridable) 메서드면 오류).

@SafeVarargs를 붙이면 가변 인자 배열을 통해 발생하는 A generic array is created for a varargs parameter 같은 언체크 경고를 억제할 수 있어요. 메서드가 실제로는 가변 인자 배열의 요소를 수정하거나 외부로 노출하는 등 안전하지 않은 동작을 한다면 이 애너테이션을 사용하면 안 돼요.

더 알아보기 (Learn more)