본문 바로가기
Dev/Java

『Java』 내부 클래스, 정적 중첩 클래스, 지역 클래스, 익명 클래스

by 세대교체 2024. 11. 24.

 

Java에서 중첩 클래스(Nested Class)다른 클래스 내부에 정의된 클래스를 의미한다.

 

 

중첩 클래스의 종류

중첩 클래스는 다음과 같이 네 가지로 분류된다.

  1. 내부 클래스(Inner Class)
  2. 정적 중첩 클래스(Static Nested Class)
  3. 지역 클래스(Method Local Inner Class)
  4. 익명 클래스(Anonymous Class)

각각의 중첩 클래스는 사용하는 방법과 특징이 다르므로 아래에서 자세히 살펴보자.

 

 

내부 클래스 (Inner Class)

내부 클래스외부 클래스의 멤버로 선언되는 클래스이며 Non-Static Nested Class라고도 한다.

  • 외부 클래스의 인스턴스에 종속적이다.
  • 외부 클래스의 모든 멤버(인스턴스 변수 및 메서드)에 접근할 수 있다.
  • 외부 클래스의 인스턴스를 생성한 후에 내부 클래스의 인스턴스를 생성할 수 있다.

 

내부 클래스는 외부 클래스의 인스턴스와 연결되어 있으므로 외부 클래스 없이 단독으로 사용할 수 없다.

 

 

정적 중첩 클래스 (Static Nested Class)

정적 중첩 클래스static 키워드로 선언된 중첩 클래스로 Static Nested Class라고 한다.

  • 외부 클래스의 정적 멤버처럼 동작한다.
  • 외부 클래스의 인스턴스 없이도 객체를 생성할 수 있다.
  • 외부 클래스의 정적 멤버에만 접근할 수 있으며 인스턴스 멤버에는 접근할 수 없다.

 

정적 중첩 클래스외부 클래스의 이름 공간에 속하지만 외부 클래스의 인스턴스와는 독립적으로 존재한다.

 

 

지역 클래스 (Method Local Inner Class )

지역 클래스메서드나 초기화 블록 내부에서 선언되는 클래스다.

  • 선언된 블록 내에서만 사용할 수 있다.
  • 접근 제어자나 static 키워드를 사용할 수 없다.
  • 외부 클래스의 멤버뿐만 아니라, 감싸고 있는 메서드의 로컬 변수에도 접근할 수 있다.
    • 단, 해당 변수는 final 또는 사실상 final이어야 한다.

 

지역 클래스메서드 내에서만 유효하므로 외부에서 접근할 수 없다.

 

 

익명 클래스 (Anonymous Class)

익명 클래스이름이 없는 클래스이며 주로 일회성으로 사용하기 위해 선언된다.

  • 클래스 선언과 동시에 인스턴스를 생성한다.
  • 클래스나 인터페이스를 구현하거나 확장할 때 사용한다.
  • 익명 클래스는 생성자를 가질 수 없으며 하나의 클래스나 인터페이스만 구현할 수 있다.
  • 외부 클래스나 메서드의 final 또는 사실상 final인 변수에 접근할 수 있다.