이것이 자바다 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절. 익명 객체
'"이것이 자바다"' 카테고리의 다른 글
이것이 자바다 Chapter11(1). 기본 API 클래스 - 자바 API 도큐먼트, java.lang과 java.util 패키지, Object(s) 클래스, System 클래스, Class 클래스 (0) | 2021.11.29 |
---|---|
이것이 자바다 Chapter10. 예외 처리 (0) | 2021.11.26 |
이것이 자바다 Chapter08. 인터페이스 (0) | 2021.09.13 |
이것이 자바다 Chapter07. 상속 (0) | 2021.09.13 |
이것이 자바다 Chapter06. 클래스 (0) | 2021.09.13 |