본문 바로가기
Backend

[java]이너클래스

by 당리 2025. 6. 1.

이너 클래스란 무엇인가?

자바에서는 클래스 내부에 또 다른 클래스를 정의할 수 있는데, 이를 이너 클래스(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