출처 - Java의 정석 기초편 (남궁 성)
1. 내부 클래스
- 클래스 안의 클래스(서로 긴밀한 관계)
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 가능
- 외부에는 불필요한 클래스 감추어 코드 복잡성 줄일 수 있음(캡슐화)
class A { // B의 외부 클래스
…
class B { // A의 내부 클래스
… // A의 객체 생성 없이 A의 멤버 접근 가능
}
…
}
2. 내부 클래스 종류와 특징
- 종류와 유효범위(scope)는 변수의 선언위치에 따른 종류와 같음
- 인스턴스 내부 클래스, static 내부 클래스, 지역 내부 클래스, 익명 클래스
- 멤버변수처럼 접근 제어자 모두 사용 가능 (public, (default), protected, private)
class Outer {
private class InstanceInner {}
protected static class StaticInner {}
void myMethod() {
class LocalInner {}
}
}
3. 내부 클래스 제어자와 접근성
- 내부 클래스 중에서 static 내부 클래스만 static멤버 선언 가능
- final과 static이 동시에 붙은 상수는 모든 내부 클래스에서 선언 가능
- 외부 클래스의 private멤버 접근 가능
- 지역 내부 클래스를 감싸고 있는 메서드의 상수만 사용 가능
- 외부 클래스 객체 먼저 생성 후 인스턴스 내부 클래스 객체 생성
- static 내부 클래스의 객체는 외부 클래스 먼저 생성하지 않아도 됨(내부 static멤버는 객체 생성없이 사용 가능)
4. 익명 클래스
- 이름이 없는 일회용 클래스
- 정의와 생성을 동시에(일회성)
new 조상클래스이름() {
// 멤버 선언
}
또는
new 구현인터페이스이름() {
// 멤버 선언
}
class Ex7_17 {
Object iv = new Object(){ void method(){} };
static Object cv = new Object(){ void method(){} };
void myMethod() {
Object lv = new Object(){ void method(){} };
}
}
'Java' 카테고리의 다른 글
Object클래스(equal, hashCode, toString, String클래스, join) (0) | 2022.10.11 |
---|---|
예외처리 (1) | 2022.10.05 |
추상 클래스(abstract class), 인터페이스(interface) (1) | 2022.10.03 |
다형성(polymorphism) (0) | 2022.10.03 |
제어자(modifier) (0) | 2022.09.30 |