사실 무슨 말인지 잘 모르겠어요..
09-1 중첩 클래스와 중첩 인터페이스 소개
중첩클래스
클래스 내부에 선언한 클래스
중첩인터페이스
클래스 내부에 선언한 인터페이스
1. 중첩 클래스
멤버 클래스
- 클래스의 멤버로서 선언되는 중첩 클래스
- 클래스나 객체가 사용 중이면 언제든 재사용 가능
- 인스턴스 멤버 클래스
- 정적 멤버 클래스
- 바이트 코드 파일명
A $ B .class
: A = 바깥클래스, B = 멤버 클래스
로컬 클래스
- 생성자 또는 메소드 내부에서 선언되는 중첩 클래스
- 메소드 실행할 때만 사용되고 메소드 종료시 없어짐
A $1 B .class
: A = 바깥클래스, B = 로컬 클래스
인스턴스 멤버 클래스
- static 키워드 없이 중첩 선언된 클래스
- 인스턴스 필드와 메소드만 선언 가능
- 정적 필드와 메소드 선언 X
정적 멤버 클래스
- static 키워드로 선언된 클래스
- 모든 종류의 필드와 메소드 선언 가능
로컬 클래스
- 메소드 내에 선언된 중첩 클래스
- 접근 제한자(public, private) 및 static을 붙일 수 없음. (-> 메소드 내에서만 선언되기 때문에 접근 제한 필요 없음)
- 정적 필드, 메소드 선언x
- 메소드 내에 객체 생성
예제로 알아보는 중첩 클래스 (손코딩)


2. 중첩 클래스의 접근 제한
멤버 클래스 내부에서 바깥 클래스의 필드와 메소드 접근 시 제한이 따름.
메소드의 매개 변수나 로컬 변수를 로컬 클래스에서 사용할 때도 제한이 따름
바깥 필드와 메소드에서 사용 제한 (손코딩)

바깥 클래스에서 인스턴스 멤버 클래스 사용 시 제한
- 정적 멤버 클래스(C)는 모든 필드의 초기값이나 모든 메소드에서 객체 생성 가능
- 인스턴스 멤버 클래스(B)는 바깥 클래스의 인스턴스 필드(field1)의 초기값, 인스턴스 메소드(method1())에서 객체 생성 가능
멤버 클래스에서 사용 제한 (손코딩)

멤버 클래스가 인스턴스 or 정적으로 선언됨에 따라 멤버 클래스 내부에서 바깥 클래스의 필드와 메소드에 접근 제한
- 인스턴스 멤버 클래스(B) 안에서는 바깥 클래스의 모든 필드와 모든 메소드 접근 가능
- 정적 멤버 클래스(C) 안에서는 바깥 클래스의 정적 필드(field2)와 메소드(method2())에만 접근 가능
로컬 클래스에서 사용 제한 (손코딩)

메소드의 매개 변수나 로컬 변수를 로컬 클래스에서 사용할 때 제한
로컬 스레드 객체 사용 시 메소드 종료 후에도 계속 실행 상태로 존재 가능
- 자바 7 이전에는 final 키워드 필수
- 자바 8부터는 final 키워드 없어도 final 특성을 기억함. (값 수정 X)
중첩 클래스에서 바깥 클래스 참조 얻기 (손코딩)

중첩 클래스에서 this 키워드 사용 시 중첩 클래스의 객체 참조됨.
-> 중첩 클래스 내부에서 this.필드
, this.메소드
로 호출 시 중첩 클래스의 필드와 메소드가 사용됨.
- 중첩 클래스 내부에서 바깥 클래스의 객체 참조 시
: 바깥클래스.this.필드
, 바깥클래스.this.메소드()
3. 중첩 인터페이스
클래스의 멤버로 선언된 인터페이스. 해당 클래스와 긴밀한 관계를 맺는 구현 클래스를 만들기 위함.
- 인스턴스 멤버 인터페이스와 정적 멤버 인터페이스 모두 가능
- 정적 멤버 인터페이스는 바깥 클래스의 객체 없이 바로 접근 가능 (UI 프로그래밍에서 이벤트 처리 목적으로 많이 활용)
손코딩

Button 클릭 시 이벤트를 처리하는 객체를 받고 싶다고 가정
- 중첩 인터페이스(OnClick?Listener) 타입으로 필드(listener) 선언
- Setter 메소드(setOnClickListener())로 구현 객체를 받아 필드에 대입
- touch()메소드 실행(버튼 이벤드 발생) 시 인터페이스를 통해 구현 객체 의 메소드 호출(listener.onClick())
- 구현 클래스(CallListener, MessageListener) 선언
추가숙제
확인문제 3번
Car 클래스 내부에 Tire와 Engine이 멤버 클래스로 선언되어 있다. 바깥 클래스(NestedClassExample)에서 멤버 클래스의 객체를 생성하는 코드 작성

Tire
는 인스턴스 멤버 클래스 -> Car
객체 먼저 생성 후 Tire
객체 생성 가능
Engine
은 정적 멤버 클래스 -> Car
객체 생성 X, 바로 Engine
객체 생성