์ถ์ฒ
ChatGPT
Nested Class ๊ตฌ์กฐ
Nested class
โจฝ Static Nested Class
โจฝ Inner class
โจฝ Memeber Inner Class (Non-static Inner Class, Inner Class)
โจฝ Local Inner class (Local Class)
โจฝ Anonymouse Inner class (Anonymouse Class)
1. Outer class
- ์ธ๋ถ ํด๋์ค๋ ๋ชจ๋ ์ค์ฒฉ ํด๋์ค(nested class)์ ์ปจํ ์ด๋ ์ญํ ์ ํ๋ค.
- ์คํ ๋ ๋ชจ๋ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค ๋ด๋ถ์ ์ ์๋๋ค.
2. Static Nested Class
class OuterClass {
static class StaticNestedClass {
// Static Nested Class code
}
}
์กด์ฌ ์ด์
1. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ
static nested class๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ ์ฌ์ฉํ ์ ์๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ต์ ํํ๋ ๋ฐ ์ ์ฉํ๋ค. ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ์๋ก ํ์ง ์๋ ๊ฒฝ์ฐ, ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ๋์ผ ์ ์๋ค.
2. ์์ง๋ ํฅ์
๊ด๋ จ ์๋ ํด๋์ค๋ค์ ํ๋์ ๋ ผ๋ฆฌ์ ์ธ ๋จ์๋ก ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์๊ฒ ํฉ๋๋ค. ์ธ๋ถ ํด๋์ค์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ด๋ จ์ด ์์ง๋ง, ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์๋ ์๊ด์๋ ํด๋์ค๋ฅผ ์ ์ํ ๋ static nested class๊ฐ ์ ํฉํฉ๋๋ค.
3. ์บก์ํ
static nested class๋ ์ธ๋ถ ํด๋์ค์ ๋น๊ณต๊ฐ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์, ๋ ผ๋ฆฌ์ ์ธ ๊ด๊ณ๋ฅผ ์ ์งํ๋ฉด์๋ ์ธ๋ถ ํด๋์ค์์ ๋ถํ์ํ ๊ฒฐํฉ์ ํผํ ์ ์์ต๋๋ค.
4. ์ ํธ๋ฆฌํฐ ํด๋์ค
์ ํธ๋ฆฌํฐ ์ญํ ์ ํ๋ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์์ ์ธ์คํด์ค ๊ด๊ณ๊ฐ ํ์ ์์ผ๋ฏ๋ก static nested class๋ก ์ ์ธํ๋ ๊ฒ์ด ์ ์ ํฉ๋๋ค.
ํน์ง
- static ํค์๋๋ฅผ ๊ฐ์ง๋ฉฐ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌ๋ค.
- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด ์์ฑ ๊ฐ๋ฅํ๋ค.
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
- ์ธ๋ถ ํด๋์ค์ ๋น์ ์ ๋ฉค๋ฒ์ ์ง์ ์ ๊ทผํ ์ ์๋ค. ๋ค๋ง, ์ธ๋ถ ํด๋์ค์ static ๋ฉค๋ฒ์๋ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์ธ๋ถ ํด๋์ค์์ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ณ์๋ค
- ์ฐธ์กฐ ๊ฐ๋ฅ: ์ธ๋ถ ํด๋์ค์ static ๋ณ์
- ์ฐธ์กฐ ๋ถ๊ฐ: ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์
ํด๋์ค ๋ก๋์ ์์ฑ ์ ๋ฉ๋ชจ๋ฆฌ ๋์
3. Inner class
- ๋ด๋ถ ํด๋์ค๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ์ข ์์ ์ด๋ค.
- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ด์ผ๋ง ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ, ์ธ๋ถ ํด๋์ค์ ๋น์ ์ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค.
3.1 Memeber Inner Class (Inner Class)
class OuterClass {
class InnerClass {
// Non-static Inner Class code
}
}
์กด์ฌ ์ด์
- Non-static Inner Class๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ๊ฐํ๊ฒ ๊ฒฐํฉ๋์ด ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋ ํ์๋ง ์์ฑ๋ ์ ์๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ํด๋์ค์ ๋ฐ์ดํฐ๋ ๋ฉ์๋์ ๋ฐ์ ํ๊ฒ ์ฐ๊ฒฐ๋ ์์ ์ ์ํํ ๋ ์ ์ฉํ๋ค.
- ์ธ๋ถ ํด๋์ค์ ์ธ๋ถ ๊ตฌํ์ Non-static Inner Class๋ฅผ ํตํด ์๋ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํน์ ์์ ์ด๋ ๋ก์ง์ ๋ด๋ถ ํด๋์ค์์๋ง ์ฒ๋ฆฌํ๋๋ก ํ์ฌ ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ์ง ๋ชปํ๊ฒ ํ ์ ์๋ค.
- ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ํํ๋ ๋ฐ ๋์์ ์ค๋ค. ํ ํด๋์ค ๋ด๋ถ์ ๊ด๋ จ๋ ์๋ธ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ง๋ ํด๋์ค๋ฅผ ์ ์ํ๋ฉด ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง๋ค.
ํน์ง
- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ธ๋ถ ํด๋์ค ์ธ์คํด์ค์ ์ฐ๊ด๋์ด ๋์ํ๋ค.
- ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์กด์ฌํด์ผ๋ง ์์ฑํ ์ ์๋ค.
- ์ธ๋ถ ํด๋์ค์ private ๋ฉค๋ฒ์๋ ์ ๊ทผํ ์ ์๋ค.
- ์ฃผ๋ก ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ฉ์๋๋ ์์ฑ์ ๋ด์์ ์ฌ์ฉ๋๋ค. ...? ์์ ํ์...?
์ธ๋ถ ํด๋์ค์์ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ณ์๋ค
- ์ฐธ์กฐ ๊ฐ๋ฅ: ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์, static ๋ณ์
์ฌ์ฉ ์์
- GUI ์ ํ๋ฆฌ์ผ์ด์ : ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ UI ์ปดํฌ๋ํธ์ ๊ฐ์ ๊ธฐ๋ฅ์ด ์ธ๋ถ ํด๋์ค์ ๊ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ ๋ Non-static Inner Class๋ฅผ ์ฌ์ฉํ๋ค.
class Outer {
private String name;
class Inner {
void showName() {
System.out.println("Name: " + name); // ์ธ๋ถ ํด๋์ค์ ํ๋์ ์ ๊ทผ ๊ฐ๋ฅ
}
}
}
ํด๋์ค ๋ก๋์ ์์ฑ ์ ๋ฉ๋ชจ๋ฆฌ ๋์
3.2 Local Inner class (Local Class)
class OuterClass {
void someMethod() {
class LocalClass {
// Local class inside a method
}
}
}
์กด์ฌ ์ด์
- Local Class๋ ๋ฉ์๋ ๋ด๋ถ์ ์ ์ธ๋์ด ๋ฉ์๋์ ํน์ ์์ ์ ์บก์ํํ๋ค. ๋ก์ง์ด ๋ณต์กํด์ง ๋, ํด๋น ๋ก์ง์ ๋ฉ์๋ ๋ด๋ถ์์ ํด๋์ค ํํ๋ก ๋ถ๋ฆฌํด ์์ฑํ ์ ์๋ค.
- ํน์ ๋ฉ์๋ ๋ด์์๋ง ์๋ฏธ๊ฐ ์๋ ํด๋์ค๋ฅผ ์ ์ํ ์ ์์ด ์ฝ๋์ ๊ตฌ์กฐํ์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค.
- ํน์ ๋ฆฌ์์ค๋ ๋ฐ์ดํฐ์ ์ฒ๋ฆฌ๊ฐ ํ๋์ ๋ฉ์๋์๋ง ๊ตญํ๋ ๋, Local Class๋ก ์ ์ธํ์ฌ ์ฝ๋์ ๋ชจ๋์ฑ์ ๋์ด๊ณ ํ์ ์๋ ์ ์ญ ์ ๊ทผ์ ํผํ ์ ์๋ค.
ํน์ง
- Local class๋ ๋ฉ์๋ ๋ด๋ถ์ ์ ์๋ ํด๋์ค์ด๋ค.
- Local Class๋ ๋ฉ์๋๋ ์์ฑ์์ ๋ด๋ถ์์ ์ ์ธ๋๋ฏ๋ก, ํด๋น ๋ฉ์๋๋ ์์ฑ์๊ฐ ์คํ๋ ๋์๋ง ์ ํจํ๋ค.
- ๋ณต์กํ ๋ก์ง์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฉ์๋ ๋ด๋ถ์ ํด๋์ค๋ฅผ ์ ์ธํ์ฌ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ์ธ๋ถ ํด๋์ค์ ๋ฉค๋ฒ์ ์ ๊ทผํ ์ ์๋ค.
- ๋ฉ์๋์ ์ ์ธ๋ ๋ก์ปฌ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ผ๋, ์ฐธ์กฐ๋ ๋ณ์๋ final ๋๋ effectively final์ด์ด์ผ ํ๋ค.
- Local class๊ฐ ์ฐธ์กฐํ๋ ๋ฉ์๋ ์ ๋ก์ปฌ ๋ณ์๊ฐ final ๋๋ effectively final ์ด์ด์ผ ํ๋ ์ด์
Local class๊ฐ ์ฐธ์กฐํ๋ ๋ฉ์๋ ์ ๋ก์ปฌ ๋ณ์๊ฐ final ๋๋ effectively final ์ด์ด์ผ ํ๋ ์ด์
Local calss์์ ๋ก์ปฌ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์์ง๋ง, ์ฐธ์กฐ๋ ๋ณ์๋ final ๋๋ effectively final์ด์ด์ผ ํ๋ค๋ ๊ท์น์ ์ด์ ๋ ์๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ๊ด๋ จ์ด ์๋ค.
1. ๋ก์ปฌ ๋ณ์์ ์๋ช ์ฃผ๊ธฐ์ ํด๋์ค์ ์๋ช ์ฃผ๊ธฐ
- ๋ก์ปฌ ๋ณ์๋ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋๋ฉด ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง๋ค. ์ฆ, ์คํ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐ๋๋ค.
- ํ์ง๋ง ๋ก์ปฌ ํด๋์ค๋ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ์ดํ์๋ ์คํ๋ ์ ์๋ค. ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ํ์๋ ๋ก์ปฌ ํด๋์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ด์๋จ์ ํด๋น ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ค๋ ๊ฒฝ์ฐ, ์ด๋ฏธ ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง ๋ณ์์ ์ ๊ทผํ๋ ค๊ณ ํ๊ฒ ๋์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
๋ก์ปฌ ํด๋์ค๊ฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ์ดํ์๋ ์คํ๋ ์ ์๋ ์ํฉ์ ๋ํ ์์
๋ก์ปฌ ํด๋์ค๊ฐ ๋ฉ์๋ ๋ด๋ถ์์ ์ ์๋์์ง๋ง, ํด๋น ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฉ์๋ ์ธ๋ถ์์๋ ์๋ํ ์ ์๋ ์ํฉ์ ์์๋ก ๋ค์ ๊ฒ์ด๋ค.
์๋ ์์ ๋ java.lang.Runnable ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฉํฐ์ค๋ ๋ ํ๋ก๊ทธ๋จ์ด๋ค. ์ด ํ๋ก๊ทธ๋จ์์๋ ๋ฉ์๋ ๋ด๋ถ์ ๋ก์ปฌ ํด๋์ค๋ฅผ ์ ์ํ๊ณ , ๊ทธ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ํ์๋ ์คํ๋๋ ์ํฉ์ ๋ณด์ฌ์ค๋ค.
public class LocalClassExample {
public void startThread() {
// ๋ฉ์๋ ๋ด๋ถ์์ ๋ก์ปฌ ํด๋์ค ์ ์
class Task implements Runnable {
@Override
public void run() {
// ๋ฉ์๋๊ฐ ์ข
๋ฃ๋ ํ์๋ ์คํ๋ ๋ก์ง
System.out.println("Task is running...");
}
}
// ๋ก์ปฌ ํด๋์ค์ ์ธ์คํด์ค ์์ฑ
Task task = new Task();
// ์๋ก์ด ์ค๋ ๋๋ฅผ ์์ํ๋ฉด์ ๋ก์ปฌ ํด๋์ค ์ธ์คํด์ค ์คํ
Thread thread = new Thread(task);
thread.start(); // ์ค๋ ๋๊ฐ ์์๋๋ฉด ๋ฉ์๋๊ฐ ์ข
๋ฃ๋ ํ์๋ Task๊ฐ ์คํ๋จ
}
public static void main(String[] args) {
LocalClassExample example = new LocalClassExample();
example.startThread();
System.out.println("Main method finished.");
}
}
์คํ ๊ฒฐ๊ณผ
Main method finished.
Task is running...
์ค๋ช
- startThread() ๋ฉ์๋ ๋ด๋ถ์์ Task๋ผ๋ ์ด๋ฆ์ ๋ก์ปฌ ํด๋์ค๋ฅผ ์ ์ํ๋ค. ์ด ํด๋์ค๋ Runnable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ค๋ ๋์์ ์คํ๋ ์ ์๋ค.
- Task ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , ํด๋น ์ธ์คํด์ค๋ฅผ Thread ๊ฐ์ฒด์ ์ ๋ฌํ ๋ค thread.start()๋ฅผ ํธ์ถํ๋ค. ์ด๋ก ์ธํด ์๋ก์ด ์ค๋ ๋๊ฐ ์์๋๊ณ , Task ํด๋์ค์ run() ๋ฉ์๋๊ฐ ์คํ๋๋ค.
- startThread() ๋ฉ์๋๋ ์ค๋ ๋๊ฐ ์คํ๋๋ ๋์ค์ ์ข ๋ฃ๋์ง๋ง, Task ํด๋์ค๋ ์ค๋ ๋ ๋ด์์ ์คํ๋๋ฏ๋ก ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ํ์๋ Task์ run() ๋ฉ์๋๊ฐ ๊ณ์ํด์ ์คํ๋๋ค.
์ด ์์์์์ฒ๋ผ, ๋ก์ปฌ ํด๋์ค๋ ๋ฉ์๋ ๋ด๋ถ์์ ์ ์๋์ง๋ง, ๊ทธ ์ธ์คํด์ค๋ ๋ฉ์๋๊ฐ ์ข ๋ฃ๋ ํ์๋ ์คํ๋ ์ ์๋ค.
2. ์บก์ณ๋ ๋ณ์ ๋ณต์ฌ
- ์๋ฐ์์๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ก์ปฌ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํด์ ๋ก์ปฌ ํด๋์ค๊ฐ ํด๋น ๊ฐ์ ์ฌ์ฉํ๊ฒ ํ๋ค. ์ด๋, ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด ๋ณต์ฌ๋ ๊ฐ๊ณผ ์๋ ๋ณ์์ ๊ฐ์ด ์ผ์นํ์ง ์๊ฒ ๋๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. ์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ํด๋น ๋ณ์๋ final์ด๊ฑฐ๋ effectively final์ด์ด์ผ ํ๋ค๋ ์ ํ์ด ์ ์ฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ, ๋ก์ปฌ ํด๋์ค๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์ ๋ณด์ฅํ๋ค.
3. final ๋๋ effectively final์ ์๋ฏธ
- final: ํด๋น ๋ณ์๊ฐ ํ ๋ฒ๋ง ์ด๊ธฐํ๋๊ณ ๋ณ๊ฒฝ๋์ง ์์์ ์ํ๋ค. ์ฆ, ๋ก์ปฌ ํด๋์ค๊ฐ ์ฐธ์กฐํ๋ ๊ฐ์ด ๋ถ๋ณํ๊ฒ ๋ณด์ฅ๋๋ค.
- effectively final: final ํค์๋๊ฐ ๋ช ์์ ์ผ๋ก ์ ์ธ๋์ง ์์์ง๋ง, ํด๋น ๋ณ์๊ฐ ์ฝ๋์์ ๋ณ๊ฒฝ๋์ง ์์์ ์๋ฏธํ๋ค. ์ด๋ ์๋ฐ 8 ์ดํ๋ถํฐ ๋์ ๋ ๊ฐ๋ ์ผ๋ก, ๋ณ์์ ๊ฐ์ด ํ ๋ฒ ์ค์ ๋ ํ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ฉด effectively final๋ก ๊ฐ์ฃผ๋๋ค.
๊ฒฐ๋ก
๋ก์ปฌ ํด๋์ค์์ ์ฐธ์กฐ๋๋ ๋ณ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ชจ๋ธ๊ณผ ๋์์ ๋ํ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด final ๋๋ effectively final๋ก ์ ํ๋๋ค. ์ด๋ก์จ, ๋ฉ๋ชจ๋ฆฌ์์ ์ฌ๋ผ์ง๊ฑฐ๋ ๋ณ์ง๋ ๋ณ์๋ฅผ ์ฐธ์กฐํ๋ ค๋ ์ํ์ ๋ฐฉ์งํ๊ณ , ์์ ์ ์ธ ์ฝ๋ ๋์์ ๋ณด์ฅํ๋ค.
์ธ๋ถ ํด๋์ค์์ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ณ์๋ค
- ์ฐธ์กฐ ๊ฐ๋ฅ: ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์/static ๋ณ์, ์ธ๋ถ ๋ฉ์๋์ final ๋๋ effectively final ๋ณ์
์ฌ์ฉ ์์
- ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ: ์ด๋ฒคํธ ์ฒ๋ฆฌ์ ํ์ํ ๋ก์ง์ ๋ฉ์๋ ๋ด๋ถ์์ ์ฒ๋ฆฌํด์ผ ํ ๋ Local Class๊ฐ ์ ์ฉํ๋ค.
class Outer {
public void someMethod() {
class Local {
void print() {
System.out.println("This is a local class");
}
}
Local local = new Local();
local.print();
}
}
ํด๋์ค ๋ก๋์ ์์ฑ ์ ๋ฉ๋ชจ๋ฆฌ ๋์
3.3 Anonymouse Inner class (Anonymouse class)
class OuterClass {
void someMethod() {
Runnable r = new Runnable() {
public void run() {
// Anonymous inner class code
}
};
}
}
์กด์ฌ ์ด์
- ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค์ ๊ฐ๋จํ ๊ตฌํ์ฒด๊ฐ ํ์ํ ๊ฒฝ์ฐ, ๋ณ๋์ ํด๋์ค๋ฅผ ์ ์ธํ์ง ์๊ณ ์ต๋ช ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
- ํน์ ๊ฐ์ฒด๊ฐ ํ ๋ฒ๋ง ์ฌ์ฉ๋๊ฑฐ๋ ๋งค์ฐ ์ ํ๋ ๋ฒ์์์ ์ฌ์ฉ๋ ๋ ์ ์ฉํ๋ค. ์ฃผ๋ก ์ฝ๋ฐฑ, ์ด๋ฒคํธ ๋ฆฌ์ค๋, ์ค๋ ๋ ์์ ๋ฑ์์ ์ฌ์ฉ๋๋ค.
- ํน์ ๋ฉ์๋๋ฅผ ํ ๋ฒ๋ง ์ค๋ฒ๋ผ์ด๋ํด์ ์ฌ์ฉํ ๋ ๋ณ๋์ ํด๋์ค๋ฅผ ์ ์ํ๋ ๋์ ์ต๋ช ํด๋์ค๋ฅผ ํตํด ํด๋น ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ ์ ์๋ค.
ํน์ง
- ์ต๋ช ํด๋์ค๋ ์ด๋ฆ์ด ์๋ ๋ด๋ถ ํด๋์ค๋ค.
- ํด๋์ค ์ ์์ ๋์์ ์ธ์คํด์คํ๋๋ค.
- ์ฃผ๋ก ์ธํฐํ์ด์ค๋ ์ถ์ ํด๋์ค๋ฅผ ๊ตฌํํ ๋ ์ฌ์ฉํ๋ค.
- ์ผ์์ ์ผ๋ก ํ ๋ฒ๋ง ์ฌ์ฉํ๊ณ ๋ฒ๋ ค์ง๋ค. ์ฌ์ฌ์ฉ๋์ง ์๋๋ค.
- ์ฌ์ฌ์ฉ์ฑ์ด ์๊ณ ํ์ฅ์ฑ์ ํ์ฉํ๋ ๊ฒ์ด ์ ์ง๋ณด์์ ๋ ๋ถ๋ฆฌํ ๋ ์ฌ์ฉํ๋ค.
์ธ๋ถ ํด๋์ค์์ ์ฐธ์กฐ ๊ฐ๋ฅํ ๋ณ์๋ค
- ์ฐธ์กฐ ๊ฐ๋ฅ: ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ๋ณ์, ์ธ๋ถ ํด๋์ค์ static ๋ณ์, ์ธ๋ถ ๋ฉ์๋์ final ๋๋ effectively final ๋ณ์
์ฌ์ฉ ์์
- ์ด๋ฒคํธ ๋ฆฌ์ค๋: ๋ฒํผ ํด๋ฆญ, ๋ง์ฐ์ค ์ด๋ฒคํธ ๋ฑ ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ๋จํ๊ฒ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ ์ํ๋ ๋ฐ ์ ์ฉํ๋ค.
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Button clicked!");
}
});
ํด๋์ค ๋ก๋์ ์์ฑ ์ ๋ฉ๋ชจ๋ฆฌ ๋์
์ ๋ฆฌ
- Static nested class๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค ์์ด๋ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ์ ๋์ด๊ณ , ์ธ๋ถ ํด๋์ค์์ ๊ฒฐํฉ์ ์ค์ด๋ฉด์ ๋ ผ๋ฆฌ์ ์์ง๋๋ฅผ ์ ์งํ๋ ๋ฐ ์ ๋ฆฌํ๋ค.
- Member inner class๋ ์ธ๋ถ ํด๋์ค์ ์ธ์คํด์ค์ ๋ฐ์ ํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ธ๋ถ ํด๋์ค์ ์ํ๋ฅผ ์ฝ๊ฒ ์ฐธ์กฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
- Local class์ Anonymous class๋ ํน์ ์ปจํ ์คํธ์์๋ง ์กด์ฌํ๋ ์ผ์์ ์ธ ํด๋์ค๋ก, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ๋ช ๋ฃ์ฑ์ ๋์ด๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
'๋น ๊ตฌ๋ฉ ์ฑ์ฐ๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฉ์ด] ํ๋ก์ ๊ฐ์ฒด (0) | 2024.08.19 |
---|---|
[๋์์ธํจํด] ํ๋ก์ ํจํด (0) | 2024.08.19 |
[Java] immutableํ String, mutableํ StringBuilder์ StringBuffer (0) | 2024.08.17 |
[Java] ์๋ฐ ์์ธ ์ ๋ต (0) | 2024.08.17 |
[Java] if ๋ฌธ์ด ์๋๋ฐ switch ๋ฌธ์ ๋ง๋ ์ด์ (0) | 2024.08.17 |