BE/Java

중첩, 내부클래스

baek-dev 2025. 7. 21. 12:20

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