더북(TheBook)

3.9.1 지역 클래스


메서드 안에도 클래스를 정의할 수 있다. 이렇게 메서드 안에 정의한 클래스를 지역 클래스(로컬 클래스(local class))라고 한다. 보통은 전략적으로만 사용하는 클래스를 지역 클래스로 정의한다. 흔히 어떤 클래스가 인터페이스 하나를 구현하고, 메서드를 호출하는 쪽에서 구현 클래스가 아니라 인터페이스에만 관심이 있을 때 전략적으로 지역 클래스를 사용한다.

예를 들어 다음 메서드를 생각해 보자.

public static IntSequence randomInts(int low, int high)


이 메서드는 주어진 범위에 있는 임의의 정수를 무한 시퀀스로 만들어 낸다. IntSequence가 인터페이스이므로 randomInts 메서드는 이 인터페이스를 구현하는 클래스의 객체를 반환해야 한다. 호출하는 쪽은 구현 클래스에 관심을 두지 않으므로 구현 클래스를 메서드 안에 선언해도 된다.

private static Random generator = new Random();


public static IntSequence randomInts(int low, int high) {

    class RandomSequence implements IntSequence {

        public int next() { return low + generator.nextInt(high - low + 1); }

        public boolean hasNext() { return true; }

    }

    return new RandomSequence();

}

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