1. 내부 클래스의 정의
- 클래스 내에 선언된 클래스
- 외부 클래스와 밀접한 연관이 있을 때 사용
- 내부 클래스에서 외부 클래스의 멤버에게 접근할 수 있음
// 외부 클래스
class Outer {
// 내부 클래스
class Inner {
}
}
2. 선언 위치에 따른 내부 클래스의 종류
변수 선언과 동일하게 인스턴스, 클래스, 메서드 레벨을 따름
class Outer {
int instanceVariable; // 인스턴스 변수
static int staticVariable; // 정적 변수
void method() {
int localVariable; // 지역 변수
}
}
class Outer {
class InstanceInner {
// ...
}
static class StaticInner {
// ...
}
public void method() {
class LocalInner {
// ...
}
}
}
복습
인스턴스 변수(멤버 변수)
인스턴스가 생성될 때 마다 개별적인 복사본이 생성
각각의 인스턴스마다 고유한 값을 가짐 (인스턴스 레벨)
정적 변수(멤버 변수)
클래스의 모든 인스턴스들이 공유하는 값 (클래스 레벨)
지역 변수
선언된 블록 내에서만 사용 가능 (메서드 레벨)
매개 변수
메서드 또는 생성자의 선언부에 정의되는 변수
메서드가 호출될 때 전달되는 값에 대한 참조
지역 변수로 취급
참고 사항: call by value, call by reference
3. 내부 클래스의 사용
class Outer {
private int outerInstanceVariable;
static int outerStaticVariable;
class InstanceInner {
int a = outerInstanceVariable; // 외부 private 필드 접근 가능
int b = outerStaticVariable;
}
static class StaticInner {
// int x = outerInstanceVariable; // static 클래스는 외부 클래스의 인스턴스 멤버 접근 불가
int y = outerStaticVariable;
}
public void method() {
int localVariable = 0;
class LocalInner {
int i = localVariable;
}
}
}
class Outer {
class InstanceInner {
int iv = 1;
}
static class StaticInner {
int iv = 2;
static int cv = 3;
}
public void method() {
int localVariable = 4;
class LocalInner {
int lv = localVariable;
}
}
public static void main(String[] args) {
System.out.println(Outer.StaticInner.cv);
Outer outer = new Outer();
Outer.InstanceInner instanceInner = outer.new InstanceInner();
System.out.println(instanceInner.iv);
Outer.StaticInner staticInner = new StaticInner();
System.out.println(staticInner.iv);
}
}
'Java' 카테고리의 다른 글
[Java] 버블 정렬(Bubble Sort) 구현해보기 (0) | 2022.08.16 |
---|---|
[Java] 문자열 뒤집기 (0) | 2022.08.13 |
자바(Java) - 예외(Exception) (0) | 2022.08.05 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2022.08.03 |
[Java] .equals("")와 .isEmpty()의 차이 (0) | 2022.08.01 |