λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Java

[JAVA] Lambda

by λŒ€λ³΅2 2024. 7. 24.

 

 

Lambda(λžŒλ‹€)κ°€ λ­μ˜ˆμš”

λžŒλ‹€λŠ” μ •μ˜ν•˜μžλ©΄ ν•¨μˆ˜ν˜• ν”„λ‘œκ·Έλž˜λ°μ˜ ν˜•νƒœλ‘œ μž¬μ‚¬μš© κ°€λŠ₯ν•œ μ½”λ“œ 블둝이닀.

이전에 μ •μ˜ν–ˆλ˜ 읡λͺ… ν•¨μˆ˜λ₯Ό μ§€μΉ­ν•˜λŠ” μš©μ–΄μ΄κΈ°λ„ ν•˜λ©΄μ„œ λŒ€μΆ© 클래슀λ₯Ό μ„ μ–Έν•΄μ„œ λ©”μ„œλ“œλ₯Ό λ§Œλ“€κ³ ... 이게 λ„ˆλ¬΄ λΉ„νš¨μœ¨μ μ΄λΌκ³  μ—¬κ²¨μ„œ λ‚˜μ˜€κ²Œ 된 κ±° + μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν•˜κΈ° μœ„ν•¨μ˜ 이유둜 λ‚˜μ˜¨ ν•¨μˆ˜μ΄λ‹€.

 

 

λžŒλ‹€ μ™œ 쓰냐

μ½”λ“œκ°€ κ°„κ²°ν•΄μ§„λ‹€. 

public class LambdaTest {
    public static void main(String[] args) {
        MyInterface m1 = new MyInterface() { //1.읡λͺ…을 μ΄μš©ν•œ MyInterface κ΅¬ν˜„λΆ€
            @Override
            public int max(int a, int b){
                return a > b ? a : b;
            }
        };
        System.out.println(m1.max(5,10));

        MyInterface m2 = (a,b) -> { return a > b ? a : b;}; // 2.λžŒλ‹€λ₯Ό μ΄μš©ν•œ κ΅¬ν˜„λΆ€
        System.out.println(m2.max(5,10));

    }
}

@FunctionalInterface // ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€
interface MyInterface{
    public int max(int a, int b);
}

 

 

λžŒλ‹€μ˜ 쑰건

- μΈν„°νŽ˜μ΄μŠ€ + 좔상 λ©”μ„œλ“œκ°€ ν•˜λ‚˜λ§Œ μžˆμ„ λ•Œ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.(= ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μ—λ§Œ μ‚¬μš© κ°€λŠ₯)

ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€μΈμ§€ ν™•μΈν•˜λŠ” 방법: @FunctionalInterface μ–΄λ…Έν…Œμ΄μ…˜μ„ 이용

- λžŒλ‹€μ‹μ€ λ©”μ„œλ“œλͺ…, λ³€μˆ˜ 정보λ₯Ό κ°„λž΅ν™”ν•΄μ„œ ν‘œμ‹œν•œλ‹€.

- λ‹Ήμ—°νžˆ λ©”μ„œλ“œκ°€ λ§Žλ‹€λ©΄ μ–΄λ–€ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν• μ§€ λͺ¨λ₯΄λ‹ˆκΉŒ λžŒλ‹€μ‹μ΄ μ•ˆλœλ‹€.

 

 

 

 

λžŒλ‹€μ˜ νŠΉμ§•

- κ²°κ΅­ λ©”μ„œλ“œμ΄κΈ° λ•Œλ¬Έμ— μ™ΈλΆ€μ˜ 멀버 λ³€μˆ˜ 접근에 별닀λ₯Έ μ œμ•½μ΄ μ—†λ‹€. (κ·Έ μ•ˆμͺ½μ— κ΅¬ν˜„λ˜μ—ˆκΈ° λ•Œλ¬Έμ΄λ‹€.)

- 같은 이유둜 μ™ΈλΆ€ 둜컬 λ³€μˆ˜μ˜ 값을 λ°”κΏ€ 수 μ—†λ‹€.(μ°Έμ‘°ν˜•μ΄ λ§€κ°œλ³€μˆ˜λ©΄ μ£Όμ†Œκ°’μ΄κΈ°μ— κ°€λŠ₯)

- μ •ν™•νžˆ λ§ν•˜μžλ©΄ heap에 μžˆλŠ” λ³€μˆ˜λŠ” 쑰회, 변경이 λ‘˜ λ‹€ κ°€λŠ₯ν•˜λ‹€.

- stack에 μžˆλŠ” λ³€μˆ˜λŠ” read only이닀.

- μ—­μ‹œλ‚˜ μ™ΈλΆ€ λ©”μ„œλ“œμ—λ„ 영ν–₯을 λͺ» μ€€λ‹€.

- λ§€κ°œλ³€μˆ˜κ°€ ν•œ 개면 κ΄„ν˜Έλ₯Ό μƒλž΅ν•΄λ„ λœλ‹€.

- λžŒλ‹€μ‹ 자체λ₯Ό λ§€κ°œλ³€μˆ˜λ‚˜ λ°˜ν™˜ κ°’μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

- λžŒλ‹€ μ‹€ν–‰λ¬Έ λ‚΄λΆ€μ—μ„œ λ‹€λ₯Έ ν•¨μˆ˜ ν•˜λ‚˜λ§Œ μ“°λŠ” 경우 + λ§€κ°œλ³€μˆ˜λ₯Ό λ‹€ μ“΄λ‹€λ©΄

 

이런 μ‹μ˜ 좕약도 κ°€λŠ₯ν•˜λ‹€.

 

'Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[JAVA] Exception  (0) 2024.07.28
[JAVA] Stream API  (0) 2024.07.25
[JAVA] Comparable? Comparator?  (3) 2024.07.23
[JAVA] Generic  (3) 2024.07.22
[JAVA] 좔상  (1) 2024.07.20