1. ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ๊ฐœ๋…

์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ์•ˆ์— ํด๋ž˜์Šค๋ฅผ ์ค‘์ฒฉํ•˜์—ฌ ์ •์˜ํ•œ ํ˜•ํƒœ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ํด๋ž˜์Šค ๊ฐ„์˜ ๋…ผ๋ฆฌ์  ๊ทธ๋ฃนํ™”๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ํŠน์ • ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ๊ฒฝ์šฐ์— ํ™œ์šฉํ•œ๋‹ค.

 

- ์ค‘์ฒฉ(Nested) : ์œ„์น˜์ ์œผ๋กœ ํฌํ•จ๋˜์ง€๋งŒ ๊ตฌ์„ฑ ์š”์†Œ๋กœ์„œ์˜ ์˜๋ฏธ๋Š” ์—†๋‹ค.

- ๋‚ด๋ถ€(Inner) : ํฌํ•จ๋˜๋ฉฐ ๊ตฌ์„ฑ์š”์†Œ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

  1.1 ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์ฃผ์š” ๋ถ„๋ฅ˜

1.1.1 ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค(Static Nested Class)

- static ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์€ ์ค‘์ฒฉ ํด๋ž˜์Šค.

- ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๋…๋ฆฝ์ ์ด๋‹ค.

- ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

1.1.2 ๋‚ด๋ถ€ ํด๋ž˜์Šค(Inner Class)

- static ํ‚ค์›Œ๋“œ๊ฐ€ ์—†๋Š” ์ค‘์ฒฉ ํด๋ž˜์Šค.

- ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ฒฐ๋˜์–ด, ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ๋‹ค์‹œ ์„ธ๋ถ€์ ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

- ์ผ๋ฐ˜ ๋‚ด๋ถ€ ํด๋ž˜์Šค : ์™ธ๋ถ€ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„๋กœ ์ •์˜

- ์ง€์—ญ ํด๋ž˜์Šค : ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์ •์˜.

- ์ต๋ช… ํด๋ž˜์Šค : ์ด๋ฆ„์ด ์—†๋Š” ํด๋ž˜์Šค.


2. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค(Static Nested Class)

 

2.1 ์‚ฌ์šฉ๋ฒ•๊ณผ ํŠน์ง•

์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ static ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ์™€ ๋™์ผํ•œ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง„๋‹ค.

class Outer {
   static class Nested {
        void print() {
             System.out.println("์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ");
        }
   }
}

 

์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค ์ƒ์„ฑ:

Outer.Nested nested = new Outer.Nested();
nested.print();

 

ํŠน์ง• 

- ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„์— ์ ‘๊ทผ ๋ถˆ๊ฐ€.

- ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ •์  ๋ฉค๋ฒ„์—๋Š” ์ ‘๊ทผ ๊ฐ€๋Šฅ.

- ์™ธ๋ถ€ ํด๋ž˜์Šค์™€์˜ ๊ฐ•ํ•œ ์—ฐ๊ด€์„ฑ์ด ์—†๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ.

 

ํ™œ์šฉ

์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค๋Š” ๋ฐ”๊นฅ ํด๋ž˜์Šค์™€ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ด€๋ จ ์žˆ์ง€๋งŒ, ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘์ด ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์ ํ•ฉํ•˜๋‹ค. 

 


3. ๋‚ด๋ถ€ ํด๋ž˜์Šค(Inner Class)

 

3.1 ์‚ฌ์šฉ๋ฒ•๊ณผ ํŠน์ง•

๋‚ด๋ถ€ ํด๋ž˜์Šค๋Š” ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ์—ฐ๊ด€๋˜์–ด, ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„(์ธ์Šคํ„ด์Šค ๋ฐ ์ •์ )์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๋‹ค.

class Outer {
   class Inner {
       void print() {
          System.out.println("๋‚ด๋ถ€ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค. ");
       }
   }
}

 

๋‚ด๋ถ€ ํด๋ž˜์Šค ์ƒ์„ฑ:

Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.print();

 

ํŠน์ง•

- ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ๋ชจ๋“  ๋ฉค๋ฒ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅ(private ํฌํ•จ).

- ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„.

- ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ๊ฒฝ์šฐ ๋ฐ”๊นฅ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ํ•„์š”๋กœ ํ•จ.

 


4. ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค์™€ ๋‚ด๋ถ€ ํด๋ž˜์Šค์˜ ๋น„๊ต


5. ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ํ™œ์šฉ ์˜ˆ

 

์˜ˆ์ œ: ์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค

class Network {
   static class NetworkMessage {
       void printMessage(String message) {
           System.out.println(message);
       }
   }

}

 

์‚ฌ์šฉ:

Network.NetworkMessage message = new Network.NetworkMessage();
message.printMessage("์ •์  ์ค‘์ฒฉ ํด๋ž˜์Šค ๋ฉ”์‹œ์ง€.");

 

 

์˜ˆ์ œ : ๋‚ด๋ถ€ ํด๋ž˜์Šค

class Car {
   private String model = "Model X";
   
   class Engine {
      void start() {
      
      }
   }
}

 

์‚ฌ์šฉ:

Car car = new Car();
Car.Engine engine = car.new Engine();
engine.start();

6. ์บก์Аํ™”์™€ ๋…ผ๋ฆฌ์  ๊ทธ๋ฃนํ™”๋ฅผ ์œ„ํ•œ ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์žฅ์ 

 6.1 ์บก์Аํ™” : ์ค‘์ฒฉ ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์— ๋…ธ์ถœ๋  ํ•„์š”๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค์˜ ์‚ฌ์šฉ์„ ์ œํ•œ.

 6.2 ๋…ผ๋ฆฌ์  ๊ทธ๋ฃนํ™” : ํด๋ž˜์Šค ๊ฐ„ ๋…ผ๋ฆฌ์  ์—ฐ๊ฒฐ์„ ๊ฐ•ํ™”ํ•˜๊ณ , ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€ ๋ณด์ˆ˜๋ฅผ ๊ฐœ์„ .


7. ์ค‘์ฒฉ ํด๋ž˜์Šค ์‚ฌ์šฉ์‹œ ์ฃผ์˜์‚ฌํ•ญ

- ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ๊ฐ•ํ•˜๊ฒŒ ๊ฒฐํ•ฉ๋œ ๊ฒฝ์šฐ๋งŒ ๋‚ด๋ถ€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉ.

- ์ค‘์ฒฉ ํด๋ž˜์Šค์˜ ์—ญํ• ์ด ์™ธ๋ถ€ ํด๋ž˜์Šค์™€ ๋…๋ฆฝ์ ์ด๋ผ๋ฉด, ๋ณ„๋„์˜ ํด๋ž˜์Šค๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ํ•ฉ.

- ์บก์Аํ™”๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ•„์š” ์‹œ private ์ ‘๊ทผ ์ œ์–ด์ž ์‚ฌ์šฉ.

 

+ Recent posts