...

μ΅λͺ ν΄λμ€ (Anonymous Class)
μ΅λͺ ν΄λμ€λ λ΄λΆ ν΄λμ€(Inner class) μΌμ’ μΌλ‘ λ¨μ΄ κ·Έλλ‘ μ΄λ¦μ΄ μλ ν΄λμ€λ₯Ό λ§νλ€.
μ΅λͺ , μ΄λ¦μ΄ μλ€λ κ²μ λ³λ‘ κΈ°μ΅λμ§ μμλ λλ€λ κ²μ΄λ©°, λμ€μ λ€μ λΆλ¬μ§ μ΄μ κ° μλ€λ λ»μ λ΄ν¬νλ€. μ¦, νλ‘κ·Έλ¨μμ μΌμμ μΌλ‘ νλ²λ§ μ¬μ©λκ³ λ²λ €μ§λ κ°μ²΄λΌκ³ 보면 λλ€. (μΌνμ© ν΄λμ€)
λ³΄ν΅ μ΄λ ν΄λμ€μ μμμ μμ λ°μ μ¬μ μνμ¬ μ¬μ©νκΈ° μν΄μλ λ¨Όμ μμμ΄ λ ν΄λμ€λ₯Ό λ§λ€κ³ μμ(extends) νμ κ°μ²΄ μΈμ€ν΄μ€ μ΄κΈ°νλ₯Ό ν΅ν΄ κ°λ₯νλ€.
// λΆλͺ¨ ν΄λμ€
class Animal {
public String bark() {
return "λλ¬Όμ΄ μλλ€";
}
}
// μμ ν΄λμ€
class Dog extends Animal {
@Override
public String bark() {
return "κ°κ° μ§μ΅λλ€";
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog();
a.bark();
}
}
νμ§λ§ μ΅λͺ ν΄λμ€λ ν΄λμ€ μ μμ λμμ κ°μ²΄λ₯Ό μμ±ν μ μλ€.
λ°λ‘ ν΄λμ€ μ μ μμ΄ λ©μλ λ΄μμ λ°λ‘ ν΄λμ€λ₯Ό μμ±ν΄ μΈμ€ν΄μ€ν ν μ μμΌλ©°, μ΄λ κ² ν΄λμ€μ μ μΈκ³Ό κ°μ²΄μ μμ±μ λμμ νκΈ° λλ¬Έμ λ¨ ν λ²λ§ μ¬μ©λ μ μκ³ , μ΅λͺ μΌλ‘ μ μλ ν΄λμ€λ μΌνμ©μΌλ‘μ¨ μ¬μ©λκ³ λ²λ €μ§λ€. κ·Έλμ λ§μΌ μ΄λ λ©μλμμ λΆλͺ¨ ν΄λμ€μ μμμ μμλ°μ μ¬μ μνμ¬ μ¬μ©ν μμ ν΄λμ€κ° νλ²λ§ μ¬μ©λκ³ λ²λ €μ§ μλ£νμ΄λ©΄, κ΅³μ΄ μλ¨μ ν΄λμ€λ₯Ό μ μν기보λ€λ, μ§μ λ³μμ²λΌ μ΅λͺ ν΄λμ€λ‘ μ μνκ³ μ€νμ΄ λλλ©΄ μμ λλλ‘ νλ κ²μ΄ μ μ§λ³΄μλ©΄μμλ νλ‘κ·Έλ¨ λ©λͺ¨λ¦¬λ©΄μμλ μ΄μ μ μ»μ μ μλ€.
// λΆλͺ¨ ν΄λμ€
class Animal {
public String bark() {
return "λλ¬Όμ΄ μλλ€";
}
}
public class Main {
public static void main(String[] args) {
// μ΅λͺ
ν΄λμ€ : ν΄λμ€ μ μμ κ°μ²΄νλ₯Ό λμμ. μΌνμ±μΌλ‘ μ¬μ©
Animal dog = new Animal() {
@Override
public String bark() {
return "κ°κ° μ§μ΅λλ€";
}
}; // λ¨ μ΅λͺ
ν΄λμ€λ λμ μΈλ―Έμ½λ‘ μ λ°λμ λΆμ¬ μ£Όμ΄μΌ νλ€.
// μ΅λͺ
ν΄λμ€ κ°μ²΄ μ¬μ©
dog.bark();
}
}
μ¦, μ΅λͺ ν΄λμ€λ μ¬μ¬μ©ν νμκ° μλ μΌνμ± ν΄λμ€λ₯Ό κ΅³μ΄ ν΄λμ€λ₯Ό μ μνκ³ μμ±νλ κ²μ΄ λΉν¨μ¨μ μ΄κΈ° λλ¬Έμ, μ΅λͺ ν΄λμ€λ₯Ό ν΅ν΄ μ½λλ₯Ό μ€μ΄λ μΌμ’ μ κΈ°λ²μ΄λΌκ³ λ§ ν μ μλ€.
κΈ°μ‘΄μ μμ ν΄λμ€μ μμμμΌ μ¬μ©νμ§ μκ³ , μ΅λͺ μΌλ‘ μΈλΌμΈ(inline)μΌλ‘ νλ°©μ μ μΈνμ¬ μ¬μ©νκΈ° λλ¬Έμ΄λ€.
μ΄λ¬ν μ΅λͺ ν΄λμ€λ UI μ΄λ²€νΈμ²λ¦¬, μ€λ λ κ°μ²΄ ..λ± λ¨λ°μ± μ΄λ²€νΈ μ²λ¦¬μ μμ£Ό μ μ©λλ€.
μ΅λͺ ν΄λμ€λ μ ν μλ‘μ΄ ν΄λμ€λ₯Ό μ΅λͺ μΌλ‘ μ¬μ©νλ κ²μ΄ μλλΌ, μ΄λ―Έ μ μλμ΄ μλ ν΄λμ€μ λ©€λ²λ€μ μ¬μ μ νμ¬ μ¬μ©ν νμκ° μμλ κ·Έλ¦¬κ³ κ·Έκ²μ΄ μΌνμ±μΌλ‘ μ΄μ©λ λ μ¬μ©νλ κΈ°λ²μ΄λ€.
μ¦, μ΅λͺ ν΄λμ€λ λΆλͺ¨ ν΄λμ€μ μμμ μΌνμ±μΌλ‘ μ¬μ μνμ¬ μ¬μ©νκΈ° μν μ©λ μΈ κ²μ΄λ€.
μ΅λͺ ν΄λμ€λ μ΄λ¦μ΄ μκΈ° λλ¬Έμ μμ±μλ₯Ό κ°μ§ μ μμΌλ©°, κ°μ§ νμλ μλ€.
μ΅λͺ ν΄λμ€ μ μμ
λ€λ§ μ£Όμν΄μΌ ν μ μ΄ μλ€.
κΈ°μ‘΄μ λΆλͺ¨ ν΄λμ€λ₯Ό μμν μμ ν΄λμ€μμλ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ μ ν λΏλ§ μλλΌ μλ‘μ΄ λ©μλλ₯Ό λ§λ€μ΄ μ¬μ©ν μ λ μλ€λ μ μ λ€λ€ μκ³ μμ κ²μ΄λ€.
νμ§λ§ μ΅λͺ ν΄λμ€ λ°©μμΌλ‘ μ μΈνλ€λ©΄ μ€λ²λΌμ΄λ© ν λ©μλ μ¬μ©λ§ κ°λ₯νκ³ , μλ‘ μ μν λ©μλλ μΈλΆμμ μ¬μ©μ΄ λΆκ°λ₯ νλ€.
// λΆλͺ¨ ν΄λμ€
class Animal {
public String bark() {
return "λλ¬Όμ΄ μλλ€";
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Animal() {
// @Override λ©μλ
public String bark() {
return "κ°κ° μ§μ΅λλ€";
}
// μλ‘ μ μν λ©μλ
public String run() {
return "λ¬λ¦¬κΈ° γ±γ±μ±";
}
};
dog.bark();
dog.run(); // ! Error - μΈλΆμμ νΈμΆ λΆκ°λ₯
}
}
κ·Έ μ΄μ λ new Anima() {} λ₯Ό ν΅ν΄μ μμ±νλ μΈμ€ν΄μ€λ λ³λμ ν΄λμ€κ° μλ Animal ν΄λμ€λ₯Ό μμλ°λ μ΅λͺ
ν΄λμ€μ΄κΈ° λλ¬Έμ, λΆλͺ¨μΈ Animal ν΄λμ€ μ체μλ run() λ©μλκ° μ μΈλμ΄ μμ§ μκΈ° λλ¬Έμ μ¬μ©νμ§ λͺ»νλ κ²μ΄λ€. (λ€νμ±μ λ²μΉμ λ°λ₯Έλ€)
κ·Έλ¬λ―λ‘ μλ‘ μ μν λ©μλλ μΈλΆ μ€μ½νμμ νΈμΆν μ μκ³ , μ΅λͺ ν΄λμ€ λ΄μμλ§ νΈμΆμ΄ κ°λ₯νλ€.
μ΅λͺ ν΄λμ€λ λ΄λΆ ν΄λμ€μ μΌμ’ μ΄κΈ° λλ¬Έμ, μΈλΆμ μ§μ λ³μλ₯Ό μ΄μ©νλ €κ³ ν λ λκ°μ΄ λ΄λΆ ν΄λμ€μ μ μ½μ λ°κ² λλ€. λ°λΌμ λ΄λΆ ν΄λμ€μμ κ°μ Έμ¬ μ μλ μΈλΆ λ³μλ final μμμΈ κ²λ§ κ°μ Έμ μ¬μ©ν μ μλ€.
μ΅λͺ ν΄λμ€ μ μΈ μμΉ
μ΄λ¬ν μ΅λͺ ν΄λμ€λ₯Ό μ΄λμ μ μΈνλλμ λ°λΌ λ€μν νμ©λ μ μλ€.
λ체μ μΌλ‘ 3κ°μ§ μ λλ‘ μ‘΄μ¬νλ€κ³ λ³Έλ€.
1. ν΄λμ€ νλλ‘ μ΄μ©
- νΉμ ν΄λμ€ λ΄λΆμμ μ¬λ¬ λ©μλμμ μ΄μ©λ λ κ³ λ €ν΄λ³Ό λ§ νλ€.
class Animal { ... }
class Creature {
// νλμ μ΅λͺ
μμ κ°μ²΄λ₯Ό μμ± νμ¬ μ΄μ©
Animal dog = new Animal() {
public String bark() {
return "λ©λ©";
}
};
public void method() {
dog.bark();
}
public void method2() {
dog.bark();
}
}
2. μ§μ λ³μλ‘μ μ΄μ©
- λ©μλμμ μΌνμ©μΌλ‘ μ¬μ©νκ³ λ²λ €μ§ ν΄λμ€λΌλ©΄ μ λΉνλ€
class Animal { ... }
class Creature {
// ...
public void method() {
// μ§μ λ³μκ°μ΄ ν΄λμ€λ₯Ό μ μΈνμ¬ μΌνμ©μΌλ‘ μ¬μ©
Animal dog = new Animal() {
public String bark() {
return "λ©λ©";
}
};
dog.bark();
}
}
3. λ©μλ μκ·λ¨ΌνΈλ‘ μ΄μ©
- λ§μΌ λ©μλ 맀κ°λ³μλ‘μ ν΄λμ€ μλ£νμ΄ μ΄μ©λλ€κ³ ν λ μΌνμ±μΌλ‘λ§ μ¬μ©νλ€λ©΄ μκ·λ¨ΌνΈλ‘ μ΅λͺ κ°μ²΄λ₯Ό λ겨주면 λλ€.
class Animal { ... }
class Creature {
// ...
public void method(Animal dog) { // μ΅λͺ
κ°μ²΄ 맀κ°λ³μλ‘ λ°μ μ¬μ©
dog.bark();
}
}
public class Main {
public static void main(String[] args) {
Creature monster = new Creature();
// λ©μλ μκ·λ¨ΌνΈμ μ΅λͺ
ν΄λμ€ μ체λ₯Ό μ
λ ₯κ°μΌλ‘ ν λΉ
monster.method(new Animal() {
public String bark() {
return "λ©λ©";
}
});
}
}
μ΅λͺ ν΄λμ€ μ»΄νμΌ
λ΄λΆ ν΄λμ€λ₯Ό μ»΄νμΌ νλ©΄ $ κΈ°νΈκ° λ€μ΄κ° ν΄λμ€λͺ
.class νμΌμ μ»κ² λλ€.
μ΅λͺ ν΄λμ€λ λ΄λΆ ν΄λμ€μ μΌμ’ μ΄λ λ§μ°¬κ°μ§μ΄λ€.
Main.java νμΌμμ Animal ν΄λμ€μ μ΅λͺ
κ°μ²΄λ₯Ό μ μνλ€λ©΄, μ»΄νμΌ λλ©΄ Main.class, Animal.class, Animal$1.class μ΄λ κ² 3κ° ν΄λμ€ νμΌμ΄ μκΈ°κ² λλ€.
μ΅λͺ
ν΄λμ€ νμΌ λΆλΆμ΄ Animal$1.class μΈλ°, Animal ν΄λμ€λ₯Ό μ΄μ©ν΄ λ§λ μ΅λͺ
ν΄λμ€λ₯Ό μ΄λ¦μ΄ μλ μμ ν΄λμ€λκΉ $1 μΌλ‘ ννν κ²μ΄λ€.
λ§μ½ μ΅λͺ
κ°μ²΄λ₯Ό 2κ° μ μνλ€λ©΄, Animal$1.class, Animal$2.class μμΌλ‘, μλ°νμΌλͺ
${μ΅λͺ
κ°μ²΄μ μλμλ²}.class κ·μΉμμΌλ‘ ν΄λμ€ νμΌμ΄ μκΈ°κ² λλ€. μλνλ©΄ μ΅λͺ
κ°μ²΄ λΌλ¦¬λ μ무리 λ΄μ©μ΄ λκ°λ€κ³ νλλΌλ μ ν μλ‘ λ€λ₯Έ κ°μ²΄μ΄κΈ° λλ¬Έμ λ³κ°λ‘ μ·¨κΈλκΈ° λλ¬Έμ΄λ€.
// λΆλͺ¨ ν΄λμ€
class Animal {
public String bark() {
return "λλ¬Όμ΄ μλλ€";
}
}
// Main.java νμΌ
public class Main {
public static void main(String[] args) {
// μ΅λͺ
κ°μ²΄ $1
Animal dog = new Animal() {
@Override
public String bark() {
return "κ°κ° μ§μ΅λλ€";
}
};
// μ΅λͺ
κ°μ²΄ $2
Animal cat = new Animal() {
@Override
public String bark() {
return "κ³ μμ΄κ° μλλ€";
}
};
// ...
}
}

μ€μ λ‘ μ½λ μμμ κ°μ²΄μ ν΄λμ€ μ΄λ¦μ νμΈνλ©΄ μμ κ°μ ννλ‘ μΆλ ₯λκ² λλ€.
// λΆλͺ¨ ν΄λμ€
class Animal {
}
// Main.java νμΌ
public class Main {
public static void main(String[] args) {
// μ΅λͺ
κ°μ²΄ $1
Animal dog = new Animal() {
};
// μ΅λͺ
κ°μ²΄ $2
Animal cat = new Animal() {
};
System.out.println(dog.getClass().getName()); // Main$1
System.out.println(cat.getClass().getName()); // Main$2
}
}
μΈν°νμ΄μ€ μ΅λͺ ꡬν κ°μ²΄
μ§κΈκΉμ§ μ΅λͺ ν΄λμ€ μ¬μ© λ°©λ²μ λ°°μ μ§λ§, μ¬μ€ μ€λ¬΄μμ λ©μ©‘ν ν΄λμ€ λλκ³ μ΅λͺ ν΄λμ€λ‘ μ¬μ©νλ μΌμ κ±°μ μλ€.
νμ§λ§ μλ°μ μ΅λͺ ν΄λμ€ κΈ°λ²μ μ§κ°λ μΈν°νμ΄μ€λ₯Ό μ΅λͺ κ°μ²΄λ‘ μ μΈνμ¬ μ¬μ©ν λ μ΄λ€.
μμμ μ΅λͺ ν΄λμ€λ μΌνμ± μ€λ²λΌμ΄λ© μ© μ΄λΌκ³ νμ΅ν λ° μλ€.
μ΄λ¬ν νΉμ§κ³Ό μ λ§λ¬Όλ € μΆμν κ΅¬μ‘°μΈ μΈν°νμ΄μ€λ₯Ό μΌνμ©μΌλ‘ ꡬννμ¬ μ¬μ©ν νμκ° μμλ, μ΅λͺ ꡬν κ°μ²΄λ‘ μ μΈν΄μ μ¬μ©νλ©΄ λ§€μ° μλμ§κ° μ λ§κ² λλ€.
// μΈν°νμ΄μ€
interface IAnimal {
public String bark(); // μΆμ λ©μλ
public String run();
}
public class Main {
public static void main(String[] args) {
// μΈν°νμ΄μ€ μ΅λͺ
ꡬν κ°μ²΄ μμ±
IAnimal dog = new IAnimal() {
@Override
public String bark() {
return "κ°κ° μ§μ΅λλ€";
}
@Override
public String run() {
return "κ°κ° λ¬λ¦½λλ€";
}
};
// μΈν°νμ΄μ€ ꡬν κ°μ²΄ μ¬μ©
dog.bark();
dog.run();
}
}
μμ μ½λ λͺ¨μ΅μ 보면, λ§μΉ μΈν°νμ΄μ€λ₯Ό ν΄λμ€ μμ±μ μ²λΌ μ΄κΈ°ννμ¬ μΈμ€ν΄μ€ν ν κ² κ°μ 보μΈλ€.
νμ§λ§ μλ€μνΌ μΈν°νμ΄μ€ μ체λ‘λ κ°μ²΄λ₯Ό λ§λ€μλ μλ€.
μμ μ½λμμnew μΈν°νμ΄μ€λͺ ()μ κ·Έλ κ² λ³΄μΌ λΏμ΄μ§, μ¬μ€ μμ ν΄λμ€λ₯Ό μμ±ν΄μimplementsνκ³ ν΄λμ€ μ΄κΈ°ν ν κ²κ³Ό λ€λ¦μ΄ μλ€.
κ·Έλ₯ μ΅λͺ ν΄λμ€λ₯Ό μμ±ν¨κ³Ό λμμ κ°μ²΄λ₯Ό μμ±νλλ‘νλ Javaμ λ¬Έλ²μΌλ‘ 보면 λλ€.
λΉμ°ν μΆμ ν΄λμ€(abstract class)λ μ΄λ°μμΌλ‘ μ΅λͺ ꡬν κ°μ²΄ μμ±μ΄ κ°λ₯νλ€.
μλλ ν΄λμ€κ° μΈν°νμ΄μ€λ₯Ό ꡬνν ν μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ‘ κ°μ²΄λ₯Ό λ§λ€μ΄μΌνλλ°, μμ μ½λλ μΈν°νμ΄μ€λ₯Ό λ°λ‘ꡬνν΄μ ꡬνν ν΄λμ€λͺ μ΄ μμ΄ κ°μ²΄λ₯Ό λ§λ€κΈ° λλ¬Έμ μ΄λ₯Ό μ΅λͺ ꡬν κ°μ²΄λΌκ³ λΆλ₯Έλ€.
μΌλ° μμ μ΅λͺ κ°μ²΄μ λ€λ₯Έ μ μ μμκ³Ό λ€λ₯΄κ² μΈν°νμ΄μ€λ κ°μ μ μΌλ‘ λ©μλ μ μλ₯Ό ν΅ν΄ μ¬μ©ν΄μΌνλ κ·μ½μ΄ μκΈ° λλ¬Έμ κ·κ²©νμ λμμ΄ λλ€.
μ΄λ¬ν μ΅λͺ ꡬν κ°μ²΄ νμμ, λ§μ½ μ°λ λλ₯Ό 곡λΆνλ€λ©΄ Runnable κ³Ό κ°μ ννλΌλ κ±Έ λμΉμ±μ± μ μμ κ²μ΄λ€.
μμ§ μ°λ λλ₯Ό 곡λΆνμ§ μμ λΆλ€μ, λμ€μ λ°°μ°κ² μ§λ§ Runnable, Thread μ μΈ νλ λ°©λ²λ μ΄μ λΉμ·ν λ¬Έλ² λ°©μμ΄λΌκ³ μκ° νλ©΄ λλ€.
μ΅λͺ ꡬν κ°μ²΄ νμ©
μΈν°νμ΄μ€ μ΅λͺ ꡬν κ°μ²΄λ μμμ μ΄ν΄λ³΄μλ λ©μλμ μκ·λ¨ΌνΈλ‘ μΌνμ± κ°μ²΄λ₯Ό λ겨주λ λ°©λ²μΌλ‘ μμ£Ό μ μ©λμ΄ μ¬μ©λλ€.
// μ°μ°μμ μΆμνν μΈν°νμ΄μ€
interface Operate {
int operate(int a, int b);
}
// κ³μ°μ λ΄λΉνλ ν΄λμ€
class Calculator {
// κ³μ°ν λ μλ₯Ό μ μ₯νλ νλ
private final int a;
private final int b;
// μμ±μ
public Calculator(int a, int b) {
this.a = a;
this.b = b;
}
// μΈν°νμ΄μ€ νμ
μ 맀κ°λ³μλ‘ λ°λ λ©μλ (λ€νμ±)
public int caculate(Operate op) {
return op.operate(this.a, this.b); // 맀κ°λ³μ κ°μ²΄μ λ©μλ μ€ννμ¬ λ¦¬ν΄
}
}
public class Main {
public static void main(String[] args) {
// κ³μ°ν λ μ
int num1 = 20;
int num2 = 10;
// Calculator ν΄λμ€ μμ±νλ©° κ³μ° ν μλ₯Ό ν΄λμ€ νλμ μ μ₯
Calculator calculator = new Calculator(num1, num2);
// calculator.caculate() λ©μλ μΈμλ‘, operate() μΆμ λ©μλλ₯Ό λνκΈ° μ°μ°μ΄ λλλ‘ μ¬μ μν μ΅λͺ
ꡬν κ°μ²΄λ₯Ό λκΉ
// calculator.caculate() 맀μλ λ΄μμ μ¬μ μλ operate() λ©μλκ° μ€νλμ΄ a + bκ° λ¦¬ν΄ λ¨
int result = calculator.caculate(new Operate() {
public int operate(int a, int b) {
return a + b;
}
});
System.out.println(result); // 30
// calculator.caculate() λ©μλ μΈμλ‘, operate() μΆμ λ©μλλ₯Ό λΉΌκΈ° μ°μ°μ΄ λλλ‘ μ¬μ μν μ΅λͺ
ꡬν κ°μ²΄λ₯Ό λκΉ
// calculator.caculate() 맀μλ λ΄μμ μ¬μ μλ operate() λ©μλκ° μ€νλμ΄ a - bκ° λ¦¬ν΄ λ¨
int result2 = calculator.caculate(new Operate() {
public int operate(int a, int b) {
return a - b;
}
});
System.out.println(result2); // 10
}
}


μμ μμ μ½λλ‘λ μ΅λͺ κ°μ²΄ 맀κ°λ³μ κΈ°λ²μ΄ μ μλΏμ§ μμμλ μλ€.
λ€μμ μ€μ μλ° νλ‘κ·Έλλ°μμ μ¬μ©λλ Comparator μΈν°νμ΄μ€λ‘ μ΅λͺ
ꡬν κ°μ²΄λ₯Ό λ§λ€μ΄ Arrays.sort() λ©μλμ μκ·λ¨ΌνΈλ‘ 보λ΄μ΄, κ°μ²΄ λ°°μ΄ users λ₯Ό λμ΄μμΌλ‘ μ λ ¬νλ μ½λ μ΄λ€.
import java.util.Arrays;
import java.util.Comparator; // Comparator μΈν°νμ΄μ€λ₯Ό λΆλ¬μ¨λ€
public class Main {
public static void main(String[] args) {
class User {
String name;
int age;
User(String name, int age) {
this.name = name;
this.age = age;
}
}
User[] users = {
new User("νκΈΈλ", 32),
new User("κΉμΆμΆ", 64),
new User("μκΊ½μ ", 48),
new User("λ°νκ±°μΈ", 14),
};
// Arrays.sort(λ°°μ΄, Comparator μ΅λͺ
ꡬν κ°μ²΄);
Arrays.sort(users, new Comparator<User>() {
@Override
public int compare(User u1, User u2) {
return Integer.compare(u1.age, u2.age); // Integer ν΄λμ€μ μ μλ compare ν¨μλ‘ λ κ°κ²© μ μ μμκ°μ λΉκ΅
}
});
// μΆλ ₯
for (User u : users) {
System.out.println(u.name + " " + u.age + "μΈ");
}
}
}
λ°νκ±°μΈ 14μΈ
νκΈΈλ 32μΈ
μκΊ½μ 48μΈ
κΉμΆμΆ 64μΈ
μ΅λͺ ꡬν κ°μ²΄ νκ³μ
μ΅λͺ ꡬν κ°μ²΄μ νκ³μ μ μ€λ‘μ§ νλμ μΈν°νμ΄μ€λ§ ꡬννμ¬ κ°μ²΄λ₯Ό μμ±ν μ μλ€λ μ μ΄λ€.
μΈν°νμ΄μ€μ κ°μ₯ ν° λ³Έμ§μ λ€μ€ μμ(ꡬν)μ΄ κ°λ₯νλ€λ κ²μΈλ°, λ μ΄μμ μΈν°νμ΄μ€λ₯Ό κ°κ±°λ, νλμ ν΄λμ€λ₯Ό μμ λ°κ³ λμμ μΈν°νμ΄μ€λ₯Ό ꡬννλ ννλ‘λ μ΅λͺ ꡬν κ°μ²΄λ‘ λΆκ°λ₯νλ€.
λ°λΌμ μ΄μ©μ μμ΄ μΌνμ© μ©λμΌμ§λΌλ λ€μ€ ꡬνν ν΄λμ€λ λ°λ‘ μ μνμ¬ μ¬μ©ν΄μΌ νλ€.
interface IAnimal {
}
interface ICreature {
}
abstract class myClass {
}
public class Main {
public static void main(String[] args) {
// μΈν°νμ΄μ€ λκ°λ₯Ό ꡬνν μΌνμ© ν΄λμ€ (μΌνμ© μ΄λΌλ μ΄μ©μ μμ΄ λ°λ‘ μ μΈ)
class useClass1 implements IAnimal, ICreature {
}
// ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό μμ, ꡬνν μΌνμ© ν΄λμ€ (μΌνμ© μ΄λΌλ μ΄μ©μ μμ΄ λ°λ‘ μ μΈ)
class useClass2 extends myClass implements IAnimal {
}
useClass1 u1 = new useClass1() {
};
useClass2 u2 = new useClass2() {
};
}
}
μ΅λͺ κ°μ²΄μ λλ€ ννμ
μ΅λͺ ν΄λμ€ κΈ°λ²μ λ³΄λ€ κΈΈλ€λκ³ λ³΅μ‘ν μλ° λ¬Έλ²μ κ°κ²°νκ² νλ κ²μ μ΄μ μ λλ€. κ·Έλμ java8μ λλ€μ λ¬Έλ²κ³Ό λ§€μ° μ μ΄μΈλ¦¬λ©°, μ€μ λ‘ μ΄ λμ κ°μ΄ μ λ§ λ§μ΄ μ°μΈλ€.
μλ₯Ό λ€μ΄ λ€μκ³Ό κ°μ μ΅λͺ ꡬν κ°μ²΄λ₯Ό λλ€μμ μ΄μ©ν΄ νκΈ°μ μΌλ‘ μ½λλ₯Ό μ€ μΌ μ μλ€.
Operate operate = new Operate() {
public int operate(int a, int b) {
return a + b;
}
};
// λλ€μμΌλ‘ μ€μ΄κΈ°
Operate operate = (a, b) -> {
return a + b;
};
// λ μ§§κ² μ€μ΄κΈ° (λ¦¬ν΄ μ½λλ§ μλ€λ©΄ μλ΅μ΄ κ°λ₯)
Operate operate = (a, b) -> a + b;
β λλ€ ννμ(Lambda Expression) μλ²½ μ 리
λλ€ ννμ (Lambda Expression) λλ€ ννμ(lambda expression)μ΄λ ν¨μν νλ‘κ·Έλλ°μ ꡬμ±νκΈ° μν ν¨μμμ΄λ©°, κ°λ¨ν λ§ν΄ μλ°μ λ©μλλ₯Ό κ°κ²°ν ν¨μ μμΌλ‘ ννν κ²μ΄λ€. μ§κΈκΉμ§ μλ°μ
inpa.tistory.com
μ΄λ¬ν λλ€μ ννμ μ΅λͺ ꡬν κ°μ²΄λ μΈμ μ΄λμλ λ§λ€ μ μλ κ²μ μλκ³ 2κ°μ§ μ λ μ μ½μ΄ μλ€.
- μΈν°νμ΄μ€λ‘λ§ λ§λ€ μ μλ€.
- νλμ μΆμ λ©μλλ§ μ μΈλμ΄ μλ μΈν°νμ΄μ€λ§ κ°λ₯νλ€. (λ¨, default λ©μλλ μ μΈ)
μλ₯Όλ€μ΄ λκ° μ΄μμ μΆμ λ©μλκ° μ μ λμ΄ μλ μΈν°νμ΄μ€ κ°μ κ²½μ° κΈ°μ‘΄μ λ°©μλλ‘ κ°λ μ±μ΄ μ’μ§ μμλ μ¬μ© νμ¬μΌ νλ€. λ¨, default λ©μλλ μΆμ λ©μλκ° μλκΈ° λλ¬Έμ μμΈλ‘ μΉλ€.
public interface Operate {
// μΆμ λ©μλκ° νλμ΄λ€
int operate(int a, int b);
// default λ©μλλ μΆμ λ©μλμ ν¬ν¨λμ§ μλλ€
default void print() {
System.out.println("μΆλ ₯");
}
}
Operate operate = (a, b) -> {
print();
return a + b;
};
λ§μ§λ§μΌλ‘ μμ Operate μΈν°νμ΄μ€μ Caculate ν΄λμ€μ μ½λ μμ λ₯Ό λλ€ ννμμΌλ‘ μΉννλ©΄ μλμ κ°μ΄ λλ€.
public class Main {
public static void main(String[] args) {
// κ³μ°ν λ μ
int num1 = 20;
int num2 = 10;
// Calculator ν΄λμ€ μμ±νλ©° κ³μ° ν μλ₯Ό ν΄λμ€ νλμ μ μ₯
Calculator calculator = new Calculator(num1, num2);
// operate() μΆμ λ©μλλ₯Ό λνκΈ° μ°μ°μ΄ λλλ‘ μ¬μ μν μ΅λͺ
ꡬν κ°μ²΄
Operate operate = (a, b) -> a + b;
// calculator.caculate() 맀μλμ λλ€μμ λ£μ
int result = calculator.caculate(operate);
System.out.println(result); // 30
// μλλ©΄ λλ€μ μ체λ₯Ό λ©μλ μΈμλ‘ λ°λ‘ λκ²¨μ€ μ λ μλ€.
int result2 = calculator.caculate((a, b) -> {
return a - b;
});
System.out.println(result2); // 10
}
}
# μ°Έκ³ μλ£
https://www.codelatte.io/courses/java_programming_basic/O2PZAC2T82LKBXAY
μ΄ κΈμ΄ μ’μΌμ ¨λ€λ©΄ ꡬλ & μ’μμ
μ¬λ¬λΆμ ꡬλ
κ³Ό μ’μμλ
μ μμκ² ν° νμ΄ λ©λλ€.