λλ€μ
μ΅λͺ
ν¨μλ₯Ό (맀κ°λ³μ) -> { μ€νλ¬Έ } ννλ‘ μ μν λ°©μ
β’
μνμ ν¨μ
β’
μνμ λλ€μ
β’
λ©μλ
β’
λλ€μ
β¦
λλ€μ νν
β¦
λλ€μ λ¬Έλ²κ·μΉ
β¦
λλ€μ μ¬μ©
μνμ ν¨μ
ν μ§ν©μ κ° μμλ₯Ό λ€λ₯Έ μ§ν©μ μμμ λμμν€λ κ·μΉ
f(x, y) = x + y
Java
볡μ¬
μνμ λλ€μ
ν¨μμ μ μλ₯Ό κ°κ²°νκ² νννκΈ° μν κΈ°λ²
(x, y) -> x + y
Java
볡μ¬
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°
ν΄λμ€λ‘ κ°μ²΄λ₯Ό μ μνμ¬ κ°μ²΄ κ°μ μνΈ μμ©μ ν΅ν νλ‘κ·Έλλ°μ νλ ν¨λ¬λ€μ
ν¨μν νλ‘κ·Έλλ°
ν¨μλ₯Ό μ€μ¬μΌλ‘ νλ‘κ·Έλλ°μ νλ λ°©μ
β’
μμ ν¨μλ€μ μ¬λ¬ κ° μ‘°ν©νμ¬ λ³΅μ‘ν λμμ ꡬννλ λ°©μμΌλ‘ νλ‘κ·Έλλ° νλ€.
β’
λ°μ΄ν°λ₯Ό λ³κ²½νμ§ μκ³ μλ‘μ΄ κ°μ μμ±νμ¬ μ²λ¦¬νλ€.
β’
μ
λ ₯μ λν΄μ μ²λ¦¬νκ³ κ°μ κ²°κ³Όλ₯Ό λ°ννλ κ²μ΄ μ£Ό λͺ©μ μ΄ λλ νλ‘κ·Έλλ°μ΄λ€.
λ©μλ
λ©μλλ ν΄λμ€ λ΄λΆμ μ μν ν¨μ
λ©μλ νν
μ κ·Όμ§μ μ λ°ννμ
λ©μλλͺ
( 맀κ°λ³μ ) { }
Plain Text
볡μ¬
λλ€μ (Lambda Expression)
μνμ λλ€μ κ°λ
μ μ°¨μ©νμ¬, μ΅λͺ
ν¨μλ₯Ό κ°κ²°νκ² μ μνλ κΈ°λ²
μλ°λ κ°μ²΄μ§ν₯ νλ‘κ·Έλλ° μΈμ΄μ΄κΈ° λλ¬Έμ, ν¨μν νλ‘κ·Έλλ° λ°©μμ μ§μ μ μΌλ‘ μ¬μ©νλ κ²μ΄ μλλΌ, ν¨μν νλ‘κ·Έλλ° λ°©μμ λ³λμ λ°©λ²μΌλ‘ μ§μν©λλ€.
java.util.function ν¨ν€μ§λ₯Ό ν΅ν΄μ ν¨μν νλ‘κ·Έλλ°μ μ§μν©λλ€.
β’
ν¨μν μΈν°νμ΄μ€
β’
λλ€μ
μλ°μμλ ν¨μν μΈν°νμ΄μ€μ, λλ€μμ μ¬μ©νμ¬ ν¨μν νλ‘κ·Έλλ°μ ꡬνν©λλ€.
λλ€μ νν
β’
κΈ°λ³Έ νν
( 맀κ°λ³μ1, 맀κ°λ³μ2 ) -> { μ€νλ¬Έ }
Java
볡μ¬
β’
맀κ°λ³μκ° 1κ°μΈ κ²½μ°, ( ) μλ΅ κ°λ₯
맀κ°λ³μ -> { μ€νλ¬Έ }
Java
볡μ¬
β’
μ€νλ¬Έμ΄ ν λ¬Έμ₯μΈ κ²½μ°, { } μλ΅ κ°λ₯
( 맀κ°λ³μ1, 맀κ°λ³μ2 ) -> μ€νλ¬Έ
Java
볡μ¬
β’
μ¬λ¬ λ¬Έμ₯ μμ± μ, λ°ν κ°μ΄ μμΌλ©΄ return νμ
( 맀κ°λ³μ1, 맀κ°λ³μ2 ) -> {
μ€νλ¬Έ1
return κ²°κ³Όκ°;
}
Java
볡μ¬
λ©μλ μ°Έμ‘°
:: κΈ°νΈλ₯Ό μ¬μ©νμ¬ λλ€μμ λμ± κ°κ²°νκ² νννλ κΈ°λ²
ν΄λμ€μ΄λ¦::λ©μλμ΄λ¦
Java
볡μ¬
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// κΈ°λ³Έ λλ€μ
Function<String, Integer> lambda = (str) -> { return Integer.parseInt(str); };
int result = lambda.apply( "100" );
System.out.println( result ); // 100 (int)
// λ©μλ μ°Έμ‘°
Function<String, Integer> methodRef = Integer::parseInt;
int result2 = methodRef .apply( "200" );
System.out.println( result2 ); // 200 (int)
}
}
Java
볡μ¬
μμ±μ μ°Έμ‘°
κ°μ²΄λ₯Ό μμ±νμ¬ λ°ννλ λλ€μ λμ ν΄λμ€::new ννλ‘ μμ±μλ₯Ό μ°Έμ‘°νλ λ°©λ²
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
// κΈ°λ³Έ λλ€μ
// Supplier<Person> lambda = () -> { return new Person(); };
Supplier<Person> lambda = () -> new Person();
Person p1 = lambda.get(); // λλ€μμ ν΅ν κ°μ²΄ μμ±
System.out.println( p1.getName() );
// μμ±μ μ°Έμ‘°
Supplier<Person> constructorRef = Person::new;
Person p2 = constructorRef.get(); // μμ±μ μ°Έμ‘°λ₯Ό ν΅ν κ°μ²΄ μμ±
System.out.println( p2.getName() );
}
}
Java
볡μ¬
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// κΈ°λ³Έ λλ€μ
// Function<String, Person> lambda = (name) -> { return new Person("aloha"); };
Function<String, Person> lambda = (name) -> new Person(name);
Person p1 = lambda.apply("aloha"); // λλ€μμ ν΅ν κ°μ²΄ μμ±
System.out.println( p1.getName() );
// μμ±μ μ°Έμ‘°
Function<String, Person> constructorRef = Person::new;
Person p2 = constructorRef.apply("aloha"); // μμ±μ μ°Έμ‘°λ₯Ό ν΅ν κ°μ²΄ μμ±
System.out.println( p2.getName() );
}
}
Java
볡μ¬
λλ€μ λ¬Έλ² κ·μΉ
{ } μ€κ΄νΈ μλ΅ μ, return μ λ°λμ μλ΅ν΄μΌν©λλ€.
λλ€μ μ¬μ©
1.
ν¨μν μΈν°νμ΄μ€ μ μ
a.
2.
λλ€μ μ΅λͺ
ν¨μ μ μνμ¬ μΈν°νμ΄μ€μ μ μΈ
3.
λλ€μ ν¨μ νΈμΆ
@FunctionalInterface // μ»΄νμΌλ¬μ ν΄λΉ μΈν°νμ΄μ€κ° ν¨μν μΈν°νμ΄μ€μμ λͺ
μμ μΌλ‘ μλ €μ€λ€.
interface FuncInterface {
// * @FunctionalInterface λ₯Ό μ§μ νλ©΄, μΆμλ©μλλ₯Ό 2κ°μ΄μ μ μνλ©΄ μλ¬λ₯Ό λ°μνκ² νλ€.
void method();
// void method2(); * ν¨μν μΈν°νμ΄μ€λ, μΆμ λ©μλ 1κ°λ§ μ μν΄μΌνλ€.
}
public class LambdaFormat {
public static void main(String[] args) {
// 맀κ°λ³μ, λ°ννμ
μλ λλ€μ
// () -> { System.out.println("λλ€μ"); }
// () -> System.out.println("λλ€μ"); * ν λ¬Έμ₯μ΄λ©΄ {}μ€κ΄νΈ μλ΅κ°λ₯
FuncInterface fi = () -> System.out.println("μλ°λλ€μ");
fi.method();
}
}
Java
볡μ¬
μλ° νμ€ λΌμ΄λΈλ¬λ¦¬μ μ£Όμ ν¨μν μΈν°νμ΄μ€
μΈν°νμ΄μ€ | λ©μλ | μ€λͺ
|
Function<T, R> | R apply(T t) | νλμ μΈμλ₯Ό λ°μ κ²°κ³Όλ₯Ό λ°νν©λλ€. |
Consumer<T> | void accept(T t) | νλμ μΈμλ₯Ό λ°μ μ²λ¦¬νμ§λ§ κ²°κ³Όλ₯Ό λ°ννμ§ μμ΅λλ€. |
Predicate<T> | boolean test(T t) | νλμ μΈμλ₯Ό λ°μ boolean κ°μ λ°νν©λλ€. |
Supplier<T> | T get() | μΈμκ° μκ³ κ²°κ³Όλ₯Ό λ°νν©λλ€. |
BinaryOperator<T> | T apply(T t1, T t2) | λ κ°μ λμΌν νμ
μΈμλ₯Ό λ°μ λμΌν νμ
μ κ²°κ³Όλ₯Ό λ°νν©λλ€. |
UnaryOperator<T> | T apply(T t) | νλμ μΈμλ₯Ό λ°μ κ°μ νμ
μ κ²°κ³Όλ₯Ό λ°νν©λλ€. |