Java의 중첩 클래스(Nested Class), 내부 클래스(Inner Class), 지역 클래스(Local Class) 정리
Java에서는 클래스 안에 또 다른 클래스를 선언할 수 있음. 이를 중첩 클래스(Nested Class) 라고 부름.
중첩 클래스는 코드의 구조를 더 논리적으로 구성할 수 있도록 도와줌.
1. 중첩 클래스란?
중첩 클래스(Nested Class) 는 다른 클래스 내부에 선언된 클래스를 의미함.
일반 클래스 외에, 클래스의 일부 기능을 내부 클래스로 구조화할 때 사용함.
중첩 클래스는 다음과 같이 크게 두 가지로 나뉨:
- 정적 중첩 클래스 (Static Nested Class)
- 비정적 중첩 클래스 → 내부 클래스(Inner Class)
내부 클래스는 다시 세분화됨:
분류 | static 여부 | 선언 위치 |
정적 중첩 클래스 | 있음 | 클래스 내부 |
내부 클래스 | 없음 | 클래스 내부 |
지역 클래스 | 없음 | 메서드, 블록 내부 |
익명 클래스 | 없음 | 메서드, 블록 내부 |
2. 정적 중첩 클래스 (Static Nested Class)
개념
- static 키워드로 선언된 중첩 클래스
- 외부 클래스의 인스턴스 없이도 사용 가능함
- 외부 클래스의 정적 멤버(static field/method) 에만 접근 가능함
예시
public class Outer {
static int staticValue = 100;
static class StaticNested {
void show() {
System.out.println("Static value = " + staticValue);
}
}
}
Outer.StaticNested nested = new Outer.StaticNested();
nested.show();
3. 내부 클래스 (Inner Class)
개념
- static 없이 외부 클래스 안에 선언된 클래스
- 외부 클래스의 모든 멤버(필드, 메서드 포함) 에 접근 가능함
- 내부 클래스는 반드시 외부 클래스의 인스턴스가 존재해야 생성 가능함
예시
public class Outer {
private String message = "Hello from Outer";
class Inner {
void printMessage() {
System.out.println(message);
}
}
}
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.printMessage();
4. 지역 클래스 (Local Class)
개념
- 메서드, 생성자, 초기화 블록 안에서 선언되는 클래스
- 해당 블록 내에서만 유효함 (지역 변수처럼 동작)
- 외부 클래스의 필드, 메서드에 접근 가능
- 메서드 내 지역 변수에 접근할 경우, 해당 변수는 final 또는 effectively final 이어야 함
예시
public class Outer {
void doTask() {
int taskId = 10; // final처럼 사용되어야 함
class LocalClass {
void print() {
System.out.println("Task ID: " + taskId);
}
}
LocalClass lc = new LocalClass();
lc.print();
}
}
5. 익명 클래스 (Anonymous Class)
개념
- 이름 없이 클래스를 선언하고 즉시 객체로 생성함
- 인터페이스나 추상 클래스의 구현이 필요할 때 자주 사용됨
- 지역 클래스와 비슷하지만 한 번만 사용되는 간단한 용도에 적합함
예시
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Running");
}
};
new Thread(r).start();
6. 네 가지 중첩 클래스 비교 요약
구분 | 선언 위치 | 외부 멤버 접근 | static 여부 | 사용 시기 |
정적 중첩 클래스 | 클래스 내부 | 정적 멤버만 접근 | static 있음 | 외부 인스턴스 없이 사용 시 |
내부 클래스 | 클래스 내부 | 모두 접근 가능 | static 없음 | 외부 인스턴스 필요 |
지역 클래스 | 메서드/블록 내부 | 일부 접근 가능 | static 없음 | 특정 메서드 내에서만 사용 |
익명 클래스 | 메서드/블록 내부 | 일부 접근 가능 | static 없음 | 일회성 인터페이스 구현 시 |
7. 정리
- 중첩 클래스는 코드의 논리적 구성을 돕고 캡슐화를 강화함
- 내부 클래스는 외부 인스턴스와 강하게 연결되므로 주의가 필요함
- 지역 클래스와 익명 클래스는 메서드 내 일시적 기능 구현에 적합함
- 정적 중첩 클래스는 외부 인스턴스에 의존하지 않아 독립적으로 사용 가능함
출처 : ChatGPT
'BE > Java' 카테고리의 다른 글
변수 정리 (3) | 2025.07.22 |
---|---|
LocalDate.parse(입력문자,포맷); (1) | 2025.05.29 |
date.format() (0) | 2025.05.28 |
DateTimeFormatter.ofPattern (0) | 2025.05.27 |
temporalAdjusters (0) | 2025.05.26 |