"이것이 자바다"

이것이 자바다 Chapter09. 중첩클래스 / 중첩인터페이스

의그 2021. 11. 22. 13:40

이것이 자바다 Chapter09. 중첩클래스 / 중첩인터페이스

 

1절. 중첩 클래스와 중첩 인터페이스란?

중첩 클래스: 클래스 멤버로 선언된 클래스

class ClassName {

  class NetstedClassName { // 중첩 클래스

  }

}

중첩 인터페이스 : 클래스 멤버로 선언된 인터페이스

class ClassName {

  interface NestedInterfaceName { // 중첩 인터페이스

  }

}

 

중첩 클래스와 인터페이스의 용도

- 해당 클래스에서만 사용하는 클래스와 인터페이스가 필요할 때 활용된다.

- 중첩 인터페이스는 UI 컴포넌트 내부 이벤트 처리에 많이 활용된다.

2절. 중첩 클래스

※ 인스턴스 멤버 클래스

class A {

  /** 인스턴스 멤버 클래스 **/

  class B {

  B() { }                   ---------- 생성자

  int field1;              ---------- 인스턴스 필드

  // static int field2;   ---------- 정적 필드 (x)

  void method1() { }  ---------- 인스턴스 메소드

  //static void method2(){} ---- 정적 메소드 (x)

  }

}

A a = new A();

A.B b = a.new B();

b.field1 = 3;

b.method1();

 

※ 정적 멤버 클래스

 

※ 로컬 클래스

쓰레드에 사용되는 로컬 클래스

 

3절. 중첩 클래스의 접근 제한

인스턴스 멤버 클래스(B)는 바깥 클래스의 인스턴스 필드(field1)의 초기값이나 인스턴스 메소드(method1())에서

객체를 생성할 수 있으나, 정적 필드(field3)의 초기값이나 정적 메소드(method2())에서는 생성할 수 없다.

 반면, 정적 멤버 클래스(C)는 모든 필드의 초기값이나 모든 메소드에서 객체를 생성할 수 있다.

 

인스턴스 멤버 클래스(B) 안에서는 바깥 클래스의 모든 필드와 모든 메소드에 접근할 수 있지만,

(↑중첩 클래스는 사용하는 이유 중 하나!)

정적 멤버 클래스(C) 안에서는 바깥 클래스의 정적 필드(field2)와 메소드(method2())에만 접근할 수 있고,

인스턴스 필드(field1)와 메소드(method1())는 접근할 수 없다.

로컬 클래스 : 메소드 안에 선언된 클래스

메소드 안에 있는 매개변수나 로컬변수는 메소드 블록이 종료되면, 스택 영역에서 제거가 되기때문에 사라진다.

(로컬 클래스의 객체는 메소드 실행이 끝나도 힙 메모리에 존재해서 계속 사용될 수 있음)

그러나 final 키워드로 선언하면 힙 영역에 남아 계속 사용할 수 있다.

 

4절. 중첩 인터페이스

버튼 클릭 이벤트 처리

5절. 익명 객체