μ€μ²© ν΄λμ€
ν΄λμ€ λ΄λΆμ μ μΈνλ ν΄λμ€
μ€μ²© ν΄λμ€μ νΉμ§
β’
ν΄λμ€ λ΄λΆμ μ μΈν ν΄λμ€μ
λλ€.
β’
νΉμ ν΄λμ€μ μμ‘΄νλ ν΄λμ€λ₯Ό μ μν λ μ¬μ©ν©λλ€.
β’
λ°κΉ₯ ν΄λμ€(Outer Class)μ λ΄λΆ ν΄λμ€(Inner Class)λ‘ κ΅¬μ±λ©λλ€.
β’
κ°κ° Outer/Inner ν΄λμ€μ λ©€λ²μ μ½κ² μ κ·Ό κ°λ₯ν©λλ€.
μ€μ²© ν΄λμ€μ λΆλ₯
β’
λ©€λ² ν΄λμ€
β¦
μΈμ€ν΄μ€ μ΄λ ν΄λμ€
β¦
static μ΄λ ν΄λμ€
β’
λ‘컬 ν΄λμ€
β¦
λ©μλ μ΄λ ν΄λμ€
β¦
μ΅λͺ
μ΄λ ν΄λμ€
1. λ©€λ² ν΄λμ€
λ©€λ² ν΄λμ€λ ν΄λμ€μ λ©€λ²λ‘ μ μΈλ ν΄λμ€λ‘, λ°κΉ₯ ν΄λμ€μ λ©€λ² νλμ κ°μ μμΉμ μ μΈλ©λλ€.
μΈμ€ν΄μ€ μ΄λ ν΄λμ€
μΈμ€ν΄μ€ μ΄λ ν΄λμ€λ λ°κΉ₯ ν΄λμ€μ μΈμ€ν΄μ€μ μ’
μμ μΈ ν΄λμ€μ
λλ€.
β’
λ°κΉ₯ ν΄λμ€μ μΈμ€ν΄μ€κ° μμ±λμ΄μΌ μ¬μ©ν μ μμ΅λλ€.
β’
λ°κΉ₯ ν΄λμ€μ λͺ¨λ λ©€λ²(private ν¬ν¨)μ μ κ·Όν μ μμ΅λλ€.
β’
static λ©€λ²λ₯Ό μ μΈν μ μμ΅λλ€(JDK 16λΆν°λ κ°λ₯).
class Outer {
private int outerField = 10;
class Inner {
void method() {
// λ°κΉ₯ ν΄λμ€μ private νλμ μ κ·Ό κ°λ₯
System.out.println(outerField);
}
}
}
// μ¬μ© μμ
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
Java
볡μ¬
static μ΄λ ν΄λμ€
static μ΄λ ν΄λμ€λ λ°κΉ₯ ν΄λμ€μ μΈμ€ν΄μ€μ λ
립μ μΌλ‘ μ¬μ©ν μ μλ μ μ λ©€λ² ν΄λμ€μ
λλ€.
β’
λ°κΉ₯ ν΄λμ€μ μΈμ€ν΄μ€ μμ΄λ μμ±νμ¬ μ¬μ©ν μ μμ΅λλ€.
β’
λ°κΉ₯ ν΄λμ€μ static λ©€λ²λ§ μ κ·Όν μ μμ΅λλ€.
β’
static λ©€λ²λ₯Ό μ μΈν μ μμ΅λλ€.
class Outer {
private static int staticOuterField = 20;
private int instanceField = 10;
static class StaticInner {
void method() {
// λ°κΉ₯ ν΄λμ€μ static λ©€λ²μλ§ μ κ·Ό κ°λ₯
System.out.println(staticOuterField);
// System.out.println(instanceField); // μ€λ₯ λ°μ
}
}
}
// μ¬μ© μμ
Outer.StaticInner staticInner = new Outer.StaticInner();
Java
볡μ¬
μ€μ²© ν΄λμ€ κ°μ²΄ μμ±
2. λ‘컬 ν΄λμ€
λ‘컬 ν΄λμ€λ λ©μλ λ΄λΆλ νΉμ λΈλ‘ μμμ μ μΈλλ ν΄λμ€μ
λλ€.
β’
λ©μλ μ΄λ ν΄λμ€
β’
μ΅λͺ
μ΄λ ν΄λμ€
λ©μλ μ΄λ ν΄λμ€
λ©μλ μ΄λ ν΄λμ€λ λ©μλ λ΄λΆμμ μ μΈλκ³ μ¬μ©λλ ν΄λμ€μ
λλ€.
β’
λ©μλκ° μ€νλ λλ§ μ¬μ©ν μ μμ΅λλ€.
β’
λ©μλμ μ§μ λ³μλ 맀κ°λ³μλ₯Ό μ¬μ©ν μ μμΌλ, μ΄λ€μ final λλ effectively finalμ΄μ΄μΌ ν©λλ€.
β’
λ©μλ μΈλΆμμλ μ κ·Όν μ μμ΅λλ€.
class Outer {
void method(final int param) {
final int localVar = 30;
class LocalInner {
void innerMethod() {
// λ©μλμ 맀κ°λ³μμ μ§μλ³μ μ¬μ© κ°λ₯
System.out.println(param);
System.out.println(localVar);
}
}
// λ©μλ λ΄μμλ§ μ¬μ© κ°λ₯
LocalInner local = new LocalInner();
local.innerMethod();
}
}
Java
볡μ¬
μ΅λͺ μ΄λ ν΄λμ€
μ΅λͺ
μ΄λ ν΄λμ€λ μ΄λ¦μ΄ μλ λ‘컬 ν΄λμ€λ‘, μ μΈκ³Ό λμμ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
β’
μΌνμ±μΌλ‘ μ¬μ©λλ ν΄λμ€λ₯Ό κ°νΈνκ² κ΅¬νν λ μ μ©ν©λλ€.
β’
μΈν°νμ΄μ€λ μΆμ ν΄λμ€λ₯Ό μ¦μμμ ꡬνν λ μ£Όλ‘ μ¬μ©ν©λλ€.
β’
μμ±μλ₯Ό μ μΈν μ μμ΅λλ€.
interface Clickable {
void onClick();
}
class Button {
void setClickListener(Clickable clickable) {
// ν΄λ¦ μ΄λ²€νΈ μ²λ¦¬ λ‘μ§
}
}
class Example {
void example() {
Button button = new Button();
// μ΅λͺ
μ΄λ ν΄λμ€λ‘ μΈν°νμ΄μ€ ꡬν
button.setClickListener(new Clickable() {
@Override
public void onClick() {
System.out.println("λ²νΌμ΄ ν΄λ¦λμμ΅λλ€.");
}
});
}
}
Java
볡μ¬
μ€μ²© ν΄λμ€ μ¬μ© μ μ£Όμμ¬ν
β’
μ€μ²© ν΄λμ€λ μ½λμ κ°λ
μ±κ³Ό μ μ§λ³΄μμ±μ κ³ λ €νμ¬ μ μ ν μ¬μ©ν΄μΌ ν©λλ€.
β’
κ³Όλν μ€μ²©μ μ½λμ 볡μ‘μ±μ μ¦κ°μν¬ μ μμ΅λλ€.
β’
λ©λͺ¨λ¦¬ λμ λ°©μ§λ₯Ό μν΄ λ΄λΆ ν΄λμ€κ° μΈλΆ ν΄λμ€μ μ°Έμ‘°λ₯Ό λΆνμνκ² μ€λ μ μ§νμ§ μλλ‘ μ£Όμν΄μΌ ν©λλ€.
β’
Java 8 μ΄νμλ λλ€ ννμμ΄ μ΅λͺ
ν΄λμ€λ₯Ό λ체ν μ μλ κ²½μ°κ° λ§μΌλ―λ‘, μ μ ν μ ννμ¬ μ¬μ©νλ κ²μ΄ μ’μ΅λλ€.