Language 중급

내부 클래스의 정적 멤버

정적 중첩 클래스 없이 내부 클래스에 정적 멤버를 정의합니다.

✕ Java 8
class Library {
    // Must be static nested class
    static class Book {
        static int globalBookCount;

        Book() {
            globalBookCount++;
        }
    }
}

// Usage
var book = new Library.Book();
✓ Java 16+
class Library {
    // Can be inner class with statics
    class Book {
        static int globalBookCount;

        Book() {
            Book.globalBookCount++;
        }
    }
}

// Usage
var lib = new Library();
var book = lib.new Book();
이 코드에 문제가 있나요? 알려주세요.
🔓

더 많은 유연성

내부 클래스는 이제 필요할 때 정적 멤버를 가질 수 있습니다.

🧩

공유 상태

내부 클래스의 인스턴스 간에 공유 상태를 추적합니다.

📐

설계 자유

단 하나의 정적 필드를 위해 정적 중첩 클래스로 승격할 필요가 없습니다.

이전 방식
정적 중첩 클래스 사용 필수
모던 방식
내부 클래스의 정적 멤버
JDK 버전
16
난이도
중급
내부 클래스의 정적 멤버
사용 가능

JDK 16 (2021년 3월) 이후 널리 사용 가능

Java 16 이전에는 정적 중첩 클래스만 정적 멤버를 포함할 수 있었습니다. 내부(비정적) 클래스는 둘러싸는 인스턴스가 필요하므로 정적 멤버를 가질 수 없었습니다. Java 16은 이 제한을 완화하여 내부 클래스에서 정적 필드, 메서드 등을 허용합니다.

공유 𝕏 🦋 in