βΆ λλ€μ
*ν¨μν νλ‘κ·Έλλ°κ³Ό λλ€μ
νλ‘κ·Έλλ° μΈμ΄ μ€μλ ν¨μμ ꡬνκ³Ό νΈμΆλ§μΌλ‘ νλ‘κ·Έλ¨μ λ§λ€ μ μλ νλ‘κ·Έλλ° λ°©μμ΄ μλ€. μ΄λ₯Ό 'ν¨μν νλ‘κ·Έλλ°'μ΄λΌκ³ νλ€. μλ°μμ μ 곡νλ ν¨μν νλ‘κ·Έλλ° λ°©μμ 'λλ€μ'μ΄λΌκ³ νλ€.
β
β
β
*λλ€μ ꡬννκΈ°
λλ€μμ κ°λ¨ν μ€λͺ νλ©΄ ν¨μ μ΄λ¦μ΄ μλ μ΅λͺ ν¨μλ₯Ό λ§λλ κ²μ΄λ€.
β
β
*λλ€μ λ¬Έλ² μ΄ν΄λ³΄κΈ°
β
-맀κ°λ³μ μλ£νκ³Ό κ΄νΈ μλ΅νκΈ°
-μ€κ΄νΈ μλ΅νκΈ°
-return μλ΅νκΈ°
β
β
β
*λλ€μ μ¬μ©νκΈ°
β
MyNumber.java
package lambda;
public interface MyNumber {
int getMax(int num1, int num2); // μΆμ λ©μλ μ μΈ
}
TestMyNumber.java
package lambda;
public class TestMyNumber {
public static void main(String[] args) {
MyNumber max = (x, y) -> (x >= y) ? x : y; // λλ€μμ μΈν°νμ΄μ€ν max λ³μμ λμ
System.out.println(max.getMax(10, 20)); // μΈν°νμ΄μ€ν λ³μλ‘ λ©μλ νΈμΆ
}
}
<μ€ν κ²°κ³Ό>
β
β
β
*ν¨μν μΈν°νμ΄μ€
λλ€μμ λ©μλ μ΄λ¦μ΄ μκ³ λ©μλλ₯Ό μ€ννλλ° νμν 맀κ°λ³μμ 맀κ°λ³μλ₯Ό νμ©ν μ€ν μ½λλ₯Ό ꡬννλ κ²μ΄λ€. κ·Έλ¬λ©΄ λ©μλλ μ΄λμ μ μΈνκ³ κ΅¬νν΄μ ν κΉμ? ν¨μν μΈμ΄μμλ ν¨μλ§ λ°λ‘ νΈμΆν μ μμ§λ§, μλ°μμλ μ°Έμ‘° λ³μ μμ΄ λ©μλλ₯Ό νΈμΆν μ μλ€. κ·Έλ¬λ―λ‘ λλ€μμ ꡬννκΈ° μν΄ ν¨μν μΈν°νμ΄μ€λ₯Ό λ§λ€κ³ , μΈν°νμ΄μ€μ λλ€μμΌλ‘ ꡬνν λ©μλλ₯Ό μ μΈνλ κ²μ΄λ€. λλ€μμ νλμ λ©μλλ₯Ό ꡬννμ¬ μΈν°νμ΄μ€ν λ³μμ λμ νλ―λ‘ μΈν°νμ΄μ€κ° λ κ° μ΄μμ λ©μλλ₯Ό κ°μ Έμλ μλλ€.
λλ€μμ μ΄λ¦μ΄ μλ μ΅λͺ ν¨μλ‘ κ΅¬ννκΈ° λλ¬Έμ μΈν°νμ΄μ€μ λ©μλκ° μ¬λ¬ κ° μλ€λ©΄ μ΄λ€ λ©μλλ₯Ό ꡬνν κ²μΈμ§ λͺ¨νΈν΄μ§λ€. λ°λΌμ λλ€μμ μ€μ§ νλμ λ©μλλ§ μ μΈν μΈν°νμ΄μ€λ₯Ό ꡬνν μ μλ€.
β
β
-FunctionalInterface μ λ Έν μ΄μ
νλ‘κ·Έλλ°μ νλ€ λ³΄λ©΄ λλ€μμΌλ‘ ꡬνν μΈν°νμ΄μ€μ μ€μλ‘ λ€λ₯Έ λ©μλλ₯Ό μΆκ°ν μλ μλ€. μ΄λ¬ν μ€μλ₯Ό λ§κΈ° μν΄ @FunctionalInterface μ λ Έν μ΄μ μ μ¬μ©νλ€. @FunctionalInterfaceλ₯Ό μ¬μ©νλ©΄ ν¨μν μΈν°νμ΄μ€λΌλ μλ―Έμ΄κ³ , λ©μλλ₯Ό νλ μ΄μ μ μΈνλ©΄ λ€μκ³Ό κ°μ΄ μ€λ₯κ° λλ€.
*κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° λ°©μκ³Ό λλ€μ λΉκ΅
λλ€μμ μ¬μ©νλ©΄ κΈ°μ‘΄ λ°©μλ³΄λ€ κ°κ²°ν μ½λλ₯Ό ꡬνν μ μλ€. λ€μ μΈν°νμ΄μ€λ₯Ό ν΄λμ€μ λλ€μ λ κ°μ§ λ°©μμΌλ‘ ꡬνν΄ λ³΄κ² λ€.
β
StringConcat.java
package lambda;
public interface StringConcat {
public void makeString(String s1, String s2);
}
β
StringConcatImpl.java
package lambda;
public class StringConcatImpl implements StringConcat {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1 + "," + s2);
}
}
TestStringConcat.java
package lambda;
public class TestStringConcat {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
StringConcatImpl concat1 = new StringConcatImpl();
concat1.makeString(s1, s2);
}
}
-StringConcatImpl ν΄λμ€λ₯Ό μΈμ€ν΄μ€λ‘ μμ±ν΄μ μ°Έμ‘° λ³μ concat1μ μ¬μ©ν΄ makeString( ) λ©μλλ₯Ό νΈμΆ.
β
<μ€ν κ²°κ³Ό>
β
β
β
*λλ€μμΌλ‘ μΈν°νμ΄μ€ ꡬννκΈ°
λλ€μμΌλ‘ μΈν°νμ΄μ€λ₯Ό ꡬνν λ ν΄λμ€λ₯Ό λ°λ‘ μμ±ν νμ μμ΄ λ°λ‘ λ©μλλ₯Ό ꡬννλ€.
ββ
TestStringConcat.java
package lambda;
public class TestStringConcat {
public static void main(String[] args) {
String s1 = "Hello";
String s2 = "World";
StringConcatImpl concat1 = new StringConcatImpl();
concat1.makeString(s1, s2);
StringConcat concat2 = (s, v) -> System.out.println(s + "," + v); // λλ€μ
concat2.makeString(s1, s2);
}
}
<μ€ν κ²°κ³Ό>
-λλ€μμΌλ‘ ꡬννλ €λ©΄ λ©μλλ₯Ό νλλ§ ν¬ν¨νλ ν¨μν μΈν°νμ΄μ€λ§ κ°λ₯νλ€.
β
β
β
*μ΅λͺ κ°μ²΄λ₯Ό μμ±νλ λλ€μ
μλ°λ κ°μ²΄ μ§ν₯ μΈμ΄μ΄λ€. κ·Έλ°λ° λλ€μμ κ°μ²΄ μμ΄ μΈν°νμ΄μ€μ ꡬνλ§μΌλ‘ λ©μλλ₯Ό νΈμΆν μ μλ€. μλ°λ κ°μ²΄ μμ± μμ΄ λ©μλ νΈμΆμ΄ μΌμ΄λ μ μλλ° μ΄ λ©μλλ μ΄λ»κ² νΈμΆλλ κ²μΌκΉμ?
μ΅λͺ λ΄λΆ ν΄λμ€λ ν΄λμ€ μ΄λ¦ μμ΄ μΈν°νμ΄μ€ μλ£ν λ³μμ λ°λ‘ λ©μλ ꡬνλΆλ₯Ό μμ±νμ¬ λμ ν μ μλ€. μ¦, λλ€μμΌλ‘ λ©μλλ₯Ό ꡬνν΄μ νΈμΆνλ©΄ μ»΄ν¨ν° λ΄λΆμμλ λ€μμ²λΌ μ΅λͺ ν΄λμ€κ° μμ±λκ³ μ΄λ₯Ό ν΅ν΄ μ΅λͺ κ°μ²΄κ° μμ±λλ κ²μ΄λ€.
μ΅λͺ μΈμ§ μλμ§ κ΅¬λ³νλλ² → }; μ λ¬΄λ‘ κ΅¬λ³νλ€. }; κ° μμΌλ©΄ μ΅λͺ .
StringConcat concat3 = new StringConcat() {
@Override
public void makeString(String s1, String s2) {
System.out.println(s1 + "," + s2);
}
}
*λλ€μμμ μ¬μ©νλ μ§μ λ³μ
λ λ¬Έμμ΄μ μ°κ²°νλ λλ€μ μ½λμμ μΈλΆ λ©μλμ μ§μ λ³μμΈ iλ₯Ό μμ νλ©΄ μ΄λ»κ² λ κΉμ?
β
TestStringConcat.java
public class TestStringConcat {
public static void main(String[] args) {
...
int i = 100; // main() ν¨μμ μ§μ λ³μ
StringConcat concat2 = (s, v) -> {
// i = 200;
System.out.println(i);
System.out.println(s + "," + v);
};
iλ main( ) ν¨μμ μ§μ λ³μμ΄λ€. λ§μ½ λλ€μ λ΄λΆμμ λ³μ iκ°μ λ³κ²½νλ©΄ μ€λ₯κ° λλ€. λ³μ κ°μ λ³κ²½νμ§ μκ³ μΆλ ₯λ§ νλ©΄ μ€λ₯κ° λ°μνμ§ μλλ€. κ·Έ μ΄μ λ 무μμΌκΉ?
μ§μ λ³μλ λ©μλ νΈμΆμ΄ λλλ©΄ λ©λͺ¨λ¦¬μμ μ¬λΌμ§κΈ° λλ¬Έμ μ΅λͺ λ΄λΆ ν΄λμ€μμ μ¬μ©νλ κ²½μ°μλ μ§μ λ³μκ° μμλ‘ λ³νλ€. λλ€μ μμ μ΅λͺ λ΄λΆ ν΄λμ€κ° μμ±λλ―λ‘ μΈλΆ λ©μλμ μ§μ λ³μλ₯Ό μ¬μ©νλ©΄ λ³μλ final λ³μ, μ¦ μμκ° λλ€. λ°λΌμ μ΄ λ³μλ₯Ό λ³κ²½νλ©΄ μ€λ₯κ° λ°μνλ κ²μ΄λ€.
β
β
β
*맀κ°λ³μλ‘ μ λ¬νλ λλ€μ
λλ€μμ λ³μμ λμ νλ©΄ μ΄λ₯Ό 맀κ°λ³μλ‘ μ λ¬ν μ μλ€. μ΄ λ μ λ¬λλ 맀κ°λ³μμ μλ£νμ μΈν°νμ΄μ€νμ΄λ€.
β
TestLambda.java
package lambda;
interface PrintString {
void showString(String str);
}
public class TestLambda {
public static void main(String[] args) {
PrintString lambdaStr = s -> System.out.println(s);
lambdaStr.showString("hello lamda_1"); // λλ€μμ μΈν°νμ΄μ€ν λ³μμ λμ
νκ³ κ·Έ λ³μλ₯Ό μ¬μ©ν΄ λλ€μ ꡬνλΆ νΈμΆ
showMyString(lambdaStr); // λ©μλμ 맀κ°λ³μλ‘ λλ€μμ λμ
ν λ³μ μ λ¬
}
public static void showMyString(PrintString p) { // 맀κ°λ³μλ₯Ό μΈν°νμ΄μ€νμΌλ‘ λ°μ
p.showString("hello lamda_2");
}
}
<μ€ν κ²°κ³Ό>
β
β
*λ°ν κ°μΌλ‘ μ°μ΄λ λλ€μ
ββ
TestLambda.java
package lambda;
interface PrintString {
void showString(String str);
}
public class TestLambda {
public static void main(String[] args) {
PrintString lambdaStr = s -> System.out.println(s);
lambdaStr.showString("hello lamda_1");
showMyString(lambdaStr);
PrintString reStr = returnString(); // λ³μλ‘ λ°ννκΈ°
reStr.showString("hello"); // λ©μλ νΈμΆ
}
public static void showMyString(PrintString p) {
p.showString("hello lamda_2");
}
public static PrintString returnString() { // λλ€μμ λ°ννλ λ©μλ
return s -> System.out.println(s + " World");
}
}
<μ€ν κ²°κ³Ό>
β
β μ§κΈκΉμ§ 보면 λλ€μμ ν¨μμ ꡬνλΆλ₯Ό λ³μμ λμ νκ³ , 맀κ°λ³μλ‘ μ λ¬νκ³ , ν¨μμ λ°ν κ°μΌλ‘ μ¬μ©ν μ μλ€. λ§μΉ λ³μμ²λΌ μ¬μ©ν μ μλ€. μ΄λ ν¨μν νλ‘κ·Έλλ°μ νΉμ§ μ€ νλμ΄λ€.
'Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java-κΈ°μ΄] μμΈ ν΄λμ€ (0) | 2021.02.22 |
---|---|
[Java-κΈ°μ΄] μ€νΈλ¦Ό (0) | 2021.02.22 |
[Java-κΈ°μ΄] λ΄λΆ ν΄λμ€ (0) | 2021.02.22 |
[Java-κΈ°μ΄] Map μΈν°νμ΄μ€ (0) | 2021.02.22 |
[Java-κΈ°μ΄] Comparable μΈν°νμ΄μ€μ Comparator μΈν°νμ΄μ€ (0) | 2021.02.22 |
λκΈ