Java & Spring/Java

내부 클래스(Inner Class)

승주우에요 2026. 1. 7. 09:30

1. 내부 클래스란?

내부 클래스는 클래스 내부에 선언된 클래스이다. 

class Outer {
    class Inner {
    }
}
  • 외부 클래스와 논리적으로 강하게 묶인 클래스
  • 외부 클래스의 멤버에 접근 가능
  • 코드 구조를 더 명확하게 표현 가능

2. 내부 클래스의 종류

  1. 일반 내부 클래스 (Inner Class)
  2. static 내부 클래스 (Static Nested Class)
  3. 지역 내부 클래스 (Local Inner Class)
  4. 익명 내부 클래스 (Annonymous Inner Class)

3. 일반 내부 클래스 (Inner Class)

일반 내부 클래스는 외부 클래스의 인스턴스에 속하는 클래스이다.

특징

  • 외부 클래스 객체가 있어야 생성 가능
  • 외부 클래스의 모든 멤버 접근 가능 (private 포함)
class Outer {
    int x = 10;

    class Inner {
        void print() {
            System.out.println(x);
        }
    }
}
//객체 생성 > 외부 객체 없이는 생성 불가
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();

 

4. static 내부 클래스 (Static Nested Class)

static 내부 클래스는 외부 클래스 인스턴스와 무관한 내부 클래스이다.

특징

  • 외부 클래스 객체 없이 생성 가능
  • 외부 클래스의 static 멤버만 접근 가능
  • 일반 내부 클래스보다 독립성 높음
class Outer {
    static int x = 10;

    static class Inner {
        void print() {
            System.out.println(x);
        }
    }
}
//객체 생성 -> Outer의 static 멤버 이기 때문에 외부 객체 생성이 필요 없음!!
Outer Inner inner = new Outer.Inner();

 

5. 일반 내부 클래스 vs static 내부 클래스 

구분  일반 내부 클래스 static 내부 클래스
외부 인스턴스 접근 O X
static 멤버 접근 O O
외부 객체 필요 O X
독립성 낮음 높음

 

6. 지역 내부 클래스 (Local Inner Class)

지역 내부 클래스는 메서드 내부에서 선언된 클래스이다.

특징

  • 해당 메서드 내부에서만 사용 가능
  • 메서드의 지역 변수에 접근 가능
class Outer {
    void method() {
        class LocalInner {
            void print() {
                System.out.println("local inner");
            }
        }
        LocalInner inner = new LocalInner();
        inner.print();
    }
}

 

7. 익명 내부 클래스 (Annonymous Inner Class)

익명 내부 클래스는 이름이 없는 내부 클래스이다. 주로 인터페이스 구현이나 추상 클래스 상속을 즉석에서 처리할 때 사용한다.

특징

  • 클래스 이름 없음
  • 일회성 사용
  • 객체 생성과 동시에 정의
Runnable r = new Runnable() {
    @Override
    public void run() {
        System.out.println("run");
    }
};
// 구현 클래스가 익명으로 만들어진다는 의미

 

8. 내부 클래스 사용 목적

  • 외부 클래스와 강하게 연관된 로직을 표현할 때
  • 외부 클래스의 구현 세부사항을 숨기고 싶을 때
  • 코드 가독성을 높이고 싶을 때
  • 일반 내부 클래스 -> 외부 객체 상태에 의존
  • static 내부 클래스 -> 외부 객체와 독립

9. 정리

  • 내부 클래스는 클래스 안에 선언된 클래스이다
  • 일반 내부 클래스는 외부 객체에 의존한다
  • static 내부 클래스는 외부 객체 없이 생성 가능하다
  • 지역 내부 클래스는 메서드 내부에서만 사용된다
  • 익명 내부 클래스는 일회성 구현 클래스이다
  • static의 의미는 객체 소속이 아님이다

'Java & Spring > Java' 카테고리의 다른 글

예외 개념과 자바 예외 구조  (0) 2026.01.07
Enum의 개념과 사용  (0) 2026.01.07
추상화  (0) 2026.01.07
SOLID 원칙  (0) 2026.01.06
다형성 (Polymorphism)  (0) 2026.01.06