2023. 1. 10. 10:34γJAVA/Effective JAVA
item03. private μμ±μλ μ΄κ±° νμ μΌλ‘ μ±κΈν€μμ 보μ¦νλΌ.
" p24. Supplier<T>, ν¨μν μΈν°νμ΄μ€"
ν¨μν μΈν°νμ΄μ€ Functional Interface λ?
: μλ°κ° μ 곡νλ κΈ°λ³Έ ν¨μν μΈν°νμ΄μ€λ‘ 1κ°μ μΆμ λ©μλλ₯Ό κ°μ§κ³ μλ μΈν°νμ΄μ€λ₯Ό μλ―Ένλ€.
Single Abstract Method (SAM) μ΄λΌκ³ νλ€.
ν¨μν μΈν°νμ΄μ€λ λλ€ ννμκ³Ό λ©μλ μ°Έμ‘°μ λν "νμΌ νμ "μ μ 곡νλ€.
κ·Έλ¦¬κ³ μ΄ νκ² νμ μ λ³μ ν λΉ, λ©μλ νΈμΆ, νμ λ³νμ νμ©ν μ μλ€.
/**
* ν¨μν μΈν°νμ΄μ€
*/
@FunctionalInterface
public interface MyFunction
{
String valueOf(Integer integer);
}
-> μ΄μ²λΌ μΆμ λ©μλ νλλ₯Ό κ°λ κ²μ ν¨μν μΈν°νμ΄μ€λΌκ³ νλ€.
κ·Έλ¦¬κ³ μ¬κΈ°μ @FunctionalInterface μ΄λ Έν μ΄μ μ κ΅³μ΄ λΆμ΄μ§ μμλ λμ§λ§ μ΄ μΈν°νμ΄μ€κ° ν¨μν μΈν°νμ΄μ€λΌλ κ²μ λνλ΄κΈ°λ νλ©°, μμ΄λ ν¨μν μΈν°νμ΄μ€λ‘ μΈμνκΈ°λ νλ€. νμ§λ§ μΈν°νμ΄μ€ κ²μ¦κ³Ό μ μ§λ³΄μλ₯Ό μν΄μ λΆμ¬μ£Όλκ²μ΄ μ’λ€.
κ·Έλ¦¬κ³ ν¨μν μΈν°νμ΄μ€λ 1κ°μ μΆμ λ©μλλ₯Ό κ°λλ€κ³ νκΈ° λλ¬Έμ default method λλ static methodλ μ¬λ¬ κ° μ‘΄μ¬ν΄λ λλ€.
μΆμ λ©μλκ° μ¬λ¬κ°λ©΄ μ΄μ°¨νΌ μλ¬λ₯Ό ν΅ν΄μ μλ €μ€λ€.
MyFunction lambdaMyfunction = (i) -> String.valueOf(i); // lambda
MyFunction myFunction = String::valueOf;
ν¨μν μΈν°νμ΄μ€ Functional Interface μ¬μ© μ΄μ
: ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ μ΄μ λ μλ°μ λλ€μμ ν¨μν μΈν°νμ΄μ€λ‘λ§ μ κ·Ό κ°λ₯νκΈ° λλ¬Έμ΄λ€.
μ¦, μλ°μ λλ€ ννμμ ν¨μν μΈν°νμ΄μ€λ‘λ§ μ¬μ© κ°λ₯νλ€.
κΈ°λ³Έ ν¨μν μΈν°νμ΄μ€
: μλ°μμ κΈ°λ³Έμ μΌλ‘ μ 곡νλ ν¨μν μΈν°νμ΄μ€ (java.util.functionν¨ν€μ§)
ν¨μν μΈν°νμ΄μ€ | Descripter | Method |
Predicate | T -> boolean | boolean test(T t) |
Consumer | T -> void | void accept (T t) |
Supplier | () -> T | T get () |
Function<T,R> | T -> R | R apply(T t) |
Supplier<T>
: supplierλ μΈμλ₯Ό λ°μ§ μκ³ T νμ κ°μ²΄λ₯Ό 리ν΄νλ€.
Supplier<Person> personSupplier = Person::new;
Consumer<T>
: cosumerλ T νμ μ κ°μ²΄λ₯Ό μΈμλ‘ λ°κ³ , 리ν΄κ°μ μλ€.
Consumer<Integer> integerConsumer = System.out::println;
Function<T,R>
: Functionμ T νμ μ μΈμλ‘ λ°κ³ , R νμ μ κ°μ²΄λ₯Ό 리ν΄νλ€.
Function<Integer, String> intToString = Objects::toString;
Predicate<T>
: Predicateλ T νμ μ μΈμλ‘ λ°κ³ κ²°κ³Όλ‘ boolean νμ μ 리ν΄νλ€.
Predicate<Integer> integerPredicate;
π μλ°μμ μ 곡νλ κΈ°λ³Έ ν¨μν μΈν°νμ΄μ€λ μ΅ν λλ κ²μ΄ μ’λ€.
κ·ΈλμΌ μλ°μμ μ 곡νμ§ μλ ν¨μν μΈν°νμ΄μ€λ₯Ό μκ³ , νμν κ²μ λ§λ€ μ μκΈ° λλ¬Έμ΄λ€.