네, Java 9부터는 익명 내부 클래스(anonymous inner class)에서도 다이아몬드 연산자(diamond operator)를 사용할 수 있습니다.
다이아몬드 연산자(<>)를 사용하는 목적은 표현식 오른쪽에서 제네릭 타입을 반복해서 작성하지 않아도 되도록 하여 중복 코드를 줄이고 가독성을 높이는 것입니다. Java 7에서는 다이아몬드 연산자가 일반 클래스에만 적용되었고, 익명 내부 클래스에는 사용할 수 없었습니다. 이때 익명 내부 클래스에 다이아몬드 연산자를 사용하려고 하면 컴파일 오류가 발생했습니다. 그 이유는 당시 컴파일러가 익명 클래스 생성자의 타입을 정확히 추론할 수 없었기 때문입니다.
Java 9에서는 이러한 제한이 해제되어, 추론 가능한 타입이라면 익명 내부 클래스를 생성할 때도 다이아몬드 연산자를 자유롭게 사용할 수 있게 되었습니다.
아래 예제에서는 익명 내부 클래스와 함께 다이아몬드 연산자를 사용하는 방법을 보여줍니다.
예제 코드
import java.util.*;
public class DiamondOperatorTest {
public static void main(String args[]) {
String[] str = {"Raja", "Adithya", "Jai", "Chaitanya", "Vamsi"};
Iterator<String> itr = new Iterator<>() { // 익명 내부 클래스
int i = 0;
public boolean hasNext() {
return i < str.length;
}
public String next() {
if(!hasNext()) {
throw new NoSuchElementException();
}
return str[i++];
}
};
while(itr.hasNext()) {
System.out.println(itr.next());
}
}
}실행 결과
Raja Adithya Jai Chaitanya Vamsi
위 코드에서 볼 수 있듯이 new Iterator<>()처럼 오른쪽에 제네릭 타입을 생략해도 컴파일러가 왼쪽 선언부(Iterator<String>)를 기반으로 타입을 자동으로 추론합니다. 덕분에 코드가 더 간결해지고, 나중에 타입을 변경할 때 한 곳만 수정하면 되므로 유지보수성도 향상됩니다.