μλ° νλ‘κ·Έλλ°μ μ΅μνμ§λ§ Java λ²μ μ λν΄μλ 무μ§νλ κ² κ°λ€. μ무μκ°μμ΄ μμ νλ λ²μ μ μ¬μ©νκ³ , λ§μ ν΄λΉ λ²μ μμ κ°λ νΉμ±μ μ΄ν΄ν΄λ³Ό μκ°μ νμ§ μμλ€. κ·ΈλΌ Java8μ μ΄λ€ νΉμ§μ΄ μμκΉ?
Lambda Expression
java8 λΆν°λ λλ€ννμ(λλ€μ)μ μ§μν©λλ€.
μλ§λ java8 μ΄μ λ²μ μ μ¬μ©νμλ λΆμ΄λΌλ©΄ λλ€μμ΄ μ΅μνμ§ μμΌμ€ μ μλλ° μ¬μ€ λλ€μ, λλ λλ€ν¨μλ java8μμ μ²μ λμ¨ κ°λ μ΄ μλλλ€.
λλ€μμ μν λλ€ κ³μ°λ²μμ μ¬μ©λ μμΌλ‘ νλ‘κ·Έλλ° μΈμ΄λ‘μλ LISPμ 첫 λμ μ΄ λμ΄ μ΄ν C#, Scala, Python λ± νμ¬λ λλΆλΆμ μΈμ΄μμ μ§μνκ³ μμ΅λλ€.
λλ€μμ μ΅λͺ ν¨μλ₯Ό μ§μΉνλ μ©μ΄λ‘μ λ§ κ·Έλλ‘ μ μΈλμ΄μμ§ μμ ν¨μλ₯Ό μ체μ μΌλ‘ ν¨μνν ννμμ λ»ν©λλ€. μ€λͺ μΌλ‘λ§ νμ΄ μ°μλ μ΄ν΄νκΈ° νλμ€ κ² κ°μ μμ λ₯Ό ν΅ν΄ μμ보λλ‘ νκ² μ΅λλ€.
public String concat(String message1, String message2){
return message1+message2;
}
μμμ μ μΈν concat λ©μλλ 2κ°μ String parameterλ₯Ό λ°μ λΆμ¬μ£Όλ λ©μλ μ λλ€. μμ λ©μλλ₯Ό λλ€μμΌλ‘ νννμλ©΄ λ€μκ³Ό κ°μ΅λλ€.
(a,b)-> a+b
// (a,b) : parameter μ μΈ
// -> : parameterμ bodyλ₯Ό ꡬλΆνλ ꡬλΆμ
// a+b : return κ°
νΉμ λ€μκ³Ό κ°μ΄ ννμ΄ κ°λ₯ν©λλ€.
(a,b)->{return a+b;}
// (a,b) : parameter μ μΈ
// -> : parameterμ bodyλ₯Ό ꡬλΆνλ ꡬλΆμ
// {return a+b;} : ν¨μ body
μμ μμ λ‘ μ μ μλ―μ΄ λλ€μμ κ°μ₯ ν° μ₯μ μ μ½λκ° λ§€-μ° κ°κ²°ν΄μ§ μ μλ€λ μ₯μ μ΄ μμ΅λλ€. νμ§λ§ λͺ¨λ κ²½μ°μμ μ΄λ¬ν λλ€μμ μ¬μ© ν μ μλ κ²μ μλλλ€.
Functional Interface
μλ°μμ λλ€μμ μ¬μ© κ°λ₯νκ²½μ°λ, Functional Interface (ν¨μν μΈν°νμ΄μ€)λ‘ μ μΈλμ΄μλ κ²½μ°μμλ§ λλ€μμΌλ‘ ννμ΄ κ°λ₯ν©λλ€.
λ°λΌμ μ΄λ€ κ²½μ°μ λλ€μ ννμ μ¬μ©νλμ§ μμ보기 μν΄ λ¨Όμ , Functional Interface (ν¨μν μΈν°νμ΄μ€)μ λν΄μ μμ보λλ‘ νκ² μ΅λλ€.
ν¨μν μΈν°νμ΄μ€λ νλμ λ©μλλ§μ κ°λ Interface μ λλ€. λ€μμ ν¨μν μΈν°νμ΄μ€ μμ μ½λμ λλ€.
@FunctionalInterface
interface Concat{
publicStringprocess(String message1,String message2);
}
μμ μμ λ₯Ό 보μλ©΄ concat μΈν°νμ΄μ€λ process νλμ λ©μλλ§μ κ°μ΅λλ€.
μμ κ°μ 쑰건μ λ§μ‘±ν λ, ν΄λΉ μΈν°νμ΄μ€λ ν¨μνμΈν°νμ΄μ€μ 쑰건μ μΆ©μ‘±νλ€κ³ ν μ μκ² μ΅λλ€.
μμκ°μ μΈν°νμ΄μ€κ° μμλ, μΌλ°μ μΌλ‘λ μΈν°νμ΄μ€λ₯Ό ꡬνν ꡬν체λ₯Ό μ§μ μμ±νμ¬ ν΄λΉ λ©μλλ₯Ό νΈμΆν μλ μκ² μ§λ§, λ€μκ³Ό κ°μ λλ€μμ ν΅ν΄μ ννμ΄ κ°λ₯ν΄μ§λλ€.
public static void main(String[] args){
Concat concatString=(m1, m2)-> m1+ m2;
System.out.println(concatString.process("νλ","λ"));
}
ν΄λΉ μ΅λͺ ν¨μλ₯Ό μ¬μ©νκ² λλ©΄ μνλ μν©μ μ΅μ μ λ°λΌμ κ²°κ³Όκ°μ λ€λ₯΄κ² λμΆμ΄ κ°λ₯ν΄μ§λλ€.
public static void main(String[] args){
Concat concatString=(m1, m2)-> m1+ m2;
System.out.println(concatString.process("νλ","λ"));
Concat concatSplitString=(m1, m2)-> m1+ ","+ m2;
System.out.println(concatSplitString.process("νλ","λ"));
}
μμ ν¨μν μΈν°νμ΄μ€λ₯Ό λ©μλνμν€λ©΄ λ€μκ³Ό κ°μ΄ ν¨μν νλ‘κ·Έλλ°λ΅κ² μ½λλ₯Ό ꡬν ν μ μμ΅λλ€.
public static void main(String[] args){
concat("νλ", "λ",(m1, m2)-> m1+ m2);
concat("νλ", "λ",(m1, m2)-> m1+ ","+ m2);
}
public static void concat(String m1, string m2,Concat func){
System.out.println(concatString.process(m1,m2));
}
java.util.function
javaμμλ λλ€μμ λ νΈνκ² μ¬μ© ν μ μλλ‘ μμκ°μ΄ λ³λμ Functional Interfaceλ₯Ό μ μΈνμ§ μκ³ μ΅λͺ ν¨μλ₯Ό μ¬μ©ν μ μλλ‘ java.util.function λ΄μ₯ ν¨μν μΈν°νμ΄μ€λ₯Ό μ 곡νκ³ μμ΅λλ€.
κ΅μ₯ν λ§μλ° μ΄λ€ interfaceκ° μλμ§λ λ€μμ..!
λ