더북(TheBook)

4.1.10 익명 서브클래스


인터페이스를 구현하는 익명 클래스를 만들 수 있는 것처럼 슈퍼클래스를 확장하는 익명 클래스도 만들 수 있다. 익명 서브클래스는 디버깅에 유용하다.

ArrayList<String> names = new ArrayList<String>(100) {

    public void add(int index, String element) {

        super.add(index, element);

        System.out.printf("Adding %s at %d\n", element, index);

    }

};


슈퍼클래스 이름 뒤에 오는 괄호 안 인수는 슈퍼클래스 생성자에 전달된다. 여기서는 ArrayList<String>의 익명 서브클래스를 생성하면서 add 메서드를 오버라이드했다. 인스턴스의 초기 용량은 100으로 설정된다.

이중 중괄호 초기화(double brace initialization)라고 하는 기교는 내부 클래스 문법을 약간 특이하게 사용한다. 배열 리스트를 생성해서 어떤 메서드에 전달한다고 하자.

ArrayList<String> friends = new ArrayList<>();

friends.add("Harry");

friends.add("Sally");

invite(friends);

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.