1. λλ€μ
(1) μ μ
μ΅λͺ ν¨μ (μ΄λ¦μ΄ μλ ν¨μ) == μ κ·Όμ μ΄μ, λ°νν, ν¨μμ΄λ¦, νλΌλ―Έν°μ μλ£ν λ€ νμ μμ.
λλ€μλ μΌκΈ κ°μ²΄μ΄λ€.
**μΌκΈ κ°μ²΄λ?
λ°μ΄ν°λ λ³μλ₯Ό λ°μ μ μλ κ°μ²΄, μ΄λ€ 맀μλμ νλΌλ―Έν°λ‘ λ€μ΄κ° μ μλ κ°μ²΄, μ΄λ€ 맀μλμ λ°ν κ°μ΄ λ μ μλ κ°μ²΄ μ΄λ€.
(2) νν
(μ λ¬κ° 1, μ λ¬κ°2, ...) -> { μ€νμ½λ }
2. ν¨μν μΈν°νμ΄μ€
(1) λ»
μΆμ 맀μλκ° μ€μ§ νλ λΏμΈ μΈν°νμ΄μ€
(2)λλ€μκ³Όμ κ΄κ³
λλ€μμ μ€μ§ ν¨μν μΈν°νμ΄μ€λ‘λ§ μ κ·Ό κ°λ₯.
** why?
μΈν°νμ΄μ€μ μΆμ 맀μλκ° λ κ°μ΄λ©΄, λλ€μκ³Ό 맀μΉλλ μΆμ 맀μλκ° λ¬΄μμΈμ§ λͺ¨νΈν΄μ§λ€.
λ°λΌμ μΆμ 맀μλκ° μ€μ§ νλμΈ ν¨μν μΈν°νμ΄μ€λ§μ΄ λλ€μκ³Ό 맀μΉμ΄ κ°λ₯νμ¬ μΈ μ μλ€.
(λ μ¬μ΄μ νλΌλ―Έν° κ°―μ, 리ν΄κ° μ 무λ λ§μΆ°μΌ νλ€.)
3. μ½λ 리뷰
(1) μΆμ 맀μλμ μΈμ 1κ°, λ°νν void μΈ κ²½μ°
// <<μΈν°νμ΄μ€ λΆλΆ>>
//ν¨μν μΈν°νμ΄μ€μ μΆμ 맀μλκ° 1 κ°μ¬μΌλ§ νλ€κ³ μ»΄ν¨ν°μκ² κ°λ₯΄μ³ μ£ΌκΈ° μν΄ μ΄λ
Έν
μ΄μ
μ΄μ©
// ν΄λΉ μ΄λ
Έν
μ΄μ
μμΌλ©΄, μΆμ 맀μλκ° 2κ°κ° λ λ, μ»΄ν¨ν°κ° μλ¬λ₯Ό λ§ν΄μ€λ€.
@FunctionalInterface
public interface Convertible {
// USDλ₯Ό νμ νλ μΆμ 맀μλ
void convert(int USD);
}
/* ν¨μν μΈν°νμ΄μ€ κ°μ²΄μ κ·Έ κ°μ²΄μ 맀μλμ λ£μ κ°μΌλ‘ μ΄λ£¨μ΄μ§ ν¨μ
μΈν°νμ΄μ€λ μΌλ°μ μΌλ‘ κ°μ²΄λ₯Ό κ°μ§ μ μμ§λ§, λλ€μμΌλ‘ μΆμ맀μλλ₯Ό λ°λ‘ ꡬ체ν μν€κΈ° λλ¬Έμ
λλ€μμΌλ‘ 맀μΉν κ²½μ°μλ κ°λ₯ */
public static void convertUSD(Convertible converter, int USD){
converter.convert(USD);
}
}
// λλ€μμ ν΅ν΄ μΈν°νμ΄μ€μμ λ°λ‘ κ°μ²΄λ₯Ό μμ±νκ³ ,
//(λ€νμ±μ μ리: λΆλͺ¨ ν΄λμ€μ μ°Έμ‘° λ³μλ μμ ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλ€.)
Convertible convertible = (USD) -> System.out.println(USD + "λ¬λ¬ = "+ (USD *1400) + " μ");
// λ§λ€μ΄μ§ κ°μ²΄μ ν΄λΉ κ°μ²΄ 맀μλμ λ£μ κ°μ νλΌλ―Έν°λ‘ 보λλ€.
// λλ€μμ΄ κ³§ μΆμ 맀μλμ ꡬ체ν μ΄λ―λ‘ ν΄λΉ 2λ USDλ‘ λ³΄λ΄μ§λ€.
convertUSD(convertible,2);
// * κ°μ²΄ μμ± κ³Όμ μμ΄ λλ€μ μ체λ₯Ό νλΌλ―Έν°λ‘ λ³΄λΌ μλ μλ€.
// * μ΄μ§νΌ νλΌλ―Έν°μΈ Convertible converterμ λ§λ κ°μ²΄κ° μμ±λλ―λ‘ λ°κ³Ό κ°μ νκΈ°λ κ°λ₯νλ€.
convertUSD((USD) -> System.out.println(USD + "λ¬λ¬ = "+ (USD *1400) + " μ"), 1);
(2) μΆμ 맀μλμ μΈμ μκ³ , λ°ννλ voidμΈ κ²½μ°
// ν¨μν μΈν°νμ΄μ€
@FunctionalInterface
public interface ConvertibleWithNoParams {
void convert();
}
ConvertibleWithNoParams c1 = () -> System.out.println("1λ¬λ¬λ 1400μ");
// μΆμ 맀μλ νΈμΆνλ©΄ μμ λλ€μμ΄ ν΄λΉ νΈμΆμ μνμ¬ μΌμ μννλ€.
c1.convert();
(3) λλ€μμ μ½λ λΆλΆμ΄ ν μ€μΈ κ²½μ°μ λ μ€ μ΄μμΈ κ²½μ° κ΅¬λΆ
** λλ€μμ μ½λ λΆλΆμ΄ λ μ€ μ΄μμΈ κ²½μ° () -> {};μμ {}; λΆλΆμ κΌ μ¨μ€μΌ νλ€. (ν μ€μΈ κ²½μ° μλ΅ κ°λ₯)
// μμ ν¨μν μΈν°νμ΄μ€ κ³μ μ¬μ©
c1 = () -> {
int USD = 5;
int KRW = 1400;
System.out.println(USD + "λ¬λ¬ = "+ (USD *KRW) + " μ");
};
(3) μΆμ 맀μλμ μΈμκ° 2κ° μ΄μμΈ κ²½μ° λ°ννμ void
** λμ΄ μΈμ κ°―μ λ§μΆ°μ£Όλ©΄ λ¨.
public interface ConvertibleWithTwoParams {
void convert(int USD, int KRW);
}
ConvertibleWithTwoParams c2 = (USD, KRW) -> System.out.println(USD + "λ¬λ¬ = "+ (USD *KRW) + " μ");
c2.convert(10,1400);
(4) μΆμ 맀μλμ λ°ν κ°μ΄ μλ κ²½μ°
** returnμ΄ μλ κ²½μ°μλ {};μ κΌ μ¨μ€μΌ νλ€.
** μΆμ 맀μλκ° λ°νν κ°λλ€κ³ ν΄μ λλ€μμ κΌ return = ~~;λ₯Ό μ¨μ€ νμλ μλ€.
λ°μ κ²½μ°μ²λΌ κ·Έλ₯ return λΉΌκ³ μ μ΄λ λλ€μμ΄ μμμ return μμ κ½μ λ£λλ€.
// int λ°νκ°μ΄ νμν μΈν°νμ΄μ€
@FunctionalInterface
public interface ConvertibleWithReturn {
int convert(int USD, int KRW);
}
//μλ returnμ μ¨μ λνλ΄λ©΄ {return USD*KRW;}; λ‘ ν΄μΌνμ§λ§, returnμ μ μ°λ {};μ μΈ μ무λ μ¬λΌμ‘λ€.
ConvertibleWithReturn c3 = (USD, KRW) -> USD * KRW;
int result = c3.convert(20, 1400);
System.out.println("20 λ¬λ¬ = "+result+" μ");
4. μ€μ€λ‘ ν΄λ³΄κΈ°
/* μΆμ 맀μλ μΈμ 1κ°, λ°νν void μΈ κ²½μ°(ν¨μ κ²½μ λνλ΄κΈ°, κ·Έλ₯ λνλ΄κΈ°)
* μΆμ 맀μλκ° μΈμλ μκ³ λ°ννλ void μΈ κ²½μ°
* μΆμ 맀μλκ° μΈμ 2κ°μ λ°ννλ μλ κ²½μ° */
import WorkOut_Myself.Translator.TranslateEngTo;
import WorkOut_Myself.Translator.TranslateHitoKR;
import WorkOut_Myself.Translator.TranslateTwo;
public class FunctionalInterface_myself {
public static void main(String[] args) {
TranslateEngTo Hello = (hello) -> System.out.println(hello +"μ(λ) νκ΅μ΄λ‘ \"μλ
νμΈμ\" μ
λλ€.");
EngToKR(Hello,"Hi");
EngToKR((Hi) -> System.out.println(Hi +"μ(λ) νκ΅μ΄λ‘ \"μλ
νμΈμ\" μ
λλ€."),"νμ§λ©λ§μν
" );
TranslateHitoKR AnyLanguage = () -> System.out.println("Helloλ νκ΅μ΄λ‘ \"μλ
νμΈμ.\" μ
λλ€.");
AnyLanguage.Translate();
TranslateTwo Korean = (ENG, JPN) -> {
return "μμ΄μΈ " + ENG + "μ(λ) νκ΅μ΄λ‘ μλ
νμΈμ μ
λλ€. κ·Έλ¦¬κ³ μΌλ³Έμ΄μΈ " + JPN + "μ(λ) νκ΅μ΄λ‘ μλ
νμΈμ μ
λλ€.";
};
String s = Korean.Translate("Hello!", "κ³€λμΉμ");
System.out.println(s);
}
public static void EngToKR (TranslateEngTo TL, String s){
TL.Translate(s);
}
}