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

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

[Java] Member inner class์˜ ๋ฉ”๋ชจ๋ฆฌ ๋กœ๋“œ ๋ฐ ์ƒ์„ฑ

์ถœ์ฒ˜

ChatGPT


Member Inner Class๋Š” ์ž๋ฐ”์—์„œ ์ •์˜๋œ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ, ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋˜์–ด ์žˆ๋‹ค. 

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

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

 

  • Member Inner Class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€์— ์ •์˜๋œ๋‹ค. ์†Œ์Šค ์ฝ”๋“œ์—์„œ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์ •์˜๋œ ์ค‘์ฒฉ ํด๋ž˜์Šค๋‹ค.
  • ์ž๋ฐ” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด ํด๋ž˜์Šค๋ฅผ ๋ณ„๋„์˜ .class ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผํ•œ๋‹ค. ์ด .class ํŒŒ์ผ์˜ ์ด๋ฆ„์€ ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„๊ณผ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ด๋ฆ„์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๋งŒ๋“ค์–ด์ง„๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, OuterClass$InnerClass.class์™€ ๊ฐ™์€ ํ˜•์‹์ด๋‹ค.

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

 

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

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

 

  • Member Inner Class์˜ ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ํ›„์— ์ƒ์„ฑ๋œ๋‹ค. Member Inner Class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ด€๋˜๋ฏ€๋กœ, ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ํž™ ์˜์—ญ์— ์ƒ์„ฑ๋˜๋ฉฐ, ๊ทธ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐ๋œ๋‹ค.

 

4. ์ฐธ์กฐ ์ €์žฅ (์ธ์Šคํ„ด์Šค ๋ ˆ๋ฒจ)

 

  • ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค. ์ฆ‰, ๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ํ•„๋“œ์™€ ๋ฉ”์†Œ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ๋ฉค๋ฒ„๋กœ์„œ ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.

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

 

 

  • Member Inner Class๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ด€๋ฆฌ๋œ๋‹ค.
  • ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜๋  ๋•Œ, ๊ทธ์™€ ์—ฐ๊ฒฐ๋œ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋„ ํ•จ๊ป˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜๋  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ

public class OuterClass {
    private String outerField = "Outer Field";

    class MemberInnerClass {
        void printValues() {
            System.out.println(outerField); // ์ ‘๊ทผ ๊ฐ€๋Šฅ
        }
    }

    public void createInner() {
        MemberInnerClass inner = new MemberInnerClass(); // ํž™ ์˜์—ญ์— ์ €์žฅ
        inner.printValues();
    }
}

 

 

 

 

 

  • ํด๋ž˜์Šค ์ •์˜: MemberInnerClass๋Š” OuterClass์˜ ๋‚ด๋ถ€์— ์ •์˜๋œ๋‹ค.
  • ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ: MemberInnerClass์˜ ์ธ์Šคํ„ด์Šค๋Š” createInner ๋ฉ”์†Œ๋“œ์—์„œ ์ƒ์„ฑ๋˜๋ฉฐ, ์ด ์ธ์Šคํ„ด์Šค๋Š” ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.
  • ์ฐธ์กฐ ์ €์žฅ: inner ์ธ์Šคํ„ด์Šค๋Š” OuterClass์˜ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ด€๋˜์–ด ํž™์— ์ €์žฅ๋œ๋‹ค.

 


 

์ถœ์ฒ˜

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

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

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