@SafeVarargs 어노테이션은 Java 7에서 처음 도입되었습니다. 이 어노테이션은 가변 인수(varargs) 매개변수를 받는 final 메서드, static 메서드, 그리고 생성자에 적용할 수 있으며, 해당 메서드가 varargs 매개변수에 대해 안전하지 않은(unsafe) 연산을 수행하지 않는다는 사실을 컴파일러와 개발자에게 알려주는 역할을 합니다.
Java 9 이전에는 오버라이딩이 불가능한 final 메서드, static 메서드, 생성자에만 이 어노테이션을 붙일 수 있었습니다. 그런데 private 메서드 역시 오버라이딩될 수 없기 때문에 논리적으로도 안전하다고 볼 수 있습니다. 이러한 비일관성을 해소하기 위해 Java 9부터는 @SafeVarargs 어노테이션을 private 인스턴스 메서드에도 적용할 수 있게 되었습니다.
문법(Syntax)
@SafeVarargs
private void methodName(...) {
// 실행할 코드
}
예제(Example)
아래 예제는 private 메서드에 @SafeVarargs 어노테이션을 적용하여 가변 인수로 전달된 List를 출력하는 코드입니다.
import java.util.ArrayList;
import java.util.List;
public class SafevarargsTest {
@SafeVarargs // private 메서드에 @SafeVarargs 적용
private void display(List<String>... names) {
for(List<String> name : names) {
System.out.println(name);
}
}
public static void main(String args[]) {
SafevarargsTest test = new SafevarargsTest();
List<String> list = new ArrayList<String>();
list.add("TutorialsPoint");
list.add("Tutorix");
test.display(list);
}
}
실행 결과(Output)
[TutorialsPoint, Tutorix]
위 예제에서 볼 수 있듯이, Java 9부터는 private 메서드에 @SafeVarargs를 선언해도 컴파일 오류가 발생하지 않으며, 제네릭 가변 인수 관련 경고 없이 안전하게 메서드를 사용할 수 있습니다.