[Java] λλ€μ - 1. λλ€μ μμ±λ²μ λν΄
by rlaehddnd0422μλ°μλ λ λ²μ ν° λ³νκ° μμλλ°, κ·Έ μ€ νλ²μ JDK 1.6λΆν° μΆκ°λ Generics κΈ°λ₯, ν λ²μ JDK 1.8 (SE 8) λΆν° μΆκ°λ λλ€μ κΈ°λ₯μ λλ€.
νΉν λλ€μ λμ μΌλ‘ μλ°λ κ°μ²΄ μ§ν₯ μΈμ΄μ΄μ λμμ ν¨μν μΈμ΄κ° λμμ΅λλ€.
ν¨μν μΈμ΄ : Haskell, Scala λ±
κ°μ²΄ μ§ν₯ μΈμ΄κ° ν¨μν μΈμ΄μ κΈ°λ₯κΉμ§ κ°μΆκΈ°λ μ΄λ ΅λ€κ³ ν©λλ€. μ΄λ² ν¬μ€ν μμ λλ€μμ λ°°μλ΄μΌλ‘μ¨ Java 8 λ²μ μμ ν¨μν μΈμ΄μ μ₯μ μ μ΄λ»κ² μ λͺ©νμλμ§ μμλ³΄κ² μ΅λλ€.
λλ€μμ΄λ 무μμΌκΉ?
λλ€μ(Lambda Expression)μ κ°λ¨ν λ§ν΄ λ©μλλ₯Ό νλμ μμΌλ‘ νννλ κ²μ λ§ν©λλ€.
λ©μλ β‘οΈ μ
How ?
ex) int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int) (Math.random()*5));
μ¬κΈ°μλ Math.random()*5 κ° λ°λ‘ 'λλ€μ'μ λλ€. μ΄ λλ€μμ΄ νλ μΌμ λ©μλλ‘ ννν΄λ³΄λ©΄ λ€μκ³Ό κ°μ΅λλ€.
int method(){
return (int) (Math.random()*5);
}
μ λ©μλλ³΄λ€ λλ€μμΌλ‘ νννλ κ²μ΄ ν¨μ¬ κΉλνκ³ κ°κ²°ν©λλ€.
λ©μλλ ν΄λμ€μ import λμ΄μΌ ν λΏ μλλΌ, κ°μ²΄λ μμ±ν΄μΌλ§ λ©μλλ₯Ό νΈμΆν μ μμ΅λλ€.
public class MethodClass {
int method() {
return (int) (Math.random() * 5);
}
}
public class ArrayFillExample {
public static void main(String[] args) {
MethodClass methodClass = new MethodClass();
int arr[] = new int[5];
for (int i : arr) {
arr[i] = methodClass.method();
System.out.println("arr[i] = " + arr[i]);
}
}
}
μ μμλ₯Ό 보면 Methodλ₯Ό μ¬μ©νκΈ° μν΄ κ°μ²΄λ₯Ό μμ±νκ³ λ©μΈ ν¨μμμ κ°μ²΄μ λ©μλλ₯Ό λΆλ¬μ μ¬μ©νμ΅λλ€.
νμ§λ§ λλ€μμ μ κ³Όμ μμ κ°μ²΄λ₯Ό μμ±νλ κ³Όμ μ μλ΅νκ³ , λλ€μ μ체λ§μΌλ‘ μ΄ λ©μλμ μν μ λμ ν μ μμ΅λλ€.
μ¦ λλ€μμ κ°μ²΄μ μ μΈ, μμ±μ λλ€μμΌλ‘ νμΉλ€λμ μμ "μ΅λͺ κ°μ²΄ μν "μ ν©λλ€.
Q. λ©μλμ ν¨μμ μ°¨μ΄κ° 무μμΌκΉ?
A. κΈ°λ₯μ μΌλ‘ λμΌν μλ―Έλ₯Ό κ°μ§.
μ°¨μ΄κ° μλ€λ©΄, ν¨μλ ν΄λμ€μ λ 립, λ©μλλ ν΄λμ€μ μ’ μ
κ°μ²΄μ§ν₯ μΈμ΄μμλ κ°μ²΄μ νμ, λμμ μλ―Ένλ μλ―Έλ‘ 'λ©μλ'λΌλ μ©μ΄λ‘ μ¬μ©ν©λλ€.
λλ€μμ ν¨μν μΈμ΄λ₯Ό μ λͺ©ν κΈ°λ₯μ΄λΌκ³ νκΈ° λλ¬Έμ, μ΄μ λΆν° λλ€μμ κ΄νμ¬ μ€λͺ ν λλ 'λ©μλ' λμ 'ν¨μ' λΌλ μ©μ΄λ₯Ό μ¬μ©νκ² μ΅λλ€.
λλ€μ μμ±λ²
λλ€μμ κΈ°μ‘΄ λ©μλμμ λ©μλ μ΄λ¦κ³Ό λ°ννμ μ μ κ±°νκ³ , 맀κ°λ³μ μ μΈλΆμ μ€κ΄νΈ {} μ¬μ΄μ ->λ₯Ό μΆκ°ν΄μ£Όλ©΄ λ©λλ€.
// κΈ°μ‘΄ λ©μλ μ¬μ© λ°©μ
λ°ννμ
λ©μλμ΄λ¦(맀κ°λ³μ){
λ¬Έμ₯λ€
}
// λλ€μ μ¬μ©λ°©μ
(맀κ°λ³μ) -> { λ¬Έμ₯λ€ }
μλ₯Ό λ€μ΄ λ΄ μλ€.
// κΈ°μ‘΄ λ©μλ μ¬μ© λ°©μ
int max(int a, int b){
return a > b ? a : b;
}
// λλ€μ μ¬μ©λ°©μ
(int a, int b) -> { return a > b ? a : b; }
- μ΄ λ, μμ²λΌ λ°ν κ°μ΄ μλ λ©μλμ κ²½μ°, return λ¬Έ λμ 'μ'μΌλ‘ λμ²΄κ° κ°λ₯ν©λλ€.
// λλ€μ μ¬μ©λ°©μ
(int a, int b) -> { return a > b ? a : b; }
// μμΌλ‘ λ체
(int a, int b) -> { a > b ? a : b }
- return λ¬Έμ΄ μ κ±°λκ³ λ¬Έμ₯ λμ μΈλ―Έμ½λ‘ μ΄ μλ΅λ©λλ€.
- μ¬κΈ°μ λν΄ μ λ ₯ λ§€κ° λ³μμ λν νμ μ μΆλ‘ μ΄ κ°λ₯ν κ²½μ° μλ΅ν μ μμ΅λλ€. (κ±°μ λλΆλΆμ νμ μ΄ μΆλ‘ κ°λ₯νκΈ° λλ¬Έμ μλ΅ κ°λ₯)
(int a, int b) -> { a > b ? a : b }
// νμ
μλ΅ ( μΆλ‘ κ°λ₯ν κ²½μ° )
(a, b) -> { a > b ? a : b }
μ£Όμ !
1. λ§€κ° λ³μκ° μ¬λ¬ κ°μΈ κ²½μ° νλμ νμ λ§ μλ΅νλ κ²μ νμ©λμ§ μμ΅λλ€.
ex) (int a, b), (a, int b)
2. 맀κ°λ³μκ° νλμΈ κ²½μ°, κ΄νΈ μλ΅ κ°λ₯. λ€λ§ λ§€κ° λ³μμ νμ μ λͺ μν΄μΌ νλ κ²½μ°λ μλ΅ λΆκ°λ₯
ex) (a) -> a* a
a -> a*a
int a -> a*a (X)
(int a) -> a*a (O)
3. λ¬Έμ₯μ΄ νλμΈ κ²½μ° μ€κ΄νΈ μλ΅ κ°λ₯
- λ°λΌμ κ²°λ‘ μ μΌλ‘ μ΄λ κ² μΈ μ μμ΅λλ€.
int max(int a, int b){
return a > b ? a : b;
}
(a, b) -> a > b ? a : b // λ¬Έμ₯μ΄ νλμ΄λ―λ‘ μ€κ΄νΈκΉμ§ μλ΅
λλ€μ μμλ₯Ό λͺ κ° λ μ΄ν΄λ³΄λ©΄μ κ°μ μ‘μλ΄ μλ€.
// 1
int max(int a, int b){
return a > b ? a : b;
}
// 1μ λλ€μ
(a, b) -> { a > b ? a : b }
// 2
int printVar(String name, int i){
System.out.println(name + "=" + i);
}
// 2μ λλ€μ
(String name, int i) -> { System.out.println(name + "=" + i); }
(name, i) -> { System.out.println(name + "=" + i); }
(name, i) -> System.out.println(name + "=" + i)
// 3
int square(int x){
return x * x;
}
// 3μ λλ€μ
(int x) -> { return x * x; };
(x) -> { x * x }
x -> x * x
// 4
int roll(){
return (int) (Math.random()*6);
}
// 4μ λλ€μ
() -> { return (int)(Math.random() * 6);}
() -> (int)(Math.random() * 6)
μλ°μμ λͺ¨λ λ©μλλ μ΄λ ν ν΄λμ€ λ΄μ ν¬ν¨λμ΄ μμ΅λλ€.
public class MethodClass {
// methodλ methodClassμ ν¬ν¨λμ΄ μμ
int method(int a, int b) {
return a > b ? a : b;
}
}
public class ArrayFillExample {
public static void main(String[] args) {
MethodClass methodClass = new MethodClass();
int c = methodClass.method(1,2);
}
}
κ·Έλ λ€λ©΄ λλ€μμ μ΄λ€ ν΄λμ€μ ν¬ν¨λ κΉμ?
μλ₯Ό λ€μ΄ λ³΄κ² μ΅λλ€.
public class ArrayFillExample {
public static void main(String[] args) {
// λ©μλ νν
Object obj = new Object(){
int max(int a, int b) {
return a > b ? a : b;
}
};
// λλ€μ(μ΅λͺ
κ°μ²΄) νν
Object obj = (a, b) -> a > b ? a : b;
int value = obj.max(3, 5); // μ΅λͺ
κ°μ²΄μ νμ
μ΄ Objectμ΄κΈ° λλ¬Έμ μ¬μ© λΆκ°.
}
}
// (a, b) -> a > b? a : b λ λλ€μ(μ΅λͺ
κ°μ²΄), κ·Έλ λ€λ©΄ μ΅λͺ
κ°μ²΄μ νμ
μ 무μ?
νμ
obj = (a, b) -> a > b ? a : b
λλ€μ(μ΅λͺ κ°μ²΄)λ₯Ό λ€λ£¨κΈ° μν μ°Έμ‘°λ³μκ° νμνλ° μ°Έμ‘°λ³μμ νμ μ μ΄λ»κ² μ§μ ν΄μΌ ν κΉμ?
μ΄ λ ν¨μν μΈν°νμ΄μ€λ₯Ό μ¬μ©ν©λλ€.
μ¬κΈ°μ ν λ² λκ³ λ€μ ν¬μ€ν μΌλ‘ μ΄μ΄κ°κ² μ΅λλ€.
'π Backend > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] κΈ°λ³Έμ μΈ λ¬Έλ²λ€ - μλ£ν, μμ, 리ν°λ΄μ λν΄ (0) | 2023.09.20 |
---|---|
[Java] Java μΈμ΄μ νΉμ§, μ₯μ μ λν΄ (0) | 2023.09.20 |
[Java] λλ€μ - 2. ν¨μν μΈν°νμ΄μ€μ λν΄ (0) | 2023.08.13 |
[Java] Generic Type classμ λν΄ (3) | 2023.06.11 |
[JAVA] μμΈ(Exception)μ²λ¦¬μ λν΄ (0) | 2023.04.06 |
λΈλ‘κ·Έμ μ 보
Study Repository
rlaehddnd0422