λλ€ ννμ(Lambda Expression)
μ΅λͺ ν¨μ(Anonymous Function)λ₯Ό λ¨μννμ¬ κ°λ¨νκ² μ€μΈ ννμμ΄λ€.
λλ€λ₯Ό μ¬μ©νλ©΄ μ½λλ₯Ό κ°κ²°νκ² νννκ³ , λ©ν°μ€λ λλ₯Ό νμ©νμ¬ λ³λ ¬μ²λ¦¬λ₯Ό μνν μ μμΌλ©° μ§μ°μ°μ°μ μννμ¬ λΆνμν μ°μ°μ μ΅μνν μ μλ€.
μ΅λͺ ν¨μ(Anonymous Function)
λ³μμ ν¨μ 리ν°λ΄ λ°©μμΌλ‘ μ μ₯ν μ΄λ¦ μλ ν¨μμ΄λ€.
λ³μμ μ΄κΈ°νν μ΅λͺ ν¨μλ νΈμΆ μ λ³μλͺ μ ν¨μλͺ μ²λΌ μ¬μ©νλ€.
π§ μ΅λͺ ν¨μλ₯Ό μ¬μ©νλ μ΄μ
μ μΈ ν¨μλ νλ‘κ·Έλ¨μ΄ μμλλ©΄ λͺ¨λ μ μμΌλ‘ μ΄κΈ°νλλ©° λ©λͺ¨λ¦¬λ₯Ό μ‘μλ¨Ήλλ€.
μ¬μ¬μ©μ΄ νμνμ§ μλ€λ©΄ κΈ°λ₯μ μνν λλ§λ€ μ μΈ ν¨μλ₯Ό μ°Ύμμ νΈμΆν μ΄μ κ° μλ€.
μ΅λͺ ν¨μλ μΌκΈ κ°μ²΄(First Class citizen)λΌλ νΉμ§μ κ°μ§λ€.
μΌκΈ μλ―Ό(First Class Citizen) / μΌκΈ κ°μ²΄(First Class Object) / μΌκΈ ν¨μ(First Class Function)
λ€λ₯Έ κ°μ²΄λ€μ μΌλ°μ μΌλ‘ μ μ© κ°λ₯ν μ°μ°μ λͺ¨λ μ§μνλ©΄ μΌκΈ μλ―Ό, μΌκΈ μλ―Όμ 쑰건μ λͺ¨λ μΆ©μ‘±νλ κ°μ²΄λ μΌκΈ κ°μ²΄, ν¨μλ₯Ό μΌκΈ κ°μ²΄λ‘ μ·¨κΈνλ©΄ μΌκΈ ν¨μμ΄λ€.
- λ³μμ λ΄μ μ μλ€.
- ν¨μμ μΈμλ‘ μ λ¬ν μ μλ€.
- ν¨μμ λ°ν κ°μΌλ‘ μ λ¬ν μ μλ€.
μ§μ° μ°μ°(Lazy Evaluation)
ν΄κ²°ν΄μΌ ν μ°μ°λ€μ΄ μ£Όμ΄μ§λλΌλ λ§μ§λ§ μ°μ°μ μκ²λλ©΄ κ·Έ λ μ°μ°μ μμν΄ λΆνμν μ°μ°μ μννμ§ μλ κ²μ΄λ€. μ°μ°μ μ§μ°μμΌ λΆνμν μ°μ°μ νΌν μ μλ€.
μλ μ½λλ ν¨μν νλ‘κ·Έλλ°μ μ΄μ©ν΄ μ§μμΈ μμ μ μλ₯Ό λ½μλ΄ 100λ°°νλ μ½λμ΄λ€.
List<Integer> list = Arrays.asList(-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5);
System.out.println(
list.stream()
.filter(i -> i > 0) // μμ μ μ μΆμΆ
.filter(i -> i % 2 == 0) // μ§μ μΆμΆ
.map(i -> i * 100) // 100λ°°
.collect(Collectors.toList())
);
μΌλ°μ μΌλ‘λ νν° μμλλ‘ μμ μ μ μΆμΆ, μ§μ μΆμΆ, 100λ°°λ₯Ό νλ€κ³ μκ°ν μ μλ€.
νμ§λ§ μ€μ λ‘λ κ° (λ°λ³΅λλ) μμλ€μ λν΄ μμ°¨μ μΌλ‘ μ°μ°μ μ§ννλ€. κ° μμλ³λ‘ μ°μ°μ μ§ννλ€κ° μμμ κ°μ ꡬνλ©΄ κ·Έ μ΄νμ μ°μ°μ νμ§ μμ λΆνμν μ°μ°μ μ€μΌ μ μλ€.
μμ μμλ (0, 1, 2, 3, 4, 5) -> (0, 2, 4) -> (0, 200, 400)μ΄ μλλΌ μ²« λ²μ§Έ μμμΈ [-5]μ λν΄ κ° λ¨κ³λ₯Ό μννλ λ°©μμ΄λ€. λ§μ½ 첫 λ²μ§Έ κ°λ§ ꡬνκ³ μΆλ€λ©΄ 첫 λ²μ§Έ μμμ λν΄μλ§ μ°μ°μ μνν κ²μ΄λ€.
μλ λ§ν¬μ μμμ ν¨κ» μ§μ°μ°μ°μ λν΄ μμΈν μ€λͺ μ΄ μμΌλ μ°Έκ³ ν΄λ³΄λ©΄ μ’μ κ² κ°λ€.
https://dororongju.tistory.com/137
λλ€μ μ¬μ©λ²
νμ΄ν( -> )λ₯Ό κΈ°μ€μΌλ‘ μΌμͺ½μλ λ§€κ° λ³μ, μ€λ₯Έμͺ½μ λ°λ λΆλΆμΌλ‘ λ§€κ° λ³μλ₯Ό μ΄μ©ν΄ μ€νν μ½λλΈλ‘( {} )μ μμ±νλ€.
// λλ€λ₯Ό μ¬μ©νμ§ μλ κΈ°μ‘΄ λ°©μ
λ°ννμ
λ©μλλͺ
(맀κ°λ³μ, ...) {
μ€νλ¬Έ
}
// λλ€λ₯Ό μ¬μ©νλ λ°©μ
(맀κ°λ³μ, ...) -> { μ€νλ¬Έ ... }
- λλ€μμ νλΌλ―Έν°λ₯Ό μΆλ‘ ν μ μλ κ²½μ° λ§€κ°λ³μ νμ μ μλ΅ν μ μλ€.
- 맀κ°λ³μκ° νλμΈ κ²½μ° κ΄νΈλ₯Ό μλ΅ν μ μλ€.
- 맀κ°λ³μκ° λ κ° μ΄μμΈ κ²½μ° κ΄νΈλ₯Ό μλ΅ν μ μλ€.
- λ°λμ νλμ ν¬νμλ§ μ€λ κ²½μ° μ€κ΄νΈλ₯Ό μλ΅ν μ μλ€.
- μ€κ΄νΈκ° μλ΅λ λλ€μμλ μΈλ―Έμ½λ‘ (;)μ λΆμ΄μ§ μλλ€.
- λ°λμ returnλ¬Έμ΄ μλ κ²½μ° μ€κ΄νΈλ₯Ό μλ΅ν μ μλ€.
μμ κ·μΉμ λ°λΌ 리μ€νΈμ μνλ₯Ό λλ€μμΌλ‘ νννλ©΄ μλμ κ°λ€.
List<String> list = Arrays.asList("A", "B", "C");
// case 1
for (String x : list) {
System.out.println(x);
}
// case 2
list.forEach(x -> System.out.println(x));
// case 3
list.forEach(System.out::println);
λ©μλ μ°Έμ‘°(Method Reference)
λ©μλλ₯Ό κ°κ²°νκ² μ§μΉνλ λ°©λ²μΌλ‘ λλ€μμμ μ΄λ―Έ μ‘΄μ¬νλ μ΄λ¦μ κ°μ§ λ©μλλ₯Ό λλ€λ‘μ¨ μ¬μ©ν μ μλλ‘ κ°λ¦¬ν€λ μν μ νλ€. μ€μν μ μ λ©μλλ₯Ό νΈμΆνμ¬ μ€ννλ κ²μ΄ μλ μ°Έμ‘°λ§ νλ κ²μ΄λΌλ μ μ΄λ€.
λ©μλ μ°Έμ‘°λ₯Ό μ¬μ©νλ©΄ λΆνμν 맀κ°λ³μλ₯Ό μ κ±°νκ³ '::' κΈ°νΈλ₯Ό μ¬μ©νμ¬ ννν μ μλ€.
ν΄λμ€ μ΄λ¦::λ©μλ μ΄λ¦
μ°Έμ‘° λ³μ μ΄λ¦::λ©μλ μ΄λ¦
λλ€ ννμκ³Ό λ©μλ μ°Έμ‘°λ₯Ό λΉκ΅νλ μμ μ΄λ€.
// κΈ°μ‘΄ λλ€μ μ΄μ©
Function<String, Integer> useLambda = (String s) -> Integer.parseInt(s);
System.out.println(ft.apply("99"));
// λ©μλ μ°Έμ‘° μ΄μ©
Function<String, Integer> useMethodRefer = Integer::parseInt;
System.out.println(ft.apply("99"));
Function μΈν°νμ΄μ€λ ν κ°μ μΈμλ₯Ό μ λ¬ λ°μ λ€λ₯Έ νμ μΌλ‘ λ°ννλ java.util.function ν¨ν€μ§μμ μ 곡νλ ν¨μν μΈν°νμ΄μ€μ΄λ€. λλ€ ννμλ§ μ΄ν΄νκΈ°λ³΄λ€ μ€μ λ‘ λλ€μμ΄ μ¬μ©λλ ν¨μν μΈν°νμ΄μ€ μ¬μ© λ°©λ²λ μ΅νμΌ νλ€.
μ°Έκ³ μλ£ λ° μΆμ² πβοΈ
http://junil-hwang.com/blog/javascript-1%EA%B8%89%ED%95%A8%EC%88%98/#section1
https://frontsom.tistory.com/3
https://dororongju.tistory.com/137
'κ°λ° > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA 8] μ€νΈλ¦Ό(Stream) (0) | 2022.01.15 |
---|---|
[JAVA 8] ν¨μν μΈν°νμ΄μ€(Functional Interface) (0) | 2022.01.14 |
μλ° Map μμ£Ό μ°λ λ©μλ μ 리 (0) | 2021.11.02 |
μλ° λ°°μ΄, 리μ€νΈ μ λ ¬ (Array, List μ λ ¬) (0) | 2021.11.02 |
μλ° λ°°μ΄ β 리μ€νΈ λ³ν (Array To List / List To Array) (0) | 2021.11.02 |
λκΈ