중첩 클래스
클래스 내부에 선언한 클래스를 중첩 클래스(nested class)라 하며, 클래스 내부에 선언한 인터페이스를 중첩 인터페이스(nested interface)라 한다
- 내장 클래스는 외부 클래스의 멤버가 private이어도 접근 가능
- 내장 클래스는 외부로부터 보이지 않고 철저하게 숨겨 짐
- 익명 클래스로 콜백 메소드를 편리하게 작성 가능
클래스의 멤버로서 선언되는 중첩 클래스를 멤버 클래스라고도 하며, 메소드 내부에서 선언되는 중첩 클래스는 로컬 클래스라 한다 (메소드가 종료되면 사라짐)
static 키워드 없이 중첩 선언된 클래스를 인스턴스 멤버 클래스라 하며, 정적 필드와 메소드가 아닌 인스턴스 필드와 메소드만 선언 가능하다
반면 static 키워드로 선언된 정적 멤버 클래스는 모든 종류의 필드와 메소드가 선언 가능하다
메소드 내부에서 선언할 수 있는 로컬 클래스는 접근 제한자 및 static 사용이 불가능하다
중첩 인터페이스
중첩 인터페이스는 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위해 사용한다
* 인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모두 가능
익명 객체
이름이 없는 익명(anonymous) 객체는 어떤 클래스를 상속하거나 인터페이스를 구현해야 한다
부모 클래스를 상속하는 자식 클래스를 선언하고 new 연산자를 이용하여 자식 객체를 부모 타입 필드나 변수의 초기값에 대입해 익명 자식 객체를 생성할 수 있다
비슷하게 인터페이스 타입의 필드 혹은 변수를 선언 후 new 연산자를 이용한 구현 객체를 초기값으로 대입해 익명 구현 객체를 생성할 수 있다
메소드의 매개/로컬 변수를 익명 객체 내부에서 사용하는 경우 제한
- 메소드가 종료되어도 익명 객체가 계속 실행 상태일 수 있음
- 메소드의 매개/로컬 변수를 익명 객체 내부에서 사용할 경우 지속 사용 불가
- 컴파일 시 익명 객체에서 사용하는 매개/로컬 변수의 값을 익명 객체 내부에 복사해두고 사용
- 매개/로컬 변수 값이 변경되면 매개/로컬 변수를 final로 선언할 것을 요구
'Languages > Java' 카테고리의 다른 글
[HUFS/객체지향프로그래밍] #10 기본 API 클래스 (0) | 2023.01.06 |
---|---|
[HUFS/객체지향프로그래밍] #9 예외 처리 (1) | 2023.01.04 |
[HUFS/객체지향프로그래밍] #7 인터페이스 (0) | 2023.01.03 |
[HUFS/객체지향프로그래밍] #6 상속 (0) | 2022.12.30 |
[HUFS/객체지향프로그래밍] #5 클래스 (0) | 2022.12.30 |