📚
인터페이스는 객체 생성이 불가능할까?
October 26, 2023
모던 자바 인 액션을 읽던 도중 아래와 같은 코드를 보게 되었다.
File[] hiddenFiles = new File(".").listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.isHidden();
}
});
디렉토리에 숨겨진 파일을 필터링하는 코드이다. 한 눈에 들어오지 않아서 인텔리제이를 켜고 하나하나 입력해봤다. new FileFilter 부분을 타이핑하자 자동완성이 되었다. 완성된 코드는 평소에 객체 생성할 때 보던 코드와 다른 모습이였다. FileFilter가 무엇인지 알아내기 위해서 내부로 들어가보았다. 인터페이스였다. 내가 아는 인터페이스는 new 키워드로 객체 생성이 불가능한데..? 뭐지?
인터페이스도 익명 객체로 객체 생성이 가능하다.
익명 객체란 말 그대로 이름이 없는 객체이다. 이름이 없기 때문에 부를 수도 없다. 그렇기 때문에 생성과 동시에 한번만 사용되고 사라진다. 일반적으로 생성한 후에 다른 메소드의 파라미터로 넘겨줄 때 사용한다.
인터페이스도 익명 객체를 생성함과 동시에 추상메소드를 구현한다면 (익명)객체로 만들 수 있다.
자바8에서 추가된 기능으로 더 이상 위와 같이 구현하지 않고, 메소드를 일급객체 취급하여 메소드 참조를 통해 메소드를 전달할 수 있게 된다.