
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 ์ ๊ทผ ์ ์ด์ ์ฌ์ฉ.