2022. 4. 6. 09:51γJAVA/study
1οΈβ£ ν¨μν μΈν°νμ΄μ€ (Functional Interface)
ν¨μν μΈν°νμ΄μ€λ μΆμ λ©μλλ₯Ό λ± νλλ§ κ°μ§κ³ μλ μΈν°νμ΄μ€λ₯Ό λ§νλ€.
SAM(Single Abstract Method) μΈν°νμ΄μ€
@FunctionalInterface μ λ Έν μ΄μ μ κ°μ§κ³ μλ μΈν°νμ΄μ€μ΄λ€.
2οΈβ£ λλ€ ννμ (Lambda Expression)
ν¨μν μΈν°νμ΄μ€μ μΈμ€ν΄μ€λ₯Ό λ§λλ λ°©λ²μΌλ‘ μ°μΌ μ μλ€.
μ½λλ₯Ό μ€μΌ μ μλ€!!
맀μλ 맀κ°λ³μ, λ¦¬ν΄ νμ , λ³μλ‘ λ§λ€μ΄ μ¬μ©ν μλ μλ€.
-> μ΄λ κ² μ΅λͺ λ΄λΆ ν¨μλ‘ ν¨μν μΈν°νμ΄μ€μ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλλ° μ¬κΈ°μ λλ€λ₯Ό μ¬μ©ν΄μ μ½λλ₯Ό μ’ λ μ€μΌ μ μλ€.
3οΈβ£ μλ°μμ ν¨μν νλ‘κ·Έλλ°
ν¨μλ₯Ό First Class Objectλ‘ μ¬μ©ν μ μλ€.
μμ ν¨μ (Pure Function)
- μ¬μ΄λ μ΄ν©νΈκ° μλ€. ( ν¨μ λ°μ μλ κ°μ λ³κ²½νμ§ μλλ€.)
- μνκ° μλ€.(ν¨μ λ°μ μλ κ°μ μ¬μ©νμ§ μλλ€.)
κ³ μ°¨ ν¨μ (Higer-Order Function)
ν¨μκ° ν¨μλ₯Ό 맀κ°λ³μλ‘ λ°μ μ μκ³ ν¨μλ₯Ό 리ν΄ν μ λ μλ€.
ν¨μλ₯Ό μ λ¬μΈμ argument λλ 맀κ°λ³μ parameterλ‘ λ°κ±°λ ν¨μλ₯Ό 리ν΄νλ ν¨μ
λΆλ³μ±
β First Class Object(μΌκΈ κ°μ²΄) λ?
μΌκΈκ°μ²΄λ λ€λ₯Έ κ°μ²΄λ€μ μΌλ°μ μΌλ‘ μ μ© κ°λ₯ν μ°μ°μ λͺ¨λ μ§μνλ κ°μ²΄λ₯Ό λ§νλ€.
(ν¨μλ₯Ό λ°μ΄ν° String, number, boolean, array, object λ€λ£¨ λ―μ΄ λ€λ£° μ μλ€λ μ μ΄λ€.)
- μΌκΈ κ°μ²΄μ 쑰건
λ³μλ λ°μ΄ν°μ ν λΉν μ μλ€.
λ€λ₯Έ ν¨μλ₯Ό μΈμλ‘ μ λ¬ λ°λλ€. -> κ°μ²΄μ μΈμλ‘ λκΈΈ μ μμ΄μΌ νλ€.
λ€λ₯Έ ν¨μμ κ²°κ³Όλ‘μ 리ν΄λ μ μλ€. -> κ°μ²΄μ 리ν΄κ°μΌλ‘ 리ν΄ν μ μμ΄μΌ νλ€.
μλ javaμμλ ν¨μκ° 1κΈ κ°μ²΄μ ν΄λΉνμ§ μλλ° Javaμ Lambdaλ₯Ό μ¬μ©νλ©΄ λ©μλκ° 1κ°λ§ μ‘΄μ¬νλ μΈν°νμ΄μ€/ν΄λμ€λ₯Ό ν΅ν΄, λ§μΉ ν¨μλ₯Ό μ λ¬νλ κ²μ²λΌ μ¬κ²¨μ, ν¨μλ₯Ό 1κΈ κ°μ²΄λ‘ μ·¨κΈνμ§ μλ javaμ λ¨μ μ μ΄λμ λ ν΄κ²°ν μ μλ€.
- μΌκΈ κ°μ²΄μ΄κΈ° λλ¬Έμ ν μ μλ κ²
κ³ μ°¨ ν¨μ(Higher Order fucntion)μ λ§λ€ μ μλ€.
μ½λ°±μ μ¬μ©ν μ μλ€.
- μ½λ°± ν¨μ callback
μ λ¬ μΈμλ‘ λ°λ ν¨μ
4οΈβ£ ν¨μν μΈν°νμ΄μ€
javaκ° κΈ°λ³ΈμΌλ‘ μ 곡νλ ν¨μν μΈν°νμ΄μ€
- Function<T,R>
T νμ μ λ°μμ R νμ μ 리ν΄νλ ν¨μ μΈν°νμ΄μ€
R apply(T t)
ν¨μ μ‘°ν©μ© λ©μλ
- andThen
- compose
- BiFunction<T, U, R>
λ κ°μ κ°(T, U) λ₯Ό λ°μμ R νμ μ 리ν΄νλ ν¨μ μΈν°νμ΄μ€
R apply(T t, U u)
- Consumer<T>
T νμ μ λ°μμ μ무κ²λ 리ν΄νμ§ μλ ν¨μ μΈν°νμ΄μ€
void Accept(T t)
ν¨μ μ‘°ν©μ© λ©μλ
andThen
- Supplier<T>
T νμ μ κ°μ μ 곡νλ ν¨μ μΈν°νμ΄μ€
T get()
- Predicate<T>
T νμ μ λ°μμ booleanμ 리ν΄νλ ν¨μ μΈν°νμ΄μ€
boolean test(T t)
ν¨μ μ‘°ν©μ© λ©μλ
And
Or
Negate
- UnaryOperator<T>
Function<T, R> μ νΉμν ννλ‘, μ λ ₯κ° νλλ₯Ό λ°μμ λμΌν νμ μ 리ν΄νλ ν¨μ μΈν°νμ΄μ€
- BinaryOperator<T>
BiFunction<T, U, R> μ νΉμν ννλ‘, λμΌν νμ μ μ λ ₯κ° λκ°λ₯Ό λ°μ 리ν΄νλ ν¨μ μΈν°νμ΄μ€
5οΈβ£ λλ€ ννμ
(μΈμ 리μ€νΈ) -> {λ°λ}
μΈμ 리μ€νΈ
- μΈμκ° μμ λ : ()
- μΈμκ° νκ°μΌ λ: (one) λλ one
- μΈμκ° μ¬λ¬κ°μΌ λ : (one, two)
- μΈμμ νμ μ μλ΅ κ°λ₯, μ»΄νμΌλ¬κ° μΆλ‘ infer νμ§λ§ λͺ μν μλ μλ€. (Integer one, Integer two)
λ°λ
- νμ΄ν μ€λ₯Έμͺ½μ ν¨μ λ³Έλ¬Έμ μ μνλ€.
- μ¬λ¬ μ€μΈ κ²½μ°μ {} λ₯Ό μ¬μ©ν΄μ λ¬Άλλ€.
- ν μ€μΈ κ²½μ°μ μλ΅ κ°λ₯, return λ μλ΅ κ°λ₯
λ³μ μΊ‘μ² (Variable Capture)
- λ‘컬 λ³μ μΊ‘μ²
: final μ΄κ±°λ effective final μΈ κ²½μ°μλ§ μ°Έμ‘°ν μ μλ€.
κ·Έλ μ§ μμ κ²½μ° concurrency λ¬Έμ κ° μκΈΈ μ μμ΄μ μ»΄νμΌλ¬κ° λ°©μ§νλ€.
- effective final
μλ° 8λΆν° μ§μνλ κΈ°λ₯μΌλ‘ μ¬μ€μ finalμΈ λ³μ
final ν€μλ μ¬μ©νμ§ μλ λ³μλ₯Ό μ΅λͺ ν΄λμ€ κ΅¬ν체 λλ λλ€μμ μ°Έμ‘°ν μ μλ€.
μ΅λͺ ν΄λμ€ κ΅¬ν체μ λ¬λ¦¬ μλμ νμ§ μλλ€.
-> μ΅λͺ ν΄λμ€λ μλ‘μ΄ scopeλ₯Ό λ§λ€μ§λ§ λλ€λ λλ€λ₯Ό κ°μΈκ³ μλ scopeμ κ°λ€.
6οΈβ£ λ©μλ λ νΌλ°μ€
λλ€κ° νλ μΌμ΄ κΈ°μ‘΄ λ©μλ λλ μμ±μλ₯Ό νΈμΆνλ κ±°λΌλ©΄, λ©μλ λ νΌλ°μ€λ₯Ό μ¬μ©ν΄μ λ§€μ° κ°κ²°νκ² ννν μ μλ€.
λ©μλ μ°Έμ‘°νλ λ°©λ²
Static λ©μλ μ°Έμ‘° | νμ ::μ€νν± λ©μλ |
νΉμ κ°μ²΄μ μΈμ€ν΄μ€ λ©μλ μ°Έμ‘° | κ°μ²΄ λ νΌλ°μ€::μΈμ€ν΄μ€ λ©μλ |
μμ κ°μ²΄μ μΈμ€ν΄μ€ λ©μλ μ°Έμ‘° | νμ ::μΈμ€ν΄μ€ λ©μλ |
μμ±μ μ°Έμ‘° | νμ ::new |
λ©μλ λλ μμ±μμ 맀κ°λ³μλ‘ λλ€μ μ λ ₯κ°μ λ°λλ€.
리ν΄κ° λλ μμ±ν κ°μ²΄λ λλ€μ 리ν΄κ°μ΄λ€.
'JAVA > study' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA] λ μλ°, Java 8 Optional (0) | 2022.04.11 |
---|---|
[JAVA] λ μλ°, Java 8 Stream (0) | 2022.04.06 |
[JAVA] λ μλ°, Java 8 μΈν°νμ΄μ€ λ³ν (0) | 2022.04.06 |
[JAVA] 1. μλ° 8, LTSμ λΉ LTS μ°¨μ΄, μλ°8 μ£Όμ κΈ°λ₯ (0) | 2022.04.06 |
[JAVA] Map- getOrDefault() λ? (0) | 2022.04.05 |