Lamda
JDK 8 (Java Development Kit 8) μμ μ 곡νλ λλ€ ννμ (Lamda Expression) μ λ€λ£¬λ€.
λλ€ ννμμ κ³ μ°¨ν¨μλ₯Ό μ΄μ©νμ¬ λ μ½κ² νλ‘κ·Έλλ° ν μ μλ€.
Exmaple
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
Case 1
λͺ¨λ μλ₯Ό ν©μΉκΈ°
public int sumAll(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
total += number;
}
return total;
}
μ§μλ§ λνκΈ°
public int sumEven(List<Integer> numbers) {
int total = 0;
for (int number : numbers) {
if (number % 2 == 0) {
total += number;
}
}
return total;
}
Case 2 : λλ€ ννμμ μ΄μ©
public int sumAll(List<Integer> numbers, Predicate<Integer> p) {
int total = 0;
for (int number : numbers) {
if (p.test(number)) {
total += number;
}
}
return total;
}
λ΄λΆμμ ν¨μν μΈν°νμ΄μ€μΈ Predicate
μ μΈμλ₯Ό λ°μ κ²°κ³Όλ₯Ό μΈμλ‘ λ°ννλ κ³ μ°¨ν¨μμ λ°©μ μ μ¬μ©νλ€. (JS μ μΌκΈκ°μ²΄μ μμ±κ³Ό μ μ¬ν¨)
// λͺ¨λ μλ₯Ό λν¨
sumAll(numbers, n -> true);
// μ§μλ§ λν¨
sumAll(numbers, n -> n % 2 == 0);
// νμλ§ λν¨
sumAll(numbers, n -> n % 2 == 1);
μ°Έκ³ μλ£
http://cyberx.tistory.com/55
http://cyberx.tistory.com/79 https://futurecreator.github.io/2018/08/26/java-8-streams/
lamda μ νΉμ§
μλ°μ λλ€λ μ΅λͺ ν΄λμ€μ μ μ¬νκ² μ¬μ©λμ§λ§ κΈ°μ μ μΌλ‘λ μ°¨μ΄κ° μμ΅λλ€.
- μ΅λͺ ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μΌ νμ§λ§, ν¨μλ νκ°λ λλ§λ€ μλ‘ μμ±λμ§ μλλ€.
- ν¨μλ₯Ό μν¨ λ©λͺ¨λ¦¬ ν λΉμ Java Heap μμμ Permanent μμμ νλ² μ μ₯λλ€.
- κ°μ²΄λ λ°μ΄ν°μ λ°μ νκ² μ°κ΄ν΄μ λμνλλ° λ°ν΄ ν¨μλ λ°μ΄ν°μ λΆλ¦¬λμ΄ μλ€.
- μνλ₯Ό 보쑴νμ§ μμ μ¬λ¬λ² μ μ©ν΄λ κ²°κ³Όκ° λ¬λΌμ§μ§ μλλ€. (λ©±λ±μ±)
- ν΄λμ€μ static method μ μ μ¬ν κ°λ μ΄λ€.
λ©±λ±μ± : μ°μ°μ μ±μ§μΌλ‘ μ¬λ¬λ² μ μ©νλ κ²°κ³Όκ° λμΌνμ¬ λ¬λΌμ§μ§ μλ μ±μ§μ λ§νλ€.
λλ€μμ ννλ 맀κ°λ³μλ₯Ό κ°μ§ μ½λ λΈλ μ΄κΈ° λλ¬Έμ λ§μΉ μλ°μ λ©μλλ₯Ό μ μΈνλκ²μ²λΌ 보μ¬μ§λλ€.
μλ°λ λ©μλλ₯Ό λ¨λ μΌλ‘ μ μΈν μ μκ³ νμ ν΄λμ€μ ꡬμ±λ©€λ²λ‘ μ μΈνκΈ° λλ¬Έμ λλ€μμ λ¨μν λ©μλλ₯Ό μ μΈνλ κ²μ΄ μλ λ©μλλ₯Ό κ°κ³ μλ κ°μ²΄λ₯Ό μμ± ν΄ λΈλ€.
λλ€μμ FunctionalInterface
μ κ°μ§κ³ μ¬μ©ν΄μΌ νκΈ° λλ¬Έμ Functional Interface λ΄μ©μ μ°Έκ³ νμ.
β Template Method Functional Interface β