중첩 클래스와 중첩 인터페이스 사용하는 이유

여러 클래스와 관계를 맺을 필요 없이, 어떠한 클래스 내부에서만 관계를 맺어도 된다면, 중첩 클래스를 사용하여 불필요한 관계를 감추고 높은 접근성을 얻을 수 있다.

public class Class {
  class NestedClass {
  }

  interface NestedInterface {
  }
}

주로 UI 프로그래밍에서 이벤트를 처리할 목적으로 많이 활용된다. UI 내부에 삽입되는 인터페이스 혹은 클래스는 주로 View 클래스 내부에 자리잡아서 View와만 관계를 맺게 된다.

중첩 클래스의 종류

멤버 클래스

public class Class {
  class MemberClass { ... }
}

상위 객체를 생성해야만 사용 가능한 중첩 클래스이다. 내부에 정적 필드 혹은 메소드를 선언할 수 없다.

정적 멤버 클래스

public class Class {
  static class MemberClass { ... }
}

상위 객체가 인스턴스화되지 않아도 접근 가능한 중첩 클래스이다. 내부에 정적 필드 혹은 메소드 선언이 가능하다.

로컬 클래스

public class Class {
  void method() {
    class LocalClass { ... }
  }
}
void method() {
  class DownloadThread extends Thread { ... }
  DownloadThread thread = new DownloadThread();
  thread.start();
}

중첩 클래스의 바이트코드