π οΈBackend/βJava
[Java] μλ° ν¨μν μΈν°νμ΄μ€μ λλ€μ(Lambda Expression) μ½κ² λ°°μ°κΈ°
junbin2
2025. 5. 23. 17:59
β 1. λλ€μμ΄λ?
// ν¨μν μΈν°νμ΄μ€
@FunctionalInterface
interface Printer {
void print(String message);
}
// Main
public class Main {
public static void main(String[] args) {
Printer printer = (message) -> System.out.println("μΆλ ₯:" + message); // μ΅λͺ
ν¨μμ μ
printer.print("print, message") // μ μ λ ν¨μ νΈμΆ
}
}
- ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλλ₯Ό κ°κ²°νκ² νννλ λ¬Έλ²μ μλ―Ένλ€.
- λλ€μμ μ€μ§ μΆμ λ©μλκ° νλμΈ μΈν°νμ΄μ€ μμλ§ μ¬μ©μ΄ κ°λ₯νλ©°, μ΄λ₯Ό ν¨μν μΈν°νμ΄μ€λΌκ³ νλ€.
- μ΅λͺ ꡬν ν΄λμ€μ κ°μ²΄ μμ± λΆλΆλ§ λλ€μμΌλ‘ ννν¨.
- λ©μλκ° νλλ§ μκΈ° λλ¬Έμ λ©μλ μ΄λ¦μ μλ΅ ν μ μμΌλ©°, μ΄λλ¬Έμ λλ€μμ μ΅λͺ ν¨μλ‘λ λΆλ¦°λ€.
β 2. λλ€μκ³Ό μ΅λͺ ν΄λμ€
// λλ€μ
Printer printer = msg -> System.out.println("λ°μ λ©μμ§: " + msg);
// μ΅λͺ
ν΄λμ€
Printer printer = new Printer() {
@Override
public void print(String msg) {
System.out.println("λ°μ λ©μμ§: " + msg);
}
};
- λλ€μμ μ΅λͺ ν΄λμ€μ λ¨μ μ 보μνκ³ μ μλ° 8μμ λμ λ κΈ°λ₯μ΄λ€.
- μ¦, λλ€μμ μ΅λͺ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ§λ€μκΈ° λλ¬Έμ, κΈ°λ₯μ μΌλ‘λ μμ λμΌνκ² λμμ νλ€.
- μΈν°νμ΄μ€μ ꡬν체 ν΄λμ€λ₯Ό λ§λ€μ§ μκ³ , μ΅λͺ ν΄λμ€λ‘ ꡬνμ νκΈ° λλ¬Έμ μ΅λͺ ν΄λμ€μΈκ²μ΄λ€.
- μ¦, λλ€μμ λ΄λΆμ μΌλ‘ μ΅λͺ ꡬνκ°μ²΄κ° λμ΄κ°μ§λ§, λ³Ό λλ μμ΄ λμ΄κ°λ κ²μ²λΌ λ³΄μΌ μ μλ€.
β 3. λλ€μ νν μ’ λ₯
(1) λ§€κ°λ³μ μλ£ν μλ΅ κ°λ₯ - μΈν°νμ΄μ€μμ λ§€κ°λ³μ νμ μ μ μ μμΌλ©΄ μλ£ν μλ΅μ΄ κ°λ₯νλ€.
@FunctionalInterface
interface Calculator {
int operate(int a, int b);
}
Calculator add = (a, b) -> a + b; // μλ£ν μλ΅
System.out.println(add.operate(3, 5)); // μΆλ ₯: 8
(2) λ§€κ°λ³μκ° 1κ°λ©΄ κ΄νΈ μλ΅μ΄ κ°λ₯νλ€.
@FunctionalInterface
interface Printer {
void print(String message);
}
Printer printer = message -> System.out.println("μΆλ ₯: " + message); // κ΄νΈ μλ΅
printer.print("Hello");
(3) λ§€κ°λ³μκ° 0κ°λ©΄ κ΄νΈλ§ λ¨κΈ΄λ€.
@FunctionalInterface
interface Greeter {
void greet();
}
Greeter greeter = () -> System.out.println("μλ
νμΈμ!"); // κ΄νΈλ§ λ¨μ
greeter.greet();
(4) μ€νλ¬Έμ΄ 1κ°λ©΄ μ€κ΄νΈ μλ΅μ΄ κ°λ₯νλ€.
@FunctionalInterface
interface Squarer {
int square(int x);
}
Squarer s = x -> x * x; // μ€νλ¬Έ 1κ°, μ€κ΄νΈ μλ΅
System.out.println(s.square(4)); // μΆλ ₯: 16
(5) μ€νλ¬Έμ΄ return νλλ©΄ return + μΈλ―Έμ½λ‘ + μ€κ΄νΈ μλ΅μ΄ κ°λ₯νλ€.
@FunctionalInterface
interface Adder {
int add(int a, int b);
}
// μ΄κ±΄ μλ΅ μ
Adder a1 = (a, b) -> { return a + b; };
// μ΄κ±΄ μλ΅ ν
Adder a2 = (a, b) -> a + b; // return, μ€κ΄νΈ, μΈλ―Έμ½λ‘ λͺ¨λ μλ΅
System.out.println(a2.add(2, 3)); // μΆλ ₯: 5
β 4. μ 리
- λλ€μμ μΈν°νμ΄μ€λ₯Ό μ΅λͺ ν΄λμ€λ‘ ꡬνν ν΄λμ€μ΄λ©°, λ΄λΆμ μΌλ‘ λ©μλλ₯Ό ꡬννλ μμ κ°μ§κ³ μλ€.
- ν΄λΉ μ΅λͺ ν΄λμ€μ μ¬μ μ λ λ©μλλ₯Ό νΈμΆν¨μΌλ‘μ¨, ꡬν λ λ©μλλ₯Ό μ΄μ©νλ λ°©μμ΄ λλ€μμ΄λ€.
- νλ§λλ‘, λ©μλλ₯Ό μ¬μ μ ν΄μ ν΄λΉ λ©μλλ₯Ό νΈμΆν΄μ μ΄μ©νλ κ°λ μ.