๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[Java] Static Nested Class์˜ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ ๋ฐ ์ƒ์„ฑ

์ถœ์ฒ˜

ChatGPT


Static Nested Class๋Š” ์ž๋ฐ”์—์„œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„๋กœ ์ •์˜๋œ ์ค‘์ฒฉ ํด๋ž˜์Šคdl๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.
 

 

Static Nested Class์˜ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ ๋ฐ ์ƒ์„ฑ ๊ณผ์ •

1. ํด๋ž˜์Šค ์ •์˜ (ํด๋ž˜์Šค ๋ ˆ๋ฒจ)

  • Static Nested Class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€์— ์ •์˜๋œ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„๋กœ ์ทจ๊ธ‰๋œ๋‹ค.
  • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด ํด๋ž˜์Šค์˜ ์ •์˜๋ฅผ ๋ณ„๋„์˜ .class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค. ์ด ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, OuterClass$StaticNestedClass.class์™€ ๊ฐ™์€ ํ˜•์‹์ด๋‹ค.

 

2. ํด๋ž˜์Šค ๋กœ๋”ฉ (ํด๋ž˜์Šค ๋ ˆ๋ฒจ)

  • JVM์ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ค‘์— ์ด ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋•Œ, ClassLoader๊ฐ€ ์ด ํด๋ž˜์Šค ํŒŒ์ผ์„ ์ฝ์–ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œํ•œ๋‹ค.
  • ๋ฉ”์†Œ๋“œ ์˜์—ญ์˜ ํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์—๋Š” ํด๋ž˜์Šค ์ด๋ฆ„, ์ƒ์† ์ •๋ณด, ๋ฉ”์†Œ๋“œ ๋ฐ ํ•„๋“œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • Static Nested Class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋˜๋ฏ€๋กœ, ์ด ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๊ด€๋ จ ์—†์ด ์œ ์ง€๋œ๋‹ค.

 

3. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ (์ธ์Šคํ„ด์Šค ๋ ˆ๋ฒจ)

  • Static Nested Class์˜ ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ์—†์ด๋„ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” Static Nested Class๊ฐ€ ์ •์  ๋ฉค๋ฒ„์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • Static Nested Class์˜ ์ธ์Šคํ„ด์Šค๋Š” ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค. ์ด ์ธ์Šคํ„ด์Šค๋Š” ์ผ๋ฐ˜์ ์ธ ์ž๋ฐ” ๊ฐ์ฒด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํž™ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.

 

4. ์™ธ๋ถ€ ํด๋ž˜์Šค์™€์˜ ์—ฐ๊ด€ (์ธ์Šคํ„ด์Šค ๋ ˆ๋ฒจ)

 

  • Static Nested Class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„์ด๋ฏ€๋กœ, ๋‚ด๋ถ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์™€ ์ง์ ‘์ ์ธ ์—ฐ๊ด€ ์—†์ด ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด ์ ‘๊ทผ์€ ์ •์  ์ปจํ…์ŠคํŠธ์—์„œ๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ์˜์กดํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

์˜ˆ์‹œ

public class OuterClass {
    private static String staticOuterField = "Static Outer Field";

    static class StaticNestedClass {
        void printValues() {
            System.out.println(staticOuterField); // ์ •์  ๋ฉค๋ฒ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
        }
    }

    public static void createNested() {
        StaticNestedClass nested = new StaticNestedClass(); // ํž™ ์˜์—ญ์— ์ €์žฅ
        nested.printValues();
    }
}

 

 

  • ํด๋ž˜์Šค ์ •์˜: StaticNestedClass๋Š” OuterClass์˜ ์ •์  ๋ฉค๋ฒ„๋กœ ์ •์˜๋œ๋‹ค.
  • ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ: StaticNestedClass์˜ ์ธ์Šคํ„ด์Šค๋Š” createNested ๋ฉ”์†Œ๋“œ์—์„œ ์ƒ์„ฑ๋˜๋ฉฐ, ์ด ์ธ์Šคํ„ด์Šค๋Š” ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
  • ์ฐธ์กฐ ์ €์žฅ: nested ์ธ์Šคํ„ด์Šค๋Š” ํž™์— ์ €์žฅ๋˜๊ณ , ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

ChatGPT ๊ธ€์˜ ์ถœ์ฒ˜
 

์ด ๊ณผ์ •์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ๋‹ค์Œ์˜ ์ž๋ฃŒ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  1. Oracle Java Documentation:
    • Java Language Specification (JLS): ์ž๋ฐ”์˜ ํด๋ž˜์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.
    • Java Virtual Machine Specification (JVMS): JVM์˜ ํด๋ž˜์Šค ๋กœ๋”ฉ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  2. Effective Java (by Joshua Bloch):
    • ์ž๋ฐ”์˜ ํด๋ž˜์Šค์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊นŠ์ด ์žˆ๋Š” ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ ๊ด€๋ จ๋œ ๋‚ด์šฉ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž๋ฃŒ๋“ค์€ Static Nested Class์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.