내부 클래스는 말 그대로 class 안에 또 다른 class를 넣는 것이다.
클래스 내부에 구현한 중첩된 클래스이며,
클래스 내부에서 사용하기 위해 선언하고 구현하는 클래스이다.
주로 외부 클래스 생성자에서 내부 클래스를 생성한다.
class A { // 외부 클래스
class B { } // 내부 클래스
}
내부 클래스를 만들면 객체 생성 없이도 외부 클래스(class A)의 멤버에 쉽게 접근이 가능하다.
또한 코드의 복잡성을 줄일 수 있다.
내부 클래스에는 아래와 같은 종류가 있다.
class Outer {
class InstanceInner {} // 인스턴스 내부 클래스
static class StaticInner {} // 스태틱 내부 클래스
void myMethod() {
class LocalInner {} // 지역 내부 클래스
}
}
1. 인스턴스 내부 클래스 (instance class)
2. 스태틱 내부 클래스 (static class)
3. 지역 내부 클래스 (local class)
4. 익명 내부 클래스 (anonymous class)
: 클래스의선언과 객체의 생성을 동시에 하는 이름없는 클래스이다. 일회용으로 사용한다.
각각은 인스턴스 변수, 스태틱 변수, 지역 변수와 같은 특징을 가진다.
내부 클래스의 제어자는 변수에 사용 가능한 제어자와 동일하다.
static 클래스만 static 멤버를 정의할 수 있다.
static 멤버는 객체 생성 없이 사용 가능해야 하므로, 인스턴스 내부 클래스에서는 사용할 수 없기 때문이다.
지역 내부 클래스 안에 있는 static 상수는 메서드 내에서만 사용 가능하다.
내부 클래스에서는 외부 클래스의 private 멤버도 접근 가능하다.
외부 클래스의 지역변수는 final이 붙은 변수(상수)만 접근 가능하다. (JDK 1.8부터는 final이 안 붙어도 접근 가능하다.)
익명 클래스는 말 그대로 이름이 없는 일회용 클래스이다.
클래스 정의와 객체 생성을 동시에 한다.
new 조상클래스이름() {
// 멤버 선언
}
// 또는
new 구현인터페이스이름() {
// 멤버 선언
}
(출처: 유튜브 남궁성의 정석코딩)
'Java' 카테고리의 다른 글
[Java] spring과 spring boot의 차이는 무엇일까? (0) | 2021.09.07 |
---|---|
[Java] 람다식 (Lambda Expression, 람다 표현식) (0) | 2021.08.19 |
[Java] 컬렉션 프레임워크 (Collections Framework) (0) | 2021.08.18 |
[Java] Generics란? 지네릭 프로그래밍(지네릭스) (0) | 2021.08.18 |
[Java] Object 클래스, String 클래스, Wrapper(래퍼) 클래스 (0) | 2021.08.18 |