** ๐1๋จ๊ณ: ๋ด๋ถ ํด๋์ค(Inner Class)๋?**
โ 1. ๋ด๋ถ ํด๋์ค์ ๊ฐ๋
- *๋ด๋ถ ํด๋์ค(Inner Class)๋ **๋ค๋ฅธ ํด๋์ค ๋ด๋ถ์ ์ ์๋ ํด๋์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
์๋ฐ์์๋ ์ฝ๋์ ๋ ผ๋ฆฌ์ ์ธ ๊ทธ๋ฃนํ, ์บก์ํ ๊ฐํ, ๊ฐ๋ ์ฑ ํฅ์์ ์ํด ๋ด๋ถ ํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๊ฐํ ์ฐ๊ด์ฑ์ ๊ฐ์ง๋ฉฐ,
ํน์ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ์ ์ฉํ๊ฒ ํ์ฉ๋ฉ๋๋ค.
โ 2. ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์
์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๊น์?
๋ค์๊ณผ ๊ฐ์ ์ฅ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ ์ด์ | ์ค๋ช |
---|---|
์บก์ํ(Encapsulation) ๊ฐํ | ์ธ๋ถ ํด๋์ค์์๋ง ์ฌ์ฉ๋๋๋ก ์จ๊ธธ ์ ์์ |
์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์ | ๊ด๋ จ๋ ์ฝ๋๋ค์ ํ ๊ณณ์ ๋ชจ์ ์ ์ง๋ณด์ ์ฉ์ด |
์ธ๋ถ ํด๋์ค์์ ๊ฐํ ๊ฒฐํฉ | ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ(๋ณ์, ๋ฉ์๋)์ ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ |
์ด๋ฆ ์ถฉ๋ ๋ฐฉ์ง | ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๊ด๋ จ๋ ํน์ ์์ ์๋ง ์ฌ์ฉ๋๋ฏ๋ก, ๋ถํ์ํ ๋ค์ด๋ฐ ์ถฉ๋์ ๋ฐฉ์งํ ์ ์์ |
์์ 1: ๋ด๋ถ ํด๋์ค ๊ธฐ๋ณธ ๊ตฌ์กฐ
class OuterClass { // ์ธ๋ถ ํด๋์ค
class InnerClass { // ๋ด๋ถ ํด๋์ค
void display() {
System.out.println("๋ด๋ถ ํด๋์ค ํธ์ถ!");
}
}
}
โ 3. ๋ด๋ถ ํด๋์ค์ ์ฃผ์ ํน์ง
๐ ๋ด๋ถ ํด๋์ค๋ ์ผ๋ฐ์ ์ธ ํด๋์ค์ ๋ค๋ฅด๊ฒ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋๋ค.
- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ(๋ณ์, ๋ฉ์๋)์ ์ ๊ทผํ ์ ์์
- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค ์์ด ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ ์ ์์
- ๋ด๋ถ ํด๋์ค ๋ด๋ถ์์
this
๋ ๋ด๋ถ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ,OuterClass.this
๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ํด๋์ค๋ฅผ ์ฐธ์กฐ ๊ฐ๋ฅ
์์ 2: ๋ด๋ถ ํด๋์ค์์ ์ธ๋ถ ํด๋์ค ๋ฉค๋ฒ ์ ๊ทผํ๊ธฐ
class Outer {
private String message = "Hello from Outer Class!";
class Inner {
void printMessage() {
System.out.println(message); // ๋ด๋ถ ํด๋์ค์์ ์ธ๋ถ ํด๋์ค ๋ฉค๋ฒ ์ ๊ทผ ๊ฐ๋ฅ
}
}
}
โ 4. ๋ด๋ถ ํด๋์ค์ ์ข ๋ฅ
์๋ฐ์ ๋ด๋ถ ํด๋์ค๋ 4๊ฐ์ง ์ข ๋ฅ๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
๋ด๋ถ ํด๋์ค ์ข ๋ฅ | ์ค๋ช | ์ฃผ์ ํน์ง |
---|---|---|
์ธ์คํด์ค ๋ด๋ถ ํด๋์ค | ์ธ๋ถ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ | ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์ & ๋ฉ์๋์ ์ ๊ทผ ๊ฐ๋ฅ |
์ ์ (static) ๋ด๋ถ ํด๋์ค | ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด ์ฌ์ฉ ๊ฐ๋ฅ | static ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉฐ, ์ธ๋ถ ํด๋์ค์ static ๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ |
์ง์ญ(Local) ๋ด๋ถ ํด๋์ค | ํน์ ๋ฉ์๋ ๋ด๋ถ์์๋ง ์ ์ธ & ์ฌ์ฉ ๊ฐ๋ฅ | ๋ฉ์๋๊ฐ ๋๋๋ฉด ํจ๊ป ์๋ฉธ๋จ |
์ต๋ช (Anonymous) ๋ด๋ถ ํด๋์ค | ์ด๋ฆ์ด ์๋ ์ผํ์ฑ ํด๋์ค | ์ฃผ๋ก ์ธํฐํ์ด์ค ๋๋ ์ถ์ ํด๋์ค ๊ตฌํ์ ์ฌ์ฉ๋จ |
โ 5. ๋ด๋ถ ํด๋์ค ์ฌ์ฉ ์ ์ฃผ์ํ ์
- ๋ด๋ถ ํด๋์ค๊ฐ ๋ถํ์ํ๊ฒ ๋ง์ผ๋ฉด ์ฝ๋๊ฐ ๋ณต์กํด์ง ์ ์์
- ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ด๋ถ ํด๋์ค์ ๋ผ์ดํ์ฌ์ดํด์ ๊ณ ๋ คํด์ผ ํจ
- static ๋ด๋ถ ํด๋์ค์ ์ผ๋ฐ ๋ด๋ถ ํด๋์ค์ ์ฐจ์ด๋ฅผ ๋ฐ๋์ ์ดํดํด์ผ ํจ
๐ 1๋จ๊ณ ์ ๋ฆฌ
โ ๋ด๋ถ ํด๋์ค๋ ํด๋์ค ๋ด๋ถ์์ ์ ์๋ ๋ ๋ค๋ฅธ ํด๋์ค์ด๋ค.
โ ์ฝ๋ ๊ฐ๋ ์ฑ๊ณผ ์บก์ํ๋ฅผ ๊ฐํํ๋ ์ญํ ์ ํ๋ค.
โ ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ(๋ณ์, ๋ฉ์๋)์ ์์ ๋กญ๊ฒ ์ ๊ทผํ ์ ์๋ค.
โ ๋ด๋ถ ํด๋์ค๋ ํฌ๊ฒ 4๊ฐ์ง ์ข ๋ฅ(์ธ์คํด์ค, ์ ์ , ์ง์ญ, ์ต๋ช )๋ก ๋๋๋ค.
์ด์ 2๋จ๊ณ์์๋ ๋ด๋ถ ํด๋์ค์ ๊ตฌ์ฒด์ ์ธ ์ข ๋ฅ์ ์ฌ์ฉ๋ฒ์ ํ์ตํฉ๋๋ค. ๐
๐ 2๋จ๊ณ: ๋ด๋ถ ํด๋์ค์ ์ข ๋ฅ์ ์ฌ์ฉ๋ฒ
์๋ฐ์ ๋ด๋ถ ํด๋์ค๋ 4๊ฐ์ง ์ข ๋ฅ๋ก ๋๋๋ฉฐ, ๊ฐ๊ฐ์ ํน์ง๊ณผ ์ฌ์ฉ๋ฒ์ด ๋ค๋ฆ ๋๋ค.
์ด ๋จ๊ณ์์๋ ๊ฐ ๋ด๋ถ ํด๋์ค์ ๊ฐ๋ , ํน์ง, ์ฝ๋ ์์ ๋ฅผ ํตํด ์ฐจ์ด์ ์ ๋ช ํํ ์ดํดํฉ๋๋ค.
โ 1. ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค (Instance Inner Class)
โ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ์ฌ์ฉํ ์ ์๋ ๋ด๋ถ ํด๋์คโ
๐ ํน์ง
- ์ธ๋ถ ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ(๋ณ์, ๋ฉ์๋)์ ์ ๊ทผ ๊ฐ๋ฅ
- ์ธ๋ถ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ๋จผ์ ์์ฑ๋์ด์ผ ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ณดํต ์ธ๋ถ ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ณด์กฐํ๋ ์ญํ
๐ ์ฝ๋ ์์
class OuterClass {
private String message = "Hello from Outer!";
// ๐ ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค
class InnerClass {
void display() {
System.out.println(message); // ์ธ๋ถ ํด๋์ค์ private ๋ฉค๋ฒ ์ ๊ทผ ๊ฐ๋ฅ
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass(); // ์ธ๋ถ ํด๋์ค ๊ฐ์ฒด ์์ฑ
OuterClass.InnerClass inner = outer.new InnerClass(); // ๋ด๋ถ ํด๋์ค ๊ฐ์ฒด ์์ฑ
inner.display(); // ์ถ๋ ฅ: Hello from Outer!
}
}
โ 2. ์ ์ (static) ๋ด๋ถ ํด๋์ค (Static Inner Class)
โ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด๋ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ด๋ถ ํด๋์คโ
๐ ํน์ง
static
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ์ ์์
- ์ธ๋ถ ํด๋์ค์
static
๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ - ์ฃผ๋ก ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ง ์์ ๋ ๋ฆฝ์ ์ธ ์ ํธ๋ฆฌํฐ ์ญํ
๐ ์ฝ๋ ์์
class OuterClass {
private static String staticMessage = "Hello from Static Inner!";
// ๐ ์ ์ ๋ด๋ถ ํด๋์ค
static class StaticInner {
void display() {
System.out.println(staticMessage); // static ๋ฉค๋ฒ ์ ๊ทผ ๊ฐ๋ฅ
}
}
}
public class Main {
public static void main(String[] args) {
OuterClass.StaticInner inner = new OuterClass.StaticInner(); // ์ง์ ์์ฑ ๊ฐ๋ฅ
inner.display(); // ์ถ๋ ฅ: Hello from Static Inner!
}
}
โ 3. ์ง์ญ(Local) ๋ด๋ถ ํด๋์ค
โ๋ฉ์๋ ๋ด๋ถ์์ ์ ์ธ๋๋ฉฐ, ํด๋น ๋ฉ์๋๊ฐ ์คํ๋ ๋๋ง ์กด์ฌํ๋ ํด๋์คโ
๐ ํน์ง
- ํน์ ๋ฉ์๋ ์์์๋ง ์ ์ธ & ์ฌ์ฉ ๊ฐ๋ฅ
- ๋ฉ์๋ ์คํ์ด ๋๋๋ฉด ์ง์ญ ๋ด๋ถ ํด๋์ค๋ ์ฌ๋ผ์ง
- ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์ & ๋ฉ์๋์ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, ๋ฉ์๋์
final
์ง์ญ ๋ณ์๋ง ์ ๊ทผ ๊ฐ๋ฅ(Java 8๋ถํฐ๋ ์๋ฌต์ final
ํ์ฉ)
๐ ์ฝ๋ ์์
class OuterClass {
void outerMethod() {
int localVar = 100; // Java 8 ์ดํ ์๋ฌต์ ์ผ๋ก final
// ๐ ์ง์ญ ๋ด๋ถ ํด๋์ค (๋ฉ์๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋จ)
class LocalInner {
void display() {
System.out.println("Local variable: " + localVar);
}
}
LocalInner localInner = new LocalInner();
localInner.display(); // ์ถ๋ ฅ: Local variable: 100
}
}
public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.outerMethod();
}
}
โ 4. ์ต๋ช (Anonymous) ๋ด๋ถ ํด๋์ค
โ์ด๋ฆ ์์ด ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ ํด๋์คโ
๐ ํน์ง
- ํด๋์ค ์ ์ธ๊ณผ ๊ฐ์ฒด ์์ฑ์ ๋์์ ์ํ
- ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ๊ตฌํ์ ์ฌ์ฉ๋จ
- ์ค์ง ํ ๋ฒ๋ง ์ฌ์ฉํ ํด๋์ค์ผ ๊ฒฝ์ฐ ์ ์ฉํจ
๐ ์ฝ๋ ์์ (์ธํฐํ์ด์ค ๊ตฌํ ์์)
interface Greeting {
void sayHello();
}
public class Main {
public static void main(String[] args) {
// ๐ ์ต๋ช
๋ด๋ถ ํด๋์ค ์ฌ์ฉ (์ธํฐํ์ด์ค ๊ตฌํ)
Greeting greeting = new Greeting() {
@Override
public void sayHello() {
System.out.println("Hello from Anonymous Inner Class!");
}
};
greeting.sayHello(); // ์ถ๋ ฅ: Hello from Anonymous Inner Class!
}
}
๐ 2๋จ๊ณ ์ ๋ฆฌ
๋ด๋ถ ํด๋์ค ์ข ๋ฅ | ํน์ง | ์ฌ์ฉ ์์ |
---|---|---|
์ธ์คํด์ค ๋ด๋ถ ํด๋์ค | ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ํ์ | ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅ |
์ ์ (static) ๋ด๋ถ ํด๋์ค | ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด ์ฌ์ฉ ๊ฐ๋ฅ | static ๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ |
์ง์ญ(Local) ๋ด๋ถ ํด๋์ค | ํน์ ๋ฉ์๋ ๋ด์์๋ง ์ ์ธ & ์ฌ์ฉ | ๋ฉ์๋ ์ข ๋ฃ ์ ํจ๊ป ์๋ฉธ |
์ต๋ช (Anonymous) ๋ด๋ถ ํด๋์ค | ์ด๋ฆ ์์ด ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ ํด๋์ค | ์ธํฐํ์ด์ค ๋๋ ์ถ์ ํด๋์ค ๊ตฌํ |
##
๐ 3๋จ๊ณ: ๋ด๋ถ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ & this
, super
ํค์๋ ํ์ฉ
๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๊ธฐ ๋๋ฌธ์
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ this
, super
ํค์๋๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด ๋จ๊ณ์์๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ด๋ถ ํด๋์ค๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง
๊ทธ๋ฆฌ๊ณ this, super ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ํด๋์ค์ ๋ด๋ถ ํด๋์ค๋ฅผ ๊ตฌ๋ถํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋๋ค.
โ 1. ๋ด๋ถ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (Heap & Stack)
์๋ฐ์์ ๊ฐ์ฒด๋ ํ(Heap)๊ณผ ์คํ(Stack)์ ์ ์ฅ๋ฉ๋๋ค.
๋ด๋ถ ํด๋์ค๊ฐ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฐ์น๋๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
๐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ๊ฐ๋
- ์ธ๋ถ ํด๋์ค(OuterClass)๋ ํ(Heap) ์์ญ์ ์ ์ฅ๋จ
- ๋ด๋ถ ํด๋์ค(InnerClass)๋ ํ(Heap) ์์ญ์ ์ ์ฅ๋จ
- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ์ฐธ์กฐ๋ฅผ ์๋ฌต์ ์ผ๋ก ํฌํจํ๊ณ ์์
- ์ง์ญ(Local) ๋ด๋ถ ํด๋์ค์ ์ต๋ช (Anonymous) ๋ด๋ถ ํด๋์ค๋ ๋ฉ์๋ ์คํ ์ ์์ฑ๋๋ฉฐ, ์ข ๋ฃ ์ ์๋ฉธ๋จ
โ 2. ๋ด๋ถ ํด๋์ค ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ ์์
๋ค์ ์ฝ๋์์ ์ธ๋ถ ํด๋์ค์ ๋ด๋ถ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ป๊ฒ ์ ์ฅ๋๋์ง ๋ถ์ํด๋ณด๊ฒ ์ต๋๋ค.
class Outer {
private String message = "Hello from Outer!";
class Inner {
void display() {
System.out.println(message);
}
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer(); // ํ(Heap)์ ์ ์ฅ๋จ
Outer.Inner inner = outer.new Inner(); // ํ(Heap)์ ์ ์ฅ๋จ
inner.display();
}
}
๐ ๋ฉ๋ชจ๋ฆฌ ํ๋ฆ
Outer outer = new Outer();
outer
๊ฐ์ฒด๊ฐ ํ(Heap)์ ์์ฑ๋จ
Outer.Inner inner = outer.new Inner();
inner
๊ฐ์ฒด๊ฐ ํ(Heap)์ ์์ฑ๋จ- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค๋ฅผ ์ฐธ์กฐ(
Outer.this
)ํจ
inner.display();
์คํ- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์
message
๋ณ์์ ์ ๊ทผ ๊ฐ๋ฅ - ์ธ๋ถ ํด๋์ค ๊ฐ์ฒด(
Outer.this
)๋ฅผ ์๋ฌต์ ์ผ๋ก ์ ์ฅํ๊ณ ์์
- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์
โ
3. this
ํค์๋๋ฅผ ํ์ฉํ ๋ด๋ถ & ์ธ๋ถ ํด๋์ค ๊ตฌ๋ถ
๋ด๋ถ ํด๋์ค์ ์ธ๋ถ ํด๋์ค์๋ ๋ชจ๋ this
ํค์๋๊ฐ ์กด์ฌํฉ๋๋ค.
๋๋๋ก ๋ด๋ถ ํด๋์ค์ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์๋ฅผ ๊ตฌ๋ถํด์ผ ํ ๋
๋ค์๊ณผ ๊ฐ์ด this
๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.
class Outer {
String message = "Outer Message";
class Inner {
String message = "Inner Message";
void display() {
System.out.println(message); // ๋ด๋ถ ํด๋์ค์ message
System.out.println(this.message); // ๋ด๋ถ ํด๋์ค์ message
System.out.println(Outer.this.message); // ์ธ๋ถ ํด๋์ค์ message
}
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.display();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
Inner Message
Inner Message
Outer Message
๐ก ํต์ฌ ํฌ์ธํธ
this.message
โ ๋ด๋ถ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์Outer.this.message
โ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ ๋ณ์
โ
4. super
ํค์๋๋ฅผ ํ์ฉํ ์์ ๊ด๊ณ์์์ ๋ด๋ถ ํด๋์ค ์ ๊ทผ
๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ฒฝ์ฐ,
super
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ํด๋์ค์ ๋ฉ์๋๋ ๋ณ์์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๐ ์ฝ๋ ์์
class Outer {
void show() {
System.out.println("Outer Class Method");
}
class Inner extends Outer {
void show() {
super.show(); // ์ธ๋ถ ํด๋์ค์ show() ํธ์ถ
System.out.println("Inner Class Method");
}
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.show();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
Outer Class Method
Inner Class Method
๐ก ํต์ฌ ํฌ์ธํธ
super.show();
๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถ ๊ฐ๋ฅ- ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค๋ฅผ ์์๋ฐ์ ์๋ ์์
๐ 3๋จ๊ณ ์ ๋ฆฌ
โ
๋ด๋ถ ํด๋์ค๋ ๋ฉ๋ชจ๋ฆฌ์์ ์ธ๋ถ ํด๋์ค๋ฅผ ์๋ฌต์ ์ผ๋ก ์ฐธ์กฐํ๊ณ ์์ (Outer.this
ํฌํจ)
โ
this
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๋ถ & ์ธ๋ถ ํด๋์ค์ ๋ณ์๋ฅผ ๊ตฌ๋ถํ ์ ์์
โ
super
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ด๋ถ ํด๋์ค์์ ์ธ๋ถ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์์
โ ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ์ ์ ๊ทผ ๊ฐ๋ฅํ์ง๋ง, static ๋ด๋ถ ํด๋์ค๋ static ๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ
๐ 4๋จ๊ณ: ๋ด๋ถ ํด๋์ค์ ์ค์ ํ์ฉ ์์
์ด์ ๊น์ง ๋ด๋ถ ํด๋์ค์ ๊ฐ๋ ๊ณผ ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ ๋ค๋ฉด,
์ด๋ฒ ๋จ๊ณ์์๋ ์ค๋ฌด์์ ๋ด๋ถ ํด๋์ค๊ฐ ์ด๋ป๊ฒ ํ์ฉ๋๋์ง ์ดํด๋ด ๋๋ค.
์ค์ ํ๋ก์ ํธ์์ ๋ด๋ถ ํด๋์ค๊ฐ ์ ์ ์ฉํ์ง, ์ธ์ ์ฌ์ฉํ๋ฉด ์ข์์ง๋ฅผ ์ดํดํ๋ ๊ฒ์ด ๋ชฉํ์ ๋๋ค.
โ 1. ๋ด๋ถ ํด๋์ค์ ์ฃผ์ ํ์ฉ ์์
๋ด๋ถ ํด๋์ค๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ด๋ถ ํด๋์ค ํ์ฉ ์ฌ๋ก | ์ค๋ช |
---|---|
GUI ํ๋ก๊ทธ๋๋ฐ (์ด๋ฒคํธ ์ฒ๋ฆฌ) | ๋ฒํผ ํด๋ฆญ ๊ฐ์ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ์ฝ๊ฒ ๊ตฌํ |
์ปฌ๋ ์ ํด๋์ค์ ๋ฐ๋ณต์ (Iterator ๊ตฌํ) | Iterator ๋ฅผ ๋ด๋ถ ํด๋์ค๋ก ๋ง๋ค์ด ์ฌ์ฉ |
์บก์ํ ๊ฐํ & ๊ฐ๋ ์ฑ ํฅ์ | ํน์ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋ ๊ฒฝ์ฐ ์ฝ๋ ์ ๋ฆฌ |
๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ (Runnable) | ๊ฐ๋จํ ์ค๋ ๋๋ฅผ ๋ง๋ค ๋ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ก ๊ตฌํ |
โ 2. GUI ํ๋ก๊ทธ๋๋ฐ์์ ๋ด๋ถ ํด๋์ค ํ์ฉ
โ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๋ด๋ถ ํด๋์ค๋ก ๊ตฌํํ๋ฉด ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค!โ
๐ ์์ : ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class GUIExample {
private JFrame frame;
private JButton button;
GUIExample() {
frame = new JFrame("๋ด๋ถ ํด๋์ค ์์ ");
button = new JButton("ํด๋ฆญํ์ธ์!");
// ๐ ๋ด๋ถ ํด๋์ค ํ์ฉ: ๋ฒํผ ์ด๋ฒคํธ ์ฒ๋ฆฌ
button.addActionListener(new ButtonClickListener());
frame.add(button);
frame.setSize(300, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
// ๐ ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค: ๋ฒํผ ํด๋ฆญ ์ด๋ฒคํธ ์ฒ๋ฆฌ
class ButtonClickListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("๋ฒํผ์ด ํด๋ฆญ๋์์ต๋๋ค!");
}
}
public static void main(String[] args) {
new GUIExample();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
- ๋ฒํผ์ ํด๋ฆญํ๋ฉด โ๋ฒํผ์ด ํด๋ฆญ๋์์ต๋๋ค!โ ์ถ๋ ฅ
๐ก ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ด์ :
ButtonClickListener
๊ฐGUIExample
๊ณผ ๊ฐํ ์ฐ๊ด์ฑ์ด ์์- ์ธ๋ถ์์ ์ฌ์ฉํ ํ์๊ฐ ์๋ ํด๋์ค์ด๋ฏ๋ก ๋ด๋ถ ํด๋์ค๋ก ์ ์ธํ์ฌ ์บก์ํ ๊ฐํ
โ
3. ์ปฌ๋ ์
ํ๋ ์์ํฌ์ Iterator
ํจํด
โ๋ด๋ถ ํด๋์ค๋ ์ปฌ๋ ์ ํ๋ ์์ํฌ์์๋ ํ์ฉ๋๋ค!โ
ArrayList
๊ฐ์ ์ปฌ๋ ์
ํด๋์ค๋ ๋ฐ๋ณต์(Iterator)๋ฅผ ๋ด๋ถ ํด๋์ค๋ก ๊ตฌํํฉ๋๋ค.
์ด์ ๋ ๋ฐ๋ณต์๋ ์ปฌ๋ ์ ๊ณผ ๊ฐํ ์ฐ๊ด์ฑ์ ๊ฐ์ง๋ฉฐ, ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๐ ์์ : ์ง์ Iterator
๊ตฌํํ๊ธฐ
import java.util.Iterator;
class CustomList<T> implements Iterable<T> {
private T[] items;
private int size;
public CustomList(T[] items) {
this.items = items;
this.size = items.length;
}
@Override
public Iterator<T> iterator() {
return new CustomIterator();
}
// ๐ ๋ด๋ถ ํด๋์ค: ๋ฐ๋ณต์ ๊ตฌํ
private class CustomIterator implements Iterator<T> {
private int index = 0;
@Override
public boolean hasNext() {
return index < size;
}
@Override
public T next() {
return items[index++];
}
}
}
public class Main {
public static void main(String[] args) {
CustomList<String> list = new CustomList<>(new String[]{"A", "B", "C"});
for (String item : list) {
System.out.println(item);
}
}
}
๐ ์คํ ๊ฒฐ๊ณผ
A
B
C
๐ก ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ด์ :
CustomIterator
๋CustomList
์ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋ ๊ธฐ๋ฅ์ด๋ฏ๋ก,- ์ธ๋ถ์์
Iterator
๋ฅผ ์ง์ ์กฐ์ํ์ง ์๋๋ก ๋ด๋ถ ํด๋์ค๋ก ๊ตฌํํ์ฌ ์บก์ํ
โ 4. ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์ ์ต๋ช ๋ด๋ถ ํด๋์ค ํ์ฉ
โ๊ฐ๋จํ ์ค๋ ๋ ์คํ์ ์ํด ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค!โ
๐ ์์ : Runnable
์ ์ต๋ช
๋ด๋ถ ํด๋์ค๋ก ๊ตฌํ
public class AnonymousThreadExample {
public static void main(String[] args) {
// ๐ ์ต๋ช
๋ด๋ถ ํด๋์ค ํ์ฉ: Runnable ๊ตฌํ
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println("์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ ์ค: " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
thread.start();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ ์ค: 1
์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ ์ค: 2
์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ ์ค: 3
์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ ์ค: 4
์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ ์ค: 5
๐ก ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ด์ :
Runnable
์ ๋ณ๋์ ํ์ผ์ด๋ ํด๋์ค ์์ด ํ ๋ฒ๋ง ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ์ ์ฉ- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง๊ณ ๊ฐ๋ ์ฑ์ด ์ข์์ง
๐ 4๋จ๊ณ ์ ๋ฆฌ
โ ๋ด๋ถ ํด๋์ค๋ ์ค์ ๊ฐ๋ฐ์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ๋ํ์ ์ธ ํ์ฉ ์ฌ๋ก๊ฐ ์๋ค.
โ GUI ํ๋ก๊ทธ๋๋ฐ์์๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ๋ด๋ถ ํด๋์ค๋ก ๊ตฌํํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ธ๋ค.
โ
์ปฌ๋ ์
ํ๋ ์์ํฌ์์๋ Iterator
๋ฅผ ๋ด๋ถ ํด๋์ค๋ก ๊ตฌํํ์ฌ ์บก์ํ๋ฅผ ๊ฐํํ๋ค.
โ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ ๋ค.
##
๐ 5๋จ๊ณ: ๋ด๋ถ ํด๋์ค์ ์ฅ์ ๊ณผ ๋จ์ & ์ค๋ฌด์์์ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ๋ฒ
๋ด๋ถ ํด๋์ค๋ ์ฝ๋์ ์บก์ํ, ๊ฐ๋ ์ฑ ํฅ์, ํธ๋ฆฌํ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฑ์ ์ฅ์ ์ด ์์ง๋ง,
์๋ชป ์ฌ์ฉํ๋ฉด ์ฝ๋ ๋ณต์ก๋ ์ฆ๊ฐ, ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค.
์ด๋ฒ ๋จ๊ณ์์๋ ๋ด๋ถ ํด๋์ค์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ช ํํ ์ดํดํ๊ณ ,
์ค๋ฌด์์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค. ๐
โ 1. ๋ด๋ถ ํด๋์ค์ ์ฅ์
๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ฅ์ ์ด ์์๊น์?
์ฅ์ | ์ค๋ช |
---|---|
์บก์ํ(Encapsulation) ๊ฐํ | ํน์ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ํด๋์ค๋ฅผ ์จ๊ธธ ์ ์์ |
์ฝ๋ ๊ฐ๋ ์ฑ ํฅ์ | ๊ด๋ จ๋ ์ฝ๋๋ฅผ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ก ๊ทธ๋ฃนํ ๊ฐ๋ฅ |
์ธ๋ถ ํด๋์ค์์ ๊ฐํ ๊ฒฐํฉ | ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ(๋ณ์, ๋ฉ์๋)์ ์์ ๋กญ๊ฒ ์ ๊ทผ ๊ฐ๋ฅ |
์ด๋ฒคํธ ๋ฆฌ์ค๋ ๊ตฌํ์ด ์ฉ์ด | GUI ํ๋ก๊ทธ๋๋ฐ์์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๊ฒฐํด์ง |
ํด๋์ค ๋ค์์คํ์ด์ค ๊ด๋ฆฌ | ๋ถํ์ํ ํด๋์ค๋ฅผ ์ธ๋ถ์ ๋ ธ์ถํ์ง ์์ ์ฝ๋ ์ ๋ฆฌ๊ฐ ์ฌ์์ง |
๐ ์์ : ์บก์ํ๊ฐ ๊ฐํ๋ ๋ด๋ถ ํด๋์ค ์ฌ์ฉ
class BankAccount {
private double balance = 1000.0;
// ๋ด๋ถ ํด๋์ค: ๊ณ์ข ํธ๋์ญ์
์ฒ๋ฆฌ
private class Transaction {
void withdraw(double amount) {
if (amount <= balance) {
balance -= amount;
System.out.println(amount + "์์ด ์ถ๊ธ๋์์ต๋๋ค. ์์ก: " + balance);
} else {
System.out.println("์์ก์ด ๋ถ์กฑํฉ๋๋ค.");
}
}
}
public void withdrawMoney(double amount) {
Transaction transaction = new Transaction();
transaction.withdraw(amount);
}
}
public class Main {
public static void main(String[] args) {
BankAccount account = new BankAccount();
account.withdrawMoney(500); // 500์ ์ถ๊ธ
account.withdrawMoney(600); // ์์ก ๋ถ์กฑ
}
}
๐ก ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ด์ :
Transaction
ํด๋์ค๋BankAccount
์์๋ง ์ฌ์ฉ๋๋ฏ๋ก ์บก์ํ๋ฅผ ์ํด ๋ด๋ถ ํด๋์ค๋ก ์ ์ธ- ์ธ๋ถ์์
Transaction
๊ฐ์ฒด๋ฅผ ์ง์ ์กฐ์ํ์ง ๋ชปํ๋๋ก ์จ๊น
โ 2. ๋ด๋ถ ํด๋์ค์ ๋จ์
ํ์ง๋ง, ๋ด๋ถ ํด๋์ค๋ฅผ ์๋ชป ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋จ์ ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋จ์ | ์ค๋ช |
---|---|
์ฝ๋ ๋ณต์ก๋ ์ฆ๊ฐ | ๋ด๋ถ ํด๋์ค๊ฐ ๋ง์์ง๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง ์ ์์ |
๋ฉ๋ชจ๋ฆฌ ๋์ ์ํ | ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค๋ฅผ ์ฐธ์กฐํ ๊ฒฝ์ฐ, ์ฐธ์กฐ ํด์ ๊ฐ ์ ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์ ๊ฐ๋ฅ |
ํ ์คํธ ๋ฐ ์ ์ง๋ณด์ ์ด๋ ค์ | ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์์ด ๋จ์ ํ ์คํธ๊ฐ ์ด๋ ต๋ค |
ํด๋์ค ํฌ๊ธฐ ์ฆ๊ฐ | ๋ด๋ถ ํด๋์ค๊ฐ ๋ง์ผ๋ฉด ๋ฐ์ดํธ์ฝ๋๊ฐ ์ฆ๊ฐํ์ฌ ์ต์ ํ์ ์ํฅ์ ๋ฏธ์น ์ ์์ |
๐ ์์ : ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์๋ ์ฝ๋
class Outer {
private String data = "์ค์ํ ๋ฐ์ดํฐ";
class Inner {
void showData() {
System.out.println(data); // Outer ํด๋์ค๋ฅผ ์ฐธ์กฐ (๋ฉ๋ชจ๋ฆฌ ๋์ ์ํ)
}
}
}
public class Main {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.showData();
}
}
๐ก ๋ฌธ์ ์ :
- ๋ด๋ถ ํด๋์ค
Inner
๋ ์ธ๋ถ ํด๋์คOuter
๋ฅผ ์๋ฌต์ ์ผ๋ก ์ฐธ์กฐํจ (Outer.this
)- ์ธ๋ถ ํด๋์ค๊ฐ ํด์ ๋์ง ์๋ ํ, ๋ด๋ถ ํด๋์ค๋ GC(๊ฐ๋น์ง ์ปฌ๋ ์ )๊ฐ ๋ถ๊ฐ๋ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ๋ฅ์ฑ์ด ์์
โ ํด๊ฒฐ ๋ฐฉ๋ฒ: static ๋ด๋ถ ํด๋์ค ์ฌ์ฉ
class Outer {
private static String data = "์ค์ํ ๋ฐ์ดํฐ";
static class Inner {
void showData() {
System.out.println(data); // static ๋ณ์๋ง ์ฐธ์กฐ (๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง)
}
}
}
public class Main {
public static void main(String[] args) {
Outer.Inner inner = new Outer.Inner(); // ์ธ๋ถ ํด๋์ค ๊ฐ์ฒด ์์ฑ ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
inner.showData();
}
}
โ 3. ์ค๋ฌด์์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
๊ทธ๋ ๋ค๋ฉด ๋ด๋ถ ํด๋์ค๋ฅผ ์ธ์ , ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ ๊น์?
๐ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ ๊ธฐ์ค
โ ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋ ๊ฒฝ์ฐ ์ฌ์ฉ
โ ๋ถํ์ํ ์ฝ๋ ๋ ธ์ถ์ ๋ง๊ธฐ ์ํด ๋ด๋ถ ํด๋์ค๋ฅผ ํ์ฉ (์บก์ํ ๊ฐํ)
โ ๋ด๋ถ ํด๋์ค๊ฐ ๋๋ฌด ๋ง์์ง๋ฉด ์ฝ๋ ๋ณต์ก๋๊ฐ ์ฆ๊ฐํ ์ ์์ผ๋ฏ๋ก ์ฃผ์
โ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด static ๋ด๋ถ ํด๋์ค๋ฅผ ๊ณ ๋ ค
โ ๋จ์ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ํ์ฉํ์ฌ ์ฝ๋ ๊ฐ๊ฒฐํ
๐ 5๋จ๊ณ ์ ๋ฆฌ
โ ๋ด๋ถ ํด๋์ค๋ ์บก์ํ๋ฅผ ๊ฐํํ๊ณ , ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๋ ์ญํ ์ ํ๋ค.
โ ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ปฌ๋ ์ ์ ๋ฐ๋ณต์, ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ ๋ฑ์์ ์ ์ฉํ๊ฒ ํ์ฉ๋๋ค.
โ ํ์ง๋ง ์๋ชป ์ฌ์ฉํ๋ฉด ์ฝ๋ ๋ณต์ก๋ ์ฆ๊ฐ & ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฑ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
โ ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋ ๊ฒฝ์ฐ์๋ง ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, ํ์ํ์ง ์์ผ๋ฉด static ๋ด๋ถ ํด๋์ค๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค.
##
๐ 6๋จ๊ณ: ๋ด๋ถ ํด๋์ค์ ๋๋ค์(๋๋ค ํํ์)์ ๊ด๊ณ
๋ด๋ถ ํด๋์ค์ ๋๋ค์(Lambda Expression) ์ ๋งค์ฐ ๋ฐ์ ํ ๊ด๊ณ๊ฐ ์์ต๋๋ค.
ํนํ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ ๋๋ค์์ผ๋ก ๋์ฒด๋ ์ ์์ผ๋ฉฐ,
๋๋ค์์ ํ์ฉํ๋ฉด ์ฝ๋๋ฅผ ํจ์ฌ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์ด ๋จ๊ณ์์๋ ์ต๋ช ๋ด๋ถ ํด๋์ค์ ๋๋ค์์ ์ฐจ์ด์ , ๋ณํ ๊ณผ์ , ์ฅ๋จ์ ์ ํ์ตํฉ๋๋ค. ๐
โ 1. ์ต๋ช ๋ด๋ถ ํด๋์ค vs ๋๋ค์
๋น๊ต ํญ๋ชฉ | ์ต๋ช ๋ด๋ถ ํด๋์ค | ๋๋ค์ (Lambda Expression) |
---|---|---|
์ฝ๋ ๊ธธ์ด | ๊ธธ๊ณ ๋ณต์กํจ | ์งง๊ณ ๊ฐ๊ฒฐํจ |
this ํค์๋ |
์ต๋ช ๋ด๋ถ ํด๋์ค ์์ฒด๋ฅผ ๊ฐ๋ฆฌํด | ๋๋ค์์ด ํฌํจ๋ ์ธ๋ถ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํด |
๊ฐ๋ ์ฑ | ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ฉด ์ฝ๊ธฐ ์ด๋ ค์ | ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐ |
์ฑ๋ฅ | ํด๋์ค ํ์ผ์ด ์์ฑ๋จ (ํด๋์ค ๋ก๋ฉ ํ์) | ๋ฐ์ดํธ์ฝ๋ ์์ค์์ ์ต์ ํ |
์ฌ์ฉ ๊ฐ๋ฅ ๋์ | ์ธํฐํ์ด์ค & ์ถ์ ํด๋์ค ๋ชจ๋ ๊ตฌํ ๊ฐ๋ฅ | ์ธํฐํ์ด์ค(์ถ์ ๋ฉ์๋๊ฐ 1๊ฐ)๋ง ๊ฐ๋ฅ |
๐ก ๊ฒฐ๋ก :
- ๋๋ค์์ ์ค์ง โํจ์ํ ์ธํฐํ์ด์ค(๋ฉ์๋๊ฐ 1๊ฐ๋ง ์๋ ์ธํฐํ์ด์ค)โ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
- ์ต๋ช ๋ด๋ถ ํด๋์ค๋ ์ฌ๋ฌ ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง ํด๋์ค๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ๋ ํ์
โ 2. ์ต๋ช ๋ด๋ถ ํด๋์ค โ ๋๋ค์ ๋ณํ ๊ณผ์
๐ ์์ : ์ต๋ช
๋ด๋ถ ํด๋์ค๋ก Runnable
๊ตฌํ
public class AnonymousClassExample {
public static void main(String[] args) {
// ์ต๋ช
๋ด๋ถ ํด๋์ค ์ฌ์ฉ
Runnable runnable = new Runnable() {
@Override
public void run() {
System.out.println("์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ!");
}
};
runnable.run();
}
}
๐ ๋๋ค์์ผ๋ก ๋ณํ
public class LambdaExample {
public static void main(String[] args) {
// ๋๋ค์ ์ฌ์ฉ (๋ ๊ฐ๊ฒฐํด์ง!)
Runnable runnable = () -> System.out.println("๋๋ค์ ์คํ!");
runnable.run();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ!
๋๋ค์ ์คํ!
๐ก ๋ณํ ๊ณผ์
new ์ธํฐํ์ด์ค() { ... }
โ() -> { ... }
๋ก ๋ณ๊ฒฝ- ์๋์ผ๋ก
@Override
์ฒ๋ฆฌ๋๋ฏ๋ก ๋ฉ์๋ ์ด๋ฆ์ ๋ฐ๋ก ์ง์ ํ ํ์ ์์
โ
3. this
ํค์๋ ์ฐจ์ด์
์ต๋ช
๋ด๋ถ ํด๋์ค์ ๋๋ค์์์ this
ํค์๋๋ ์๋ก ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค.
๐ ์ต๋ช
๋ด๋ถ ํด๋์ค์์์ this
class Outer {
String message = "Outer Class";
void test() {
Runnable r = new Runnable() {
String message = "Anonymous Class";
@Override
public void run() {
System.out.println(this.message); // ์ต๋ช
๋ด๋ถ ํด๋์ค์ message ์ถ๋ ฅ
}
};
r.run();
}
}
public class Main {
public static void main(String[] args) {
new Outer().test();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
Anonymous Class
๐ก ์ต๋ช ๋ด๋ถ ํด๋์ค์์๋ this๊ฐ ์ต๋ช ํด๋์ค ์์ฒด๋ฅผ ๊ฐ๋ฆฌํด
๐ ๋๋ค์์์์ this
class Outer {
String message = "Outer Class";
void test() {
Runnable r = () -> {
System.out.println(this.message); // Outer ํด๋์ค์ message ์ถ๋ ฅ
};
r.run();
}
}
public class Main {
public static void main(String[] args) {
new Outer().test();
}
}
๐ ์คํ ๊ฒฐ๊ณผ
Outer Class
๐ก ๋๋ค์์์๋ this๊ฐ ์ธ๋ถ ํด๋์ค(Outer)๋ฅผ ๊ฐ๋ฆฌํด
โ 4. ๋๋ค์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ
๋๋ค์์ โํจ์ํ ์ธํฐํ์ด์ค(์ถ์ ๋ฉ์๋๊ฐ 1๊ฐ๋ง ์๋ ์ธํฐํ์ด์ค)โ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฆ, ์ธํฐํ์ด์ค์ 2๊ฐ ์ด์์ ๋ฉ์๋๊ฐ ์๋ค๋ฉด ๋๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๐ ์์ : ๋๋ค์์ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ
interface MultiMethodInterface {
void method1();
void method2();
}
// โ ์ปดํ์ผ ์ค๋ฅ! (๋๋ค์์ ์ค์ง ํ๋์ ๋ฉ์๋๋ง ์ง์)
MultiMethodInterface obj = () -> System.out.println("Hello");
๐ก ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํด์ผ ํจ
- ๋๋ ํจ์ํ ์ธํฐํ์ด์ค๋ก ๋ณ๊ฒฝํ์ฌ ๋จ์ผ ๋ฉ์๋๋ง ๋จ๊น
๐ 6๋จ๊ณ ์ ๋ฆฌ
โ ์ต๋ช ๋ด๋ถ ํด๋์ค์ ๋๋ค์์ ์ ์ฌํ์ง๋ง, ๋๋ค์์ด ๋ ๊ฐ๊ฒฐํ๊ณ ์ต์ ํ๋จ
โ ๋๋ค์์ โํจ์ํ ์ธํฐํ์ด์คโ์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ
โ
์ต๋ช
๋ด๋ถ ํด๋์ค์์๋ this
๊ฐ ์ต๋ช
ํด๋์ค ์์ ์ ๊ฐ๋ฆฌํค์ง๋ง, ๋๋ค์์์๋ ์ธ๋ถ ํด๋์ค๋ฅผ ๊ฐ๋ฆฌํด
โ ๋ฉ์๋๊ฐ 2๊ฐ ์ด์์ธ ์ธํฐํ์ด์ค๋ ๋๋ค์์ผ๋ก ๋ณํํ ์ ์์
##
๐ 7๋จ๊ณ: ๋ด๋ถ ํด๋์ค ๊ด๋ จ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ & ์ค๋ฌด ์ต์ ํ ๋ฐฉ๋ฒ
๋ง์ง๋ง ๋จ๊ณ์์๋ ๋ด๋ถ ํด๋์ค์ ๊ด๋ จ๋ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ๊ณผ ์ค๋ฌด ์ต์ ํ ๋ฐฉ๋ฒ์ ํ์ตํฉ๋๋ค.
๋ด๋ถ ํด๋์ค๋ฅผ ์ธ์ , ์ด๋ป๊ฒ ํ์ฉํ๋ฉด ์ข์์ง์ ์์ฃผ ๋ฌป๋ ๋ฉด์ ์ง๋ฌธ์ ์ ๋ฆฌํ์ต๋๋ค.
โ 1. ๋ด๋ถ ํด๋์ค ๊ด๋ จ ๊ธฐ์ ๋ฉด์ ์ง๋ฌธ
๋ด๋ถ ํด๋์ค๋ ์๋ฐ์ ๊ฐ์ฒด์งํฅ ๊ฐ๋ ๊ณผ ์บก์ํ์ ๊ด๋ จ์ด ๊น๊ธฐ ๋๋ฌธ์
๊ธฐ์ ๋ฉด์ ์์ ์์ฃผ ๋ฑ์ฅํ๋ ์ฃผ์ ์ ๋๋ค.
๐ ๋ฉด์ ์ง๋ฌธ & ๋ต๋ณ ์์
Q1. ๋ด๋ถ ํด๋์ค(Inner Class)๋ ๋ฌด์์ด๋ฉฐ, ์ ์ฌ์ฉํ๋์?
โ ๋ต๋ณ:
๋ด๋ถ ํด๋์ค๋ ํด๋์ค ๋ด๋ถ์ ์ ์๋ ๋ ๋ค๋ฅธ ํด๋์ค์ ๋๋ค.
ํน์ ํด๋์ค ๋ด๋ถ์์๋ง ์ฌ์ฉ๋๋ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ด ์บก์ํ๋ฅผ ๊ฐํํ๊ณ ,
์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๋ ์ฅ์ ์ด ์์ต๋๋ค.
ํนํ GUI ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ปฌ๋ ์ ๋ฐ๋ณต์(Iterator), ๋ฉํฐ์ค๋ ๋ ๋ฑ์์ ์์ฃผ ํ์ฉ๋ฉ๋๋ค.
Q2. ๋ด๋ถ ํด๋์ค์ ์ข ๋ฅ๋ฅผ ์ค๋ช ํ๊ณ ์ฐจ์ด์ ์ ๋งํด์ฃผ์ธ์.
โ ๋ต๋ณ:
๋ด๋ถ ํด๋์ค์๋ 4๊ฐ์ง ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
- ์ธ์คํด์ค ๋ด๋ถ ํด๋์ค: ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํตํด ์ ๊ทผ ๊ฐ๋ฅ
- ์ ์ (static) ๋ด๋ถ ํด๋์ค: ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด ์ฌ์ฉ ๊ฐ๋ฅ (static ๋ฉค๋ฒ๋ง ์ ๊ทผ ๊ฐ๋ฅ)
- ์ง์ญ(Local) ๋ด๋ถ ํด๋์ค: ํน์ ๋ฉ์๋ ๋ด๋ถ์์๋ง ์ฌ์ฉ๋จ
- ์ต๋ช (Anonymous) ๋ด๋ถ ํด๋์ค: ํ ๋ฒ๋ง ์ฌ์ฉ๋๋ ๋ฌด๋ช ํด๋์ค (์ฃผ๋ก ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ์ฌ์ฉ)
โ ์ถ๊ฐ ์ง๋ฌธ:
Q: ์ ์ ๋ด๋ถ ํด๋์ค์ ์ผ๋ฐ ๋ด๋ถ ํด๋์ค์ ์ฐจ์ด๋?
- ์ ์ ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด ์ฌ์ฉ ๊ฐ๋ฅ
- ์ผ๋ฐ ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ด์ผ ์ฌ์ฉ ๊ฐ๋ฅ
Q3. ๋ด๋ถ ํด๋์ค ์ฌ์ฉ ์ ์ฃผ์ํ ์ ์?
โ ๋ต๋ณ:
๋ฉ๋ชจ๋ฆฌ ๋์ ๊ฐ๋ฅ์ฑ: ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ์ฐธ์กฐ๋ฅผ ์ ์งํ๋ฏ๋ก,์ธ๋ถ ํด๋์ค๊ฐ ํด์ ๋์ง ์์ผ๋ฉด GC(๊ฐ๋น์ง ์ปฌ๋ ์ )๊ฐ ๋ถ๊ฐ๋ฅํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.์ฝ๋ ๋ณต์ก๋ ์ฆ๊ฐ: ๋ด๋ถ ํด๋์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ๋ฎ์์ง ์ ์์.ํด๋์ค ํฌ๊ธฐ ์ฆ๊ฐ: ๋ด๋ถ ํด๋์ค๋ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์ฆ๊ฐ์์ผ ํด๋์ค ๋ก๋ฉ ์ฑ๋ฅ์ ์ํฅ์ ์ค ์ ์์.
โ ์ถ๊ฐ ์ง๋ฌธ:
Q: ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์?
static
๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ถํ์ํ ์ธ๋ถ ํด๋์ค ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐWeakReference
๋ฅผ ํ์ฉํ์ฌ ๋ด๋ถ ํด๋์ค์ ์ฐธ์กฐ๋ฅผ ์ฝํ๊ฒ ์ ์ง
Q4. ์ต๋ช ๋ด๋ถ ํด๋์ค์ ๋๋ค์์ ์ฐจ์ด๋?
โ ๋ต๋ณ:
์ต๋ช ๋ด๋ถ ํด๋์ค๋ ์ธํฐํ์ด์ค ๋๋ ์ถ์ ํด๋์ค๋ฅผ ๊ตฌํํ ์ ์์ง๋ง,๋๋ค์์ ์ค์ง โํจ์ํ ์ธํฐํ์ด์คโ (๋ฉ์๋ 1๊ฐ์ง๋ฆฌ ์ธํฐํ์ด์ค)์์๋ง ์ฌ์ฉ ๊ฐ๋ฅ์ต๋ช ๋ด๋ถ ํด๋์ค์์ this๋ ์๊ธฐ ์์ (์ต๋ช ํด๋์ค)์ ์ฐธ์กฐ,๋๋ค์์์ this๋ ์ธ๋ถ ํด๋์ค๋ฅผ ์ฐธ์กฐ
โ ์ถ๊ฐ ์ง๋ฌธ:
Q: ๋๋ค์์ผ๋ก ๋ณํํ ์ ์๋ ์ต๋ช ๋ด๋ถ ํด๋์ค์ ์์๋?
- ์ธํฐํ์ด์ค์ 2๊ฐ ์ด์์ ์ถ์ ๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ (๋๋ค์์ ์ฌ์ฉ ๋ถ๊ฐ)
- ๊ธฐ์กด ํด๋์ค(์ถ์ ํด๋์ค X)๋ฅผ ์์ํด์ผ ํ๋ ๊ฒฝ์ฐ (๋๋ค์์ ์ธํฐํ์ด์ค๋ง ๊ฐ๋ฅ)
โ 2. ์ค๋ฌด์์ ๋ด๋ถ ํด๋์ค๋ฅผ ์ต์ ํํ๋ ๋ฐฉ๋ฒ
๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋ ์ฑ๋ฅ๊ณผ ์ ์ง๋ณด์๋ฅผ ๊ณ ๋ คํ ์ต์ ํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ์ต๋๋ค.
๐ 1. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด static
๋ด๋ถ ํด๋์ค ์ฌ์ฉ
์ผ๋ฐ ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค๋ฅผ ์๋ฌต์ ์ผ๋ก ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์
static ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถํ์ํ ์ฐธ์กฐ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
โ ์๋ชป๋ ์์ (๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ์ ๊ฐ๋ฅ)
class Outer {
private String data = "์ค์ํ ๋ฐ์ดํฐ";
class Inner {
void show() {
System.out.println(data); // Outer.this๋ฅผ ์๋ฌต์ ์ผ๋ก ์ฐธ์กฐ (GC ๋ถ๊ฐ๋ฅ)
}
}
}
โ
์ฌ๋ฐ๋ฅธ ์์ (static
๋ด๋ถ ํด๋์ค ์ฌ์ฉ)
class Outer {
private static String data = "์ค์ํ ๋ฐ์ดํฐ";
static class Inner {
void show() {
System.out.println(data); // static ๋ณ์๋ง ์ ๊ทผ (๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง)
}
}
}
๐ก static ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์ฌ๋ผ์ง.
๐ 2. ๋๋ฌด ๊น์ ์ค์ฒฉ ํด๋์ค ์ฌ์ฉ ๊ธ์ง (๊ฐ๋ ์ฑ ๋ฌธ์ )
๋ด๋ถ ํด๋์ค๋ฅผ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง ์ ์์
3๋จ๊ณ ์ด์์ ๋ด๋ถ ํด๋์ค๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
โ ์๋ชป๋ ์์ (๋๋ฌด ๋ง์ ์ค์ฒฉ ํด๋์ค)
class A {
class B {
class C {
void method() {
System.out.println("๋๋ฌด ๊น์ ์ค์ฒฉ ํด๋์ค!");
}
}
}
}
โ ์ฌ๋ฐ๋ฅธ ์์ (ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉ)
class C {
void method() {
System.out.println("ํด๋์ค๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋
์ฑ ํฅ์!");
}
}
๐ก ํด๋์ค๊ฐ ๋๋ฌด ๊น์ด์ง๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ฏ๋ก, ๋ ๋ฆฝ๋ ํด๋์ค๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข์.
๐ 3. ์ต๋ช ๋ด๋ถ ํด๋์ค ๋์ ๋๋ค์์ ํ์ฉํ์ฌ ์ฝ๋ ์ต์ ํ
์ต๋ช ๋ด๋ถ ํด๋์ค๋ ๊ฐ๋ฅํ๋ฉด ๋๋ค์์ผ๋ก ๋ณํํ์ฌ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์ง
โ ์๋ชป๋ ์์ (์ต๋ช ๋ด๋ถ ํด๋์ค ์ฌ์ฉ)
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("์ต๋ช
๋ด๋ถ ํด๋์ค ์คํ!");
}
};
โ ์ฌ๋ฐ๋ฅธ ์์ (๋๋ค์ ๋ณํ)
Runnable r = () -> System.out.println("๋๋ค์ ์คํ!");
๐ก ๋๋ค์์ ์ฌ์ฉํ๋ฉด ์ฝ๋๊ฐ ํจ์ฌ ๊ฐ๊ฒฐํด์ง๊ณ , ์ ์ง๋ณด์๊ฐ ์ฌ์์ง.
๐ 7๋จ๊ณ ์ ๋ฆฌ
โ ๋ด๋ถ ํด๋์ค๋ ๊ธฐ์ ๋ฉด์ ์์ ์์ฃผ ๋ฑ์ฅํ๋ ์ฃผ์ ์ด๋ฏ๋ก, ๊ฐ ์ข ๋ฅ์ ์ฐจ์ด์ ์ ๋ช ํํ ์ดํดํด์ผ ํ๋ค.
โ
๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด static
๋ด๋ถ ํด๋์ค๋ฅผ ์ ์ ํ ์ฌ์ฉํด์ผ ํ๋ค.
โ ๋๋ฌด ๊น์ ์ค์ฒฉ ํด๋์ค๋ ํผํ๊ณ , ์ ์ง๋ณด์๋ฅผ ๊ณ ๋ คํ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํด์ผ ํ๋ค.
โ ๋๋ค์์ ํ์ฉํ๋ฉด ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ์ต์ ํํ ์ ์๋ค.
๐ฏ ์ต์ข ๊ฒฐ๋ก : ๋ด๋ถ ํด๋์ค๋ ์ธ์ ์ฌ์ฉํ ๊น?
โ ๋ด๋ถ ํด๋์ค๊ฐ ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ
โ ํด๋์ค๊ฐ ๋ถํ์ํ๊ฒ ๋ ธ์ถ๋์ง ์๋๋ก ์บก์ํ๊ฐ ํ์ํ ๊ฒฝ์ฐ
โ GUI ์ด๋ฒคํธ ์ฒ๋ฆฌ, ์ปฌ๋ ์ ๋ฐ๋ณต์, ๋ฉํฐ์ค๋ ๋ ๋ฑ์์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด
โ ๋๋ค์์ด ๊ฐ๋ฅํ๋ค๋ฉด ์ต๋ช ๋ด๋ถ ํด๋์ค ๋์ ๋๋ค์์ ์ฌ์ฉํ์ฌ ์ต์ ํ
์ด์ ๋ด๋ถ ํด๋์ค์ ๊ฐ๋ ๋ถํฐ ํ์ฉ๋ฒ๊น์ง ์๋ฒฝํ๊ฒ ์ดํดํ์ต๋๋ค! ๐
๋ ๊ถ๊ธํ ์ ์ด ์์ผ๋ฉด ์ธ์ ๋ ์ง ์ง๋ฌธํ์ธ์! ๐