2025λ 3μ 20μΌ
λλ€(Lambda)λ μλ°μμ ν¨μν νλ‘κ·Έλλ°μ μ§μνκΈ° μν κΈ°λ₯μΌλ‘, μ΅λͺ
ν¨μλ₯Ό κ°κ²°νκ² μμ±ν μ μλλ‘ λμμ€λ€.
κΈ°μ‘΄μ μ΅λͺ
ν΄λμ€λ₯Ό μ¬μ©νμ¬ κ΅¬ννλ κΈ°λ₯μ λ κ°λ¨νκ² ννν μ μλ€.
(λ§€κ°λ³μ) -> { μ€νλ¬Έ }
μμ
// λ μ«μμ ν©μ ꡬνλ λλ€ ννμ
(int a, int b) -> { return a + b; }
// μ½μ νν (μ€κ΄νΈ μλ΅ κ°λ₯)
(a, b) -> a + b
C01Lamda.java
)λλ€ ννμμ μ¬μ©νμ¬ λ¦¬μ€νΈ μ λ ¬ λ° μΆλ ₯μ μννλ μμ μ΄λ€.
Person
ν΄λμ€λ₯Ό μμ±νκ³ , List<Person>
κ°μ²΄λ₯Ό λ§λ€μ΄ μ¬λ μ 보λ₯Ό μ μ₯νλ€.forEach(System.out::println)
μ μ¬μ©νμ¬ λ¦¬μ€νΈ μΆλ ₯νλ€.list.sort()
λ‘ λμ΄μ μ λ ¬μ μννλ€.import java.util.ArrayList;
import java.util.List;
// Person ν΄λμ€ μ μ
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public int getAge() { return age; }
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class C01Lamda {
public static void main(String[] args) {
List<Person> list = new ArrayList<>();
list.add(new Person("jung", 55));
list.add(new Person("hong", 22));
list.add(new Person("bob", 33));
// κΈ°μ‘΄ 리μ€νΈ μΆλ ₯ (λλ€μ νμ©)
list.forEach(System.out::println);
System.out.println("--");
// λλ€λ₯Ό νμ©ν λμ΄μ μ λ ¬ (λ΄λ¦Όμ°¨μ)
list.sort((a, b) -> b.getAge() - a.getAge());
// μ λ ¬λ 리μ€νΈ μΆλ ₯
list.forEach(System.out::println);
}
}
C02Lamda.java
)λλ€μμ μ¬μ©νμ¬ μΈν°νμ΄μ€λ₯Ό ꡬννλ λ°©λ²μ λ°°μΈ μ μλ€.
ν¨μν μΈν°νμ΄μ€(Functional Interface)λ νλμ μΆμ λ©μλλ§ κ°μ§λ μΈν°νμ΄μ€λ₯Ό μλ―Ένλ€.
μλ°μμλ @FunctionalInterface
μ΄λ
Έν
μ΄μ
μ μ¬μ©νμ¬ ν¨μν μΈν°νμ΄μ€μμ λͺ
μν μ μλ€.
@FunctionalInterface
interface MyFunction {
int apply(int a, int b);
}
Printer
μΈν°νμ΄μ€λ₯Ό μ μΈνκ³ μΆμ λ©μλ print()
μ μ.Printer
μΈν°νμ΄μ€ ꡬν.import java.util.Scanner;
// ν¨μν μΈν°νμ΄μ€ μ μΈ
interface Printer {
String print(); // νλμ μΆμ λ©μλλ§ μ‘΄μ¬ν΄μΌ ν¨
}
public class C02Lamda {
public static void main(String[] args) {
// λλ€μμ νμ©ν Printer μΈν°νμ΄μ€ ꡬν
Printer printer = () -> {
Scanner sc = new Scanner(System.in);
System.out.print("μ
λ ₯ : ");
String str = sc.nextLine(); // μ¬μ©μ μ
λ ₯ λ°κΈ°
sc.close(); // Scanner λ«κΈ°
return str; // μ
λ ₯λ°μ λ¬Έμμ΄ λ°ν
};
String returnValue = printer.print();
System.out.println(returnValue);
}
}
C03Lamda.java
)λλ€μμ νμ©νμ¬ μ¬μΉμ°μ° κΈ°λ₯μ ꡬννλ μμ μ΄λ€.
Calculator
ν¨μν μΈν°νμ΄μ€λ₯Ό μ μΈνλ€ (int calculator(int num1, int num2)
)// ν¨μν μΈν°νμ΄μ€ μ μΈ
interface Calculator {
int calculator(int num1, int num2);
}
public class C03Lamda {
public static void main(String[] args) {
// λ§μ
μ°μ°
Calculator add = (a, b) -> a + b;
// λΊμ
μ°μ° (ν° μμμ μμ μλ₯Ό λΊ)
Calculator sub = (a, b) -> a > b ? a - b : b - a;
// κ³±μ
μ°μ°
Calculator mul = (a, b) -> { return a * b; };
// λλμ
μ°μ° (ν° μμμ μμ μλ₯Ό λλ)
Calculator div = (a, b) -> { return a > b ? a / b : b / a; };
// μ°μ° κ²°κ³Ό μΆλ ₯
System.out.println("λ§μ
κ²°κ³Ό: " + add.calculator(10, 20));
System.out.println("λΊμ
κ²°κ³Ό: " + sub.calculator(30, 10));
System.out.println("κ³±μ
κ²°κ³Ό: " + mul.calculator(10, 20));
System.out.println("λλμ
κ²°κ³Ό: " + div.calculator(100, 5));
}
}
forEach(System.out::println)
μ νμ©νλ©΄ 리μ€νΈλ₯Ό κ°λ¨νκ² μΆλ ₯ κ°λ₯νλ€.Printer
, Calculator
)λ₯Ό νμ©νμ¬ μνλ λμμ λλ€λ‘ μ μν μ μλ€.System.out::println
)μ μ΄μ©νλ©΄ λμ± κ°λ
μ±μ΄ μ’μμ§λ€.