Coding Planet
λλ€μ - λ©μλ μ°Έμ‘°(μμ±μμ λ©μλ μ°Έμ‘° μμ ν¬ν¨) λ³Έλ¬Έ
λλ€μ - λ©μλ μ°Έμ‘°(μμ±μμ λ©μλ μ°Έμ‘° μμ ν¬ν¨)
jhj.sharon 2024. 3. 4. 16:35λλ€μμ κ΄ν κ°κ΄μ μΈ ν¬μ€νΈλ μλ μ°Έμ‘°!
https://sharonprogress.tistory.com/330
μ μ ν¬μ€νΈμμ μ€λͺ νλλ‘ λλ€μμ λ©μλλ₯Ό νλμ μμΌλ‘ ννν΄ κ°λ΅νλ©΄μ λͺ ννκ² μμΌλ‘ ννν μ μλλ‘νλ ννμμ΄λ€. μ΄μ λν΄ λλ€μμ΄ νλμ λ©μλλ§ νΈμΆνλ κ²½μ°μλ 'λ©μλ μ°Έμ‘°(method reference)'λΌλ λ°©λ²μΌλ‘ λλ€μμ λμ± κ°λ΅νκ² μΈ μ μλ€.
| λ©μλ μ°Έμ‘° μ리
μλ λλ€μμ λ©μλλ‘ ννν λΆλΆμ νμΈν΄λ³΄λ©΄ wrapper λ©μλλ μ¬μ€μ 맀κ°λ³μλ₯Ό λ°μ μ λ¬νλ κ² μΈμλ κΈ°λ₯μ΄ μλ€.
// λλ€μ ννλ°©λ²
Function<String, Integer> f =(String s) -> Integer.parseInt(s);
// λ©μλλ‘ νννκΈ°
Integer wrapper(String s){
return Integer.parseInt(s);
}
μ΄λ΄ κ²½μ° μλμ κ°μ΄ λ©μλ μ°Έμ‘°νμμΌλ‘ μ 리ν μ μλ€.
'::' μ°μ°μλ λ©μλ μ°Έμ‘°λ₯Ό μμ±ν λ μ¬μ©λλ©°, λ©μλκ° νΈμΆλ λμ(ν΄λμ€ λλ κ°μ²΄)κ³Ό λ©μλ μ΄λ¦μ μ°κ²°νλ λ° μ¬μ©λλ€.
μ»΄νμΌλ¬λ λλ€μμ μΌλΆκ° μλ΅λμλλΌλ μ’λ³μ μ§λ€λ¦μ€λ₯Ό ν΅ν΄ μλ΅λ λΆλΆμ μΆ©λΆν μΆμΈ‘ν μ μλ€.
Function<String, Integer> f = Integer::parseInt;
| λ©μλ μ°Έμ‘° μ리
λ©μλ μ°Έμ‘°λ ν¬κ² λ€ κ°μ§ ννλ‘ λλλ€.
νν | λλ€ | λ©μλ μ°Έμ‘° | μ |
static λ©μλ μ°Έμ‘° | (x)->ClassName.method(x) | ν΄λμ€λͺ ::λ©μλλͺ | Integer::parseInt |
μΈμ€ν΄μ€λ©μλ μ°Έμ‘° | (obj,x)->obj.method(x) | κ°μ²΄ μ°Έμ‘°::λ©μλλͺ | String::length |
νΉμ κ°μ²΄ μΈμ€ν΄μ€λ©μλ μ°Έμ‘° | (x) -> obj.method(x) | ν΄λμ€λͺ
::λ©μλλͺ
(obj::method) |
System.out::println |
μμ±μμ λ©μλ μ°Έμ‘° | () -> new ClassName | ν΄λμ€λͺ ::new | ArrayList::new |
|μμ±μμ λ©μλ μ°Έμ‘°
μμ±μ λ©μλ μ°Έμ‘°λ₯Ό μ¬μ©ν λ 맀κ°λ³μκ° μλ μμ±μλ₯Ό μ°Έμ‘°νλ κ²½μ°, 맀κ°λ³μμ κ°μμ νμ
μ λ§λ ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬μ©ν΄μΌ νλ€. Javaμμ μ 곡νλ ν¨μν μΈν°νμ΄μ€κ° 맀κ°λ³μμ 쑰건μ λ§μ‘±νμ§ μλ κ²½μ°, μ¬μ©μ μ μ ν¨μν μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄ μ¬μ©ν μ μλ€.
1. 맀κ°λ³μκ° μλ μμ±μ μ°Έμ‘°
Supplier<List<String>> supplier = ArrayList::new;
List<String> list = supplier.get(); // ArrayListμ μ μΈμ€ν΄μ€λ₯Ό μμ±
2. νλμ 맀κ°λ³μλ₯Ό κ°μ§ μμ±μ μ°Έμ‘°
Javaμ Function μΈν°νμ΄μ€λ₯Ό μ¬μ©νμ¬ νλμ 맀κ°λ³μλ₯Ό λ°λ μμ±μλ₯Ό μ°Έμ‘°ν μ μλ€.
Function<Integer, List<String>> function = ArrayList::new;
List<String> list = function.apply(10); // μ΄κΈ° μ©λμ΄ 10μΈ ArrayListμ μ μΈμ€ν΄μ€λ₯Ό μμ±
3. λ κ°μ 맀κ°λ³μλ₯Ό κ°μ§ μμ±μ μ°Έμ‘°:
BiFunction<String, Integer, MyClass> biFunction = MyClass::new;
MyClass myClass = biFunction.apply("test", 1); // Stringκ³Ό Integerλ₯Ό 맀κ°λ³μλ‘ λ°λ MyClassμ μμ±μ μ°Έμ‘°
μ΄ μμλ€μ κ°κ° λ€λ₯Έ 맀κ°λ³μ 쑰건μ κ°μ§ μμ±μλ₯Ό ν¨μν μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μ΄λ»κ² μ°Έμ‘°νλμ§ λ³΄μ¬μ€λ€. νμμ λ°λΌ μ¬μ©μ μ μ ν¨μν μΈν°νμ΄μ€λ₯Ό λ§λ€μ΄ μ¬μ©ν μ μλ€λ μ μ κΈ°μ΅νμ.