2022. 6. 1. 18:33γJAVA/μλ°μ μ μ
1οΈβ£ λλ€μμ΄λ?
λλ€μμ΄λ λ©μλλ₯Ό νλμ μμΌλ‘ ννν κ²μ΄λ€.
λλ€μμ ν¨μλ₯Ό κ°λ΅νλ©΄μλ λͺ νν μμΌλ‘ ννν μ μκ² ν΄μ€λ€.
λ©μλλ₯Ό λλ€μμΌλ‘ νννλ©΄ λ©μλμ μ΄λ¦κ³Ό λ°νκ°μ΄ μμ΄μ§λ―λ‘ λλ€μμ μ΅λͺ ν¨μλΌκ³ λ νλ€.
βλ©μλμ ν¨μμ μ°¨μ΄
λ©μλμ ν¨μλ 근볡μ μΌλ‘λ λμΌνλ ν¨μλ μΌλ°μ μΈ μ©μ΄μ΄κ³ λ©μλλ κ°μ²΄μ§ν₯ μ©μ΄μ΄λ€.
ν¨μλ ν΄λμ€μ λ 립μ μ΄λ λ©μλλ ν΄λμ€μ μ’ μμ μ΄λ€.
- λλ€μ μμ±νκΈ°
λλ€μμ μ΅λͺ ν¨μ λ΅κ² λ©μλμμ μ΄λ¦κ³Ό λ°ννμ μ μ κ±°νκ³ λ§€κ°λ³μ μ μΈλΆμ λͺΈν΅{} μ¬μ΄μ -> λ₯Ό μΆκ°ν΄μ£Όλ©΄ λλ€.
κ·Έλ¦¬κ³ λ°νκ°μ΄ μλ λ©μλμ κ²½μ°μ return λ¬Έ λμ μμΌλ‘ λμ ν μ μλ€.
λλ€μμ μ μΈλ 맀κ°λ³μμ νμ μ μΆλ‘ μ΄ κ°λ₯ν κ²½μ°λ μλ΅ν μ μλλ° λλΆλΆ μλ΅κ°λ₯νλ€.
2οΈβ£ ν¨μν μΈν°νμ΄μ€ (Fucntional Interface)
μλ°μμ λͺ¨λ λ©μλλ ν΄λμ€ λ΄μ ν¬ν¨λμ΄μΌ νλλ° λλ€μλ μ΅λͺ κ°μ²΄λ‘ μ΅λͺ ν¨μκ° μλλ€!!!
Object ν΄λμ€μλ max() λ©μλκ° μμ΄μ μλ¬κ° λλ€. κ·ΈλΌ μ°Έμ‘°λ³μ νμ μ μ΄λ€ κ²μ΄μ΄μΌ νλκ°?
-> μ°Έμ‘°νμ΄λκΉ ν΄λμ€ λλ μΈν°νμ΄μ€κ° κ°λ₯νλ€. κ·Έλ¦¬κ³ λλ€μκ³Ό λμΌν λ©μλκ° μ μλμ΄ μμ΄μΌ νλ€!
κ·ΈλμΌλ§ μ°Έμ‘°λ³μλ‘ μ΅λͺ κ°μ²΄μ λ©μλλ₯Ό νΈμΆν μ μκΈ° λλ¬Έμ΄λ€.
MyFunction μΈν°νμ΄μ€λ₯Ό ꡬνν μ΅λͺ κ°μ²΄λ₯Ό λλ€μμΌλ‘ λ체 κ°λ₯ν μ΄μ λ λλ€μλ μ€μ λ‘λ μ΅λͺ κ°μ²΄μ΄κ³ , MyFunction μΈν°νμ΄μ€λ₯Ό ꡬνν μ΅λͺ κ°μ²΄μ λ©μλ max()μ λλ€μμ 맀κ°λ³μ νμ κ³Ό κ°μ κ·Έλ¦¬κ³ λ°νκ°μ΄ μΌμΉνκΈ° λλ¬Έμ΄λ€!
λ°λΌμ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λλ€μμ λ€λ£¨κΈ°λ‘ νκ³ , λλ€μμ λ€λ£¨κΈ° μν μΈν°νμ΄μ€λ₯Ό ν¨μν μΈν°νμ΄μ€λΌκ³ νλ€.
λ¨ ν¨μν μΈν°νμ΄μ€λ μ€μ§ νλμ μΆμ λ©μλλ§ μ μλμ΄ μμ΄μΌ νλ€λ μ μ½μ΄ μλ€.
-> κ·ΈλμΌ λλ€μκ³Ό μΈν°νμ΄μ€μ λ©μλκ° 1:1λ‘ μ°κ²°λ μ μκΈ° λλ¬Έμ΄λ€.
@FunctionInterfaceλ₯Ό λΆμ΄λ©΄ μ»΄νμΌλ¬κ° ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬λ°λ₯΄κ² μ μνμλμ§ νμΈν΄μ€λ€!
- ν¨μν μΈν°νμ΄μ€ νμ μ 맀κ°λ³μμ λ°ννμ
λ©μλμ 맀κ°λ³μκ° MyFunction νμ μ΄λ©΄, μ΄λ©μλλ₯Ό νΈμΆν λ λλ€μμ μ°Έμ‘°νλ μ°Έμ‘°λ³μλ₯Ό 맀κ°λ³μλ‘ μ§μ ν΄μΌ νλ€λ κ²μ΄λ€.
κ·Έλ¦¬κ³ λ©μλμ λ°ννμ μ΄ ν¨μν μΈν°νμ΄μ€μ΄λ©΄ μ΄ ν¨μν μΈν°νμ΄μ€μ μΆμ λ©μλμ λλ±ν λλ€μμ κ°λ¦¬ν€λ μ°Έμ‘°λ³μλ₯Ό λ°ννκ±°λ, λλ€μμ μ§μ λ°νν μ μλ€.
λλ€μμ μ°Έμ‘°λ³μλ‘ λ€λ£° μ μλ€λ κ²μ λ©μλλ₯Ό ν΅ν΄ λλ€μμ μ£Όκ³ λ°μ μ μλ€λ κ²μ μλ―Ένλ€!
μ¦, λ³μμ²λΌ λ©μλλ₯Ό μ£Όκ³ λ°λ κ²μ΄ κ°λ₯ν΄μ§ κ²μ΄λ€.
3οΈβ£ java.util.function ν¨ν€μ§
λλΆλΆμ λ©μλ νμ μ΄ λΉμ·νκ² λ§€κ°λ³μκ° μκ±°λ, ν κ° λλ λ κ°, λ°ν κ°μ μκ±°λ ν κ°, κ²λ€κ° μ§λ€λ¦ λ©μλλ‘ μ μνλ©΄ 맀κ°λ³μλ λ°ν νμ μ΄ λ¬λΌλ λ¬Έμ κ° λμ§ μλλ€.
κ·Έλμ java.util.function ν¨ν€μ§μ μΌλ°μ μΌλ‘ μμ£Ό μ°μ΄λ νμμ λ©μλλ₯Ό ν¨μν μΈν°νμ΄μ€λ‘ 미리 μ μν΄ λμλ€.
λ§€λ² μλ‘μ΄ ν¨μν μΈν°νμ΄μ€λ₯Ό μ μνμ§ λ§κ³ , κ°λ₯νλ©΄ ν¨ν€μ§μ μΈν°νμ΄μ€λ₯Ό νμ©νλ κ²μ΄ μ’λ€.
-> μλνλ©΄ ν¨μν μΈν°νμ΄μ€μ μ μλ λ©μλ μ΄λ¦λ ν΅μΌλκ³ , μ¬μ¬μ©μ±μ΄λ μ μ§λ³΄μ μΈ‘λ©΄μμλ μ’κΈ° λλ¬Έμ΄λ€.
컬λ μ νλ μμν¬μ μΈν°νμ΄μ€μλ λ€μμ λν΄νΈ λ©μλκ° μΆκ°λμλλ° κ·Έ μ€μ μΌλΆλ ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ€.
Mapμ computeλ‘ μμνλ λ©μλλ 맡μ valueλ₯Ό λ°ννλ μΌμ νκ³ , merge()λ Mapμ λ³ν©νλ μΌμ νλ€.
4οΈβ£ Functionμ ν©μ±κ³Ό Predicateμ κ²°ν©
μνμμ λ ν¨μλ₯Ό ν©μ±ν΄μ νλμ μλ‘μ΄ ν¨μλ₯Ό λ§λ€μ΄ λΌ μ μλ κ²μ²λΌ λ λλ€μμ ν©μ±ν΄μ μλ‘μ΄ λλ€μμ λ§λ€ μ μλ€.
f.andThen(g)λ f λ¨Όμ μ μ©νκ³ κ·Έ λ€μ gλ₯Ό μ μ©νλ€.
f.compose(g)λ gλ₯Ό λ¨Όμ μ μ©νκ³ fλ₯Ό μ μ©νλ€.
μ¬λ¬ 쑰건μμ λ Όλ¦¬ μ°μ°μμΈ &&(and), || (or), !(not)μΌλ‘ μ°κ²°ν΄μ νλμ μμΌλ‘ ꡬμ±ν μ μλ κ²μ²λΌ Predicateλ₯Ό and(), or(), negate()λ‘ μ°κ²°ν΄μ νλμ Predicateλ‘ κ²°ν©ν μ μλ€.
κ·Έλ¦¬κ³ static λ©μλμΈ isEqual()μ λ λμμ λΉκ΅νλ Predicateλ₯Ό λ§λ€ λ μ¬μ©νλ€.
λ¨Όμ , isEqual()μ 맀κ°λ³μλ‘ λΉκ΅ λμμ νλ μ§μ νκ³ , λ λ€λ₯Έ λΉκ΅ λμμ test()μ 맀κ°λ³μλ‘ μ§μ νλ€.