2021. 6. 21. 13:37γκ°λ μ 리 μμ μ€/Java
μλ νμΈμ? μ£Όλνλμ λλ€!
μ€λμ JDK 1.8λΆν° μ§μμ΄ λλ Lamdaμ λν΄ κ³΅λΆ ν΄ λ³΄λλ‘ ν κ²μ΄μμ!
Spring Bootλ‘ Web Projectλ₯Ό νκ³ μλλ°, Lamdaμ Optionalμ΄ μ¬μ©λκΈ°μ 곡λΆλ₯Ό ν΄ λ³΄λ κ²μ λλ€.
μ΄κ²μ μ€λͺ νκΈ°μ μ μ¨ μ°λ¦¬λ ν¨μν μΈμ΄μ λν΄μ μ νμκ° μλ κ²μ΄μμ.
μλ°λ μ°λ¦¬κ° μ λ― OOPμΈμ΄(κ°μ²΄ μ§ν₯ μΈμ΄)μΈλ°, JDK 1.8 λΆν° ν¨μν μΈμ΄μ κΈ°λ₯μ μΆκ°ν κ²μ΄μμ.
μ¬μ€ ν¨μν μΈμ΄ κΈ°λ₯μ κ°μ‘λ€λΌκ³ νκΈ°μλ μ½νκ³ , κ·Έ κΈ°λ₯μ ν¬ν¨νλ€λΌκ³ 보λ κ²μ΄ λ§μ΅λλ€!
νμ΄μ¬, JavaScript μμ OOPμ΄μ§λ§, ν¨μν μΈμ΄ κΈ°λ₯μ κ°μ§κ³ μλ΅λλ€!
κ·ΈλΌ μμ ν΄ λ³΄λλ‘ νκ² μ΅λλ€!
π λλ€μ(Lambda Expression)
π ν¨μ(Method)λ₯Ό κ°λ¨ν 'μ(Expression)'μΌλ‘ νννλ λ°©λ²
int max ( int a, int b ) {
return a > b ? a : b;
}
μλ₯Ό λ€μ΄ μμ κ°μ μμ΄ μμ λ, μ΄κ²μ κ°λ¨νκ² νννκ² λλ©΄ μ΄λ»κ² ν μ μμκΉμ?
(a, b) -> a > b ? a : b
μμ κ°μ΄ ννμ ν μ μλλ°, μ΄λ κ² νκΈ°νλ λ°©λ²μ΄ Labdaμ μ΄λΌλ κ²μ΄μμ.
π μ΅λͺ ν¨μ(μ΄λ¦μ΄ μλ ν¨μ, Anonymous Function)
π μ΄λ¦μ΄ μλ ν¨μλ?
int max ( int a, int b ) { // 'max'λΌλ μ΄λ¦ μ‘΄μ¬
return a > b ? a : b;
}
π μ΄λ¦μ΄ μλ ν¨μλ?
(int a, int b) -> { // λ°ν μλ£ν νμ
κ³Ό μ΄λ¦μ΄ μλ΅
return a > b ? a : b;
}
μ¦, λλ€μμΌλ‘ λ³κ²½ν λ λ°©λ²μ λ¨Όμ λ°ν μλ£ν νμ κ³Ό μ΄λ¦μ μμ±λλ€. κ·Έλ° λ€ λ§€κ°λ³μμ μ€κ΄νΈμ¬μ΄μ '->' μ΄λ° νμλ₯Ό λ£μ΄μ£Όλ©΄ λλ΅λλ€!
μ΄λ κ² μ΄λ¦μ΄ μ¬λΌμ§κΈ° λλ¬Έμ μ΅λͺ ν¨μλΌκ³ λΆλ₯΄λ κ²μ΄μμ.
π ν¨μ(Function)μ Method(λ©μλ)μ μ°¨μ΄
π κ·Όλ³Έμ μΌλ‘λ λμΌνλ, ν¨μλ μΌλ°μ μ©μ΄μ΄κ³ , λ©μλλ κ°μ²΄ μ§ν₯ κ°λ μ©μ΄μΈ κ²μ΄μμ.
π ν¨μλ Classμ λ 립μ μ΄λ, λ©μλλ Classμ μ’ μμ μ΄λλλ€.
μ¦, λ©μλλ 무쑰건 Classμμ μμ΄μΌ νλ κ²μ΄μμ.
π λλ€μ μμ±νκΈ°
π λ©μλμ μ΄λ¦κ³Ό λ°ν μλ£ν νμ μ μ κ±°νκ³ , ' -> 'λ₯Ό μ€κ΄νΈ '{}' μμ μΆκ°
π λ°νκ°μ΄ μλ κ²½μ°, μμ΄λ κ°λ§ μ κ³ , returnλ¬Έ μλ΅ ( λμ ' ; ' μλ΅)
π¬ μλ΅ νκΈ° μ
(int a, b) -> {
return a > b ? a : b
}
π¬ μλ΅ κ²°κ³Ό
(int a, int b) -> a > b ? a : b
π 맀κ°λ³μμ νμ μ΄ μΆλ‘ κ°λ₯νλ©΄ μλ΅κ°λ₯ (λλΆλΆ μλ΅ κ°λ₯)
π¬ μλ΅ νκΈ° μ
(int a, int b) -> a > b ? a : b
π¬ μλ΅ κ²°κ³Ό
(a, b) -> a > b ? a : b
π λλ€μ μμ±νκΈ° - μ£Όμμ¬ν
π 맀κ°λ³μκ° νλμΈ κ²½μ°, μκ΄νΈ ' () ' μλ΅ κ°λ₯ (μλ£ν νμ μ΄ μμ λλ§!)
π¬ μλ΅ νκΈ° μ
(a) - > a * a
(int a) -> a * a
π¬ μλ΅ κ²°κ³Ό
a -> a * a // μ μ
int a -> a * a // Error (μλ£ν νμ
μ΄ μμ κ²½μ° μκ΄νΈ μλ΅ λΆκ°)
π λΈλ‘ μμ λ¬Έμ₯μ΄ νλμΌ λλ μ€κ΄νΈ ' {} ' μλ΅ κ°λ₯ ( λμ ' ; ' μλ΅)
π¬ μλ΅ νκΈ° μ
(int i) -> {
System.out.println(i);
}
π¬ μλ΅ κ²°κ³Ό
(int i) -> System.out.println(i)
π νλλΏμΈ λ¬Έμ₯μ΄ returnλ¬Έμ΄λΌλ©΄ μ€κ΄νΈ ' {} ' μλ΅ λΆκ°
(int a, int b) -> {
return a > b ? a : b;
}
// μμ λ΄μ©μ μλμ²λΌ μλ΅ν μ μλ€.
(int a, int b) -> return a > b ? a : b // Error
π λλ€μμ μ
Method | Lamda |
π μλ°μμμ λλ€μμ μ΅λͺ ν¨μκ° μλ μ΅λͺ κ°μ²΄μ΄λ€!
π μλ°μμμ λλ€μμ μ΅λͺ ν¨μκ° μλλΌ μ΅λͺ κ°μ²΄.
μλνλ©΄ μλ°μμλ Methodκ° Class λ°μ μ‘΄μ¬ν μ μκΈ° λλ¬Έμ΄μμ.
(a, b) -> a > b ? a : b
// μμ μ½λλ μλμ κ°λ€.
new Object() {
int max(int a, int b) {
return a > b ? a : b;
}
μμ μ½λλ μ΅λͺ Classμ μ΅λͺ κ°μ²΄μΈ κ²μ΄μμ. μ΄κ²μ κ°μ²΄μ μ μΈκ³Ό μμ±μ λμμ νλ κ²μ λλ€.
λ°λΌμ λλ€μμ κ°μ²΄μΈ κ²μ΄μμ.
π λλ€μ (μ΅λͺ κ°μ²΄)μ λ€λ£¨κΈ° μν μ°Έμ‘° λ³μκ° νμ. μ°Έμ‘° λ³μμ νμ μ?
Object obj = new Object() {
int max ( int a, int b ) {
return a > b ? a : b;
}
};
// μμ μ½λλ₯Ό λλ€μμΌλ‘ λ³ννλ©΄?
Type obj = (a, b) -> a > b ? a : b; // μ΄κ²μ μ΄λ€ μλ£ν νμ
?
(a, b) -> a > b ? a : b;
μ΄κ²μ κ°μ²΄μΈ κ²μ΄μμ.
κ·Έλ λ€λ©΄ μ°Έμ‘° λ³μ objμ μλ£ν νμ
μ 무μμΌλ‘ ν΄μΌ λ κΉμ? Objectλ‘ νλ€λ©΄ Errorκ° λκ² λ κ²μ΄μμ.
int value = obj.max(3, 5); // Error
μ? μμ μ½λλ Errorκ° λκ² λλ κ²μΌκΉμ? κ·Έκ²μ λ°λ‘ Object Classμλ maxλΌλ Methodκ° μκΈ° λλ¬ΈμΈ κ²μ΄μμ.
objλΌλ κ°μ²΄λ maxλΌλ Methodλ₯Ό κ°μ§κ³ μμ§λ§, Methodλ₯Ό μ¬μ©ν μλ μλ κ²μ΄μμ.
κ·Έ μ΄μ λ ObjectλΌλ νμ¬(리λͺ¨μ»¨)μλ maxλΌλ ν(λ²νΌ)μ΄ μκΈ° λλ¬ΈμΈ κ²μ΄μμ.
λ°λΌμ κ°μ²΄κ° maxλ₯Ό κ°μ§κ³ μμ΄λ νΈμΆμ ν μ μλ κ²μ΄μμ.
π μμ μ½λ
class lamda_ex {
public static void main (Stringp[] args) {
// Object obj = (a, b) -> a > b ? a : b // λλ€μ μμ± (μ΅λͺ
κ°μ²΄)
// μμ κ°μ΄ νλ©΄ ν¨μνμΌλ‘ λ€λ£¨μ§ μλλ€κ³ Error λ°μ
// κ²°κ΅ μμ μλ μ½λλ κ°λ€.
Object obj = new Object() {
int max ( int a, int b ) {
return a > b ? a : b;
}
};
// int value = obj.max(3, 5); // Error (Objectμλ maxλ₯Ό κ°κ³ μμ§ μλ€)
// μμ κ°μ λ νλ³νμ ν΄μ€μΌ νλλ°, μ΄λ° κ²½μ° νλ³νμ ν μ μλ€.
}
μ£Όλνλμ κΈμ΄ λ§μμ λμ ¨λμ? ꡬλ κ³Ό 곡κ°! κ·Έλ¦¬κ³ , λκΈμ μ£Όλνλμκ² λ§μ νμ΄ λ©λλ€!
'κ°λ μ 리 μμ μ€ > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] Wrapper Class (0) | 2021.06.22 |
---|---|
[JAVA] ν¨μν μΈν°νμ΄μ€ (0) | 2021.06.21 |
[Java] Enum (μ΄κ±°ν) (0) | 2021.06.20 |
[Java] ν΄λμ€, μμ, getter, setter, νλ³ν, super, μ€λ²λΌμ΄λ©μ νμ©ν μμ (0) | 2021.03.16 |
[Java] Classμ λνμ¬ (λ―Έμμ±) (0) | 2021.03.15 |