이너 클래스란 무엇인가?
자바에서는 클래스 내부에 또 다른 클래스를 정의할 수 있는데, 이를 이너 클래스(inner class) 또는 중첩 클래스(nested class)라고 한다.
말 그대로 외부 클래스 안에 정의된 내부 클래스를 의미한다.
이너 클래스는 외부 클래스와 밀접한 관계를 가지며, 외부 클래스의 필드나 메서드에 쉽게 접근할 수 있는 장점이 있다.
보통 외부 클래스의 보조 역할을 하거나, 특정 기능을 캡슐화할 때 사용된다.
이너 클래스의 종류
자바에서는 이너 클래스를 다음과 같이 네 가지로 분류할 수 있다.
종류설명
인스턴스 이너 클래스 | 외부 클래스의 인스턴스가 있어야 생성 가능한 클래스이다. |
정적(static) 이너 클래스 | 외부 클래스의 인스턴스 없이도 사용 가능한 정적 중첩 클래스이다. |
지역 이너 클래스 | 메서드 내부에서 정의되는 클래스이며, 해당 메서드 안에서만 사용된다. |
익명 이너 클래스 | 이름 없이 일시적으로 정의해서 사용하는 클래스이다. 주로 인터페이스 구현이나 이벤트 처리 시 사용된다. |
컴파일 시 $ 기호가 붙는 이유
이너 클래스가 포함된 자바 코드를 컴파일하면 .class 파일이 어떻게 생기는지 확인해보자.
예를 들어 다음과 같은 코드가 있다고 하자.
public class Outer {
class Inner {
void hello() {
System.out.println("hello");
}
}
}
Outer.class
Outer$Inner.class
여기서 Outer$Inner.class처럼 $ 기호가 붙는 이유는 다음과 같다.
- 자바의 바이트코드 구조에서는 클래스 내부에 정의된 클래스를 별도로 인식하기 어렵기 때문에, 컴파일러는 이너 클래스를 독립된 .class 파일로 생성한다.
- $ 기호는 외부 클래스와 내부 클래스를 구분하기 위한 관례적인 구분자로 사용된다.
- 즉, Outer$Inner.class는 Outer 클래스 안에 있는 Inner 클래스임을 의미한다.
'Backend' 카테고리의 다른 글
[JAVA] Broken pipe 에러란 ? 언제 발생하는가? (0) | 2025.06.01 |
---|---|
Spring AI 란? (0) | 2025.05.25 |
Spring Boot Admin ERR_TOO_MANY_REDIRECTS (0) | 2025.05.18 |
Nexus와 Maven 연동을 위한 settings.xml 설정법 (0) | 2025.05.18 |
Nexus 란? (2) | 2025.05.11 |