์ถ์ฒ
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์ ์ธ์คํด์ค์ ์ฐ๊ด๋์ด ํ์ ์ ์ฅ๋๋ค.
์ถ์ฒ
์ด ๊ณผ์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์์ ์๋ฃ์์ ํ์ธํ ์ ์์ต๋๋ค:
- Oracle Java Documentation:
- Java Language Specification (JLS): ๋ด๋ถ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ ๊ณต์ ๋ฌธ์์ ๋๋ค.
- Java Virtual Machine Specification (JVMS): JVM์ ํด๋์ค ๋ก๋ฉ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์์ธํ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
- Effective Java (by Joshua Bloch):
- ์๋ฐ์ ํด๋์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํ ๊น์ด ์๋ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค. ๋ด๋ถ ํด๋์ค์ ๊ด๋ จ๋ ๋ด์ฉ๋ ํฌํจ๋์ด ์์ต๋๋ค.
์ด ์๋ฃ๋ค์ Member Inner Class์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ด๋ จ๋ ๊ฐ๋ ์ ์ดํดํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.