β ν¨μ λμ€ν¬λ¦½ν°(Function Descriptor) λ?
ν¨μ λμ€ν¬λ¦½ν°
λ³΄ν΅ μλ°μ λλ€ ννμ(Lambda Expression)μ μ¬μ© μ©λλ₯Ό λκ°μ§λ‘ μ μνλλ°, νλλ λλ€ ν¨μλ‘μμ μ©λ κ·Έλ¦¬κ³ λ€λ₯Έ νλλ ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλμ μν μ μ€λͺ ν΄λμ μκ·Έλμ²λ‘μ μ°μΈλ€.
κ·Έμ€ ν¨μ λμ€ν¬λ¦½ν°(Function Descriptor)λ λ¨μ΄ κ·Έλλ‘ ν¨μκ° μ΄λ€ μ λ ₯κ°μ λ°κ³ μ΄λ€ λ°νκ°μ μ£Όλμ§μ λν μ€λͺ μ λλ€ ννμ λ¬Έλ²μΌλ‘ ννν κ²μ μλ―Ένλ€κ³ 보면 λλ€.
μλ₯Όλ€μ΄, () -> void λ νλΌλ―Έν° 리μ€νΈκ° μμΌλ©° voidλ₯Ό λ°ννλ ν¨μλ₯Ό μλ―Ένλ λμ€ν¬λ¦½ν°λ©°, (int, int) -> double λ λκ°μ intλ₯Ό νλΌλ―Έν°λ‘ λ°μ doubleν μλ£λ₯Ό λ°ννλ ν¨μλ₯Ό μ€λͺ
νλ€κ³ 보면 λλ€.
μ΄μ²λΌ ν¨μ λμ€ν¬λ¦½ν°λ μ£Όλ‘ java.util.function ν¨ν€μ§μ ν¨μν μΈν°νμ΄μ€λ₯Ό λλ€μμΌλ‘ μ¬μ©ν λ μ΄λ€ μν μ νλ ν¨μμΈμ§ κ°λ΅νκ² λ³΄μ¬μ£Όλ μκ·Έλμ²μ΄λ€.
νμ μ€ν¬λ¦½νΈ μ§μμμλ μμ ν¨μ μ체 νμ μ λλ€μ(νμ΄ν ν¨μ)λ‘ νννλλ° μ΄κ²λ ν¨μ λμ€ν¬λ¦½ν° μΌμ’ μ΄λΌκ³ λ΄λ 무방νλ€.
ν¨μν μΈν°νμ΄μ€ | ν¨μ λμ€ν¬λ¦½ν° (μΆμ λ©μλκ° μ΄λ€ μν μ νλμ§ κ°λ΅νκ² μ€λͺ ) |
Predicate | T -> boolean |
Consumer | T -> void |
Function<T,R> | T -> R |
Supplier | ( ) -> T |
BiPredicate<L, R> | (L, R) -> boolean |
BiConsumer<L, R> | (T, U) -> void |
BiFunction<T,U,R> | (T, U) -> R |
Runnable | () -> void |