π λ€μ΄κ°λ©°
Java 8μμ λμ
λ λλ€μμ μλ° νλ‘κ·Έλλ° ν¨λ¬λ€μμ ν¬κ² λ°κΎΌ κΈ°λ₯μ΄λ€. μ₯ν©νλ μ΅λͺ
ν΄λμ€λ₯Ό ν μ€λ‘ μ€μ¬μ£Όκ³ , ν¨μν νλ‘κ·Έλλ°μ ννλ ₯μ μλ°μ λ€μ¬μλ€. μ΄λ² κΈμμλ λλ€μμ κΈ°λ³Έ κ°λ
, νμ©, μ£Όμμ¬νμ μ 리νλ€.
λλ€μμ΄λ? μ΅λͺ
ν¨μμ ννλ₯Ό κ°λ μλ°μ νν λ°©μ. μ£Όλ‘ ν¨μν μΈν°νμ΄μ€(μΆμ λ©μλκ° λ± νλμΈ μΈν°νμ΄μ€)λ₯Ό ꡬνν λ μ¬μ©ν΄, μ½λλ₯Ό κ°κ²°νκ² λ§λ λ€.
1. κΈ°λ³Έ λ¬Έλ²
μ΅λͺ
ν΄λμ€μ λΉκ΅νλ©΄ λλ€μμ κ°κ²°ν¨μ΄ νλμ 보μΈλ€.
1
2
3
4
5
6
7
8
9
10
| // κΈ°μ‘΄μ μ΅λͺ
ν΄λμ€
Runnable runnable1 = new Runnable() {
@Override
public void run() {
System.out.println("Hello, World!");
}
};
// λλ€μ
Runnable runnable2 = () -> System.out.println("Hello, World!");
|
λ§€κ°λ³μμ λ°νκ°μ΄ μμ λλ λ§μ°¬κ°μ§λ€. λλ€μμ νμ
μ μΆλ‘ νλ―λ‘ λ§€κ°λ³μ νμ
μ μλ΅ν μ μλ€.
1
2
3
4
5
6
7
8
9
10
| // μ΅λͺ
ν΄λμ€
Comparator<Integer> comparator1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
// λλ€μ (νμ
μΆλ‘ )
Comparator<Integer> comparator2 = (o1, o2) -> o1.compareTo(o2);
|
1
2
3
4
5
6
| μ΅λͺ
ν΄λμ€ (μ¬λ¬ μ€) λλ€μ (ν μ€)
new Runnable() { () -> System.out.println("Hi")
public void run() { βββΊ
...
}
}
|
2. λλ€μμ νμ©
ν¨μν μΈν°νμ΄μ€μμ κ²°ν©
λλ€μμ μΆμ λ©μλκ° νλλΏμΈ ν¨μν μΈν°νμ΄μ€λ₯Ό ꡬνν λ λΉμ λ°νλ€.
1
2
3
4
5
6
7
8
| @FunctionalInterface
interface MyFunction {
int calculate(int a, int b);
}
// νλμ μΈν°νμ΄μ€λ‘ λ€μν λμμ νν
MyFunction add = (a, b) -> a + b;
MyFunction subtract = (a, b) -> a - b;
|
컬λ μ
μ²λ¦¬
λ°λ³΅λ¬Έλ κ°κ²°νκ² ννλλ€.
1
2
3
4
5
6
7
8
9
| List<String> languages = Arrays.asList("Java", "Python", "JavaScript", "Kotlin");
// κΈ°μ‘΄ λ°©μ
for (String language : languages) {
System.out.println(language);
}
// λλ€μ
languages.forEach(language -> System.out.println(language));
|
β οΈ λλ€μμ μ£Όμμ¬ν
| νλͺ© | μ£Όμμ |
|---|
| ν¨μν μΈν°νμ΄μ€ μ¬λΆ | λλ€ λμμ μΆμ λ©μλκ° νλλΏμΈ μΈν°νμ΄μ€μ¬μΌ ν¨ |
| λ³μμ final μ¬λΆ | μΈλΆ λ³μ μ¬μ© μ final λλ effectively finalμ΄μ΄μΌ ν¨ |
this ν€μλ | λλ€ λ΄λΆμ thisλ λλ€κ° μ μλ κ°μ²΄λ₯Ό κ°λ¦¬ν΄ (μ΅λͺ
ν΄λμ€μ λ€λ¦) |
| μμΈ μ²λ¦¬ | λλ€ λ΄λΆμμ λ°μν μμΈλ νΈμΆνλ κ³³μμ μ²λ¦¬ νμ |
π ν¨κ» μμλλ©΄ μ’μ ν
β λ©μλ λ νΌλ°μ€
μ΄λ―Έ μ μλ λ©μλλ₯Ό μ°Έμ‘°νλ©΄ λλ€λ₯Ό λ κ°κ²°νκ² μΈ μ μλ€.
1
2
| Consumer<String> printer1 = s -> System.out.println(s); // λλ€μ
Consumer<String> printer2 = System.out::println; // λ©μλ λ νΌλ°μ€
|
β‘ Optionalκ³Όμ κ²°ν©
κ°μ΄ μμ μλ μμ μλ μλ μν©μ λλ€μ ν¨κ» μμ νκ² λ€λ£¬λ€.
1
2
3
4
| Optional<String> nullableValue = Optional.ofNullable(getNullableValue());
nullableValue.ifPresent(value -> System.out.println("Value: " + value));
String result = nullableValue.orElse("Default Value");
|
β’ Stream API
컬λ μ
μ²λ¦¬λ₯Ό νν° β λ³ν β μλΉμ νμ΄νλΌμΈμΌλ‘ νννλ€.
1
2
3
4
5
| List<String> words = Arrays.asList("Apple", "Banana", "Orange", "Grapes");
words.stream()
.filter(word -> word.startsWith("A")) // Aλ‘ μμνλ κ²λ§
.forEach(System.out::println); // μΆλ ₯
|
π μ 리
1
2
3
4
5
6
| λλ€μ(Lambda) β Java 8+
ββ λ¬Έλ² (λ§€κ°λ³μ) -> { 본체 } μ΅λͺ
ν΄λμ€μ μΆμ½
ββ λμ ν¨μν μΈν°νμ΄μ€(μΆμ λ©μλ 1κ°)
ββ νμ© μ»¬λ μ
forEach, Comparator, Stream λ±
ββ μ£Όμ effectively final, this, μμΈ μ²λ¦¬
ββ νμ₯ λ©μλ λ νΌλ°μ€(::) Β· Optional Β· Stream API
|
| κ°λ
| ν μ€ μ μ |
|---|
| λλ€μ | ν¨μν μΈν°νμ΄μ€λ₯Ό ꡬννλ μ΅λͺ
ν¨μ |
| ν¨μν μΈν°νμ΄μ€ | μΆμ λ©μλκ° νλλΏμΈ μΈν°νμ΄μ€ |
| λ©μλ λ νΌλ°μ€ | Class::methodλ‘ λλ€λ₯Ό λ μΆμ½ |
| Stream API | 컬λ μ
μ νμ΄νλΌμΈμΌλ‘ μ²λ¦¬ |
λλ€μμ βλμ(μ½λ)μ κ°μ²λΌ μ λ¬βν μ μκ² ν΄μ£Όλ λꡬλ€. ν¨μν μΈν°νμ΄μ€Β·λ©μλ λ νΌλ°μ€Β·Stream APIμ κ²°ν©νλ©΄, μλ° μ½λλ₯Ό ν¨μ¬ κ°κ²°νκ³ μ μΈμ μΌλ‘ μμ±ν μ μλ€.
Comments powered by Disqus.