Language/JAVA

[java] λžŒλ‹€μ™€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€

Alchemists 2022. 8. 6. 03:45
728x90

 

🌈 λžŒλ‹€?

 

λžŒλ‹€λŠ” 읡λͺ…κ°μ²΄λ‘œ, λ©”μ„œλ“œλ₯Ό κ°„λ‹¨ν•œ μ‹μœΌλ‘œ ν‘œν˜„ν•˜λŠ” 방법이닀. 읡λͺ…μ΄λΌλŠ” 것은 이름이 μ—†λŠ”κ²ƒμ„ μ˜λ―Έν•œλ‹€!

 

이걸 

(a,b) -> a>b ? a:b 

μ΄λ ‡κ²Œ κ°„λ‹¨ν•˜κ²Œ λ°”κΏ”μ£ΌλŠ” 것이 λžŒλ‹€μ΄λ‹€. λ§€κ°œλ³€μˆ˜ νƒ€μž…κ³Ό 리턴 ν‚€μ›Œλ“œλ₯Ό λͺ¨λ‘ μ‚­μ œν•  수 μžˆλ‹€.

 

보톡은 읡λͺ… ν•¨μˆ˜λΌκ³  ν•˜λŠ”λ° μžλ°”λŠ” λ©”μ„œλ“œ 밖에 없기에 λ©”μ„œλ“œλ‘œ ν†΅μΌν•΄μ„œ μƒκ°ν•˜λ € ν•œλ‹€.

(ν•¨μˆ˜: ν΄λž˜μŠ€μ— 독립적, λ©”μ„œλ“œλŠ” ν΄λž˜μŠ€μ— 쒅속적)

 

λžŒλ‹€λ₯Ό μ“°λŠ” 것은 μ½”λ“œλ₯Ό κ°„κ²°ν•˜κ²Œ ν•΄μ£ΌλŠ” 것도 μžˆμ§€λ§Œ 개인적인 κ²½ν—˜ 상 ν•¨μˆ˜μ•ˆμ— ν•¨μˆ˜λ₯Ό 인자둜 넣을 λ•Œ 맀우

μœ μš©ν•œ 것 κ°™λ‹€! 

 

 

🚨 λžŒλ‹€μ‹μ„ 닀루기 μœ„ν•΄μ„œλŠ” μ°Έμ‘°λ³€μˆ˜ νƒ€μž…μ„ μ–΄λ–»κ²Œ μ •ν• κΉŒ?

 

λžŒλ‹€μ‹μ€ κ°μ²΄μ΄λ‹ˆκΉŒ μ°Έμ‘°λ³€μˆ˜κ°€ ν•„μš”ν•˜κ³ , μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ΄ ν•„μš”ν• κ±°λ‹€.

 

++) μ™œ λžŒλ‹€λŠ” 읡λͺ…κ°μ²΄μΌκΉŒ?

κ²°κ΅­ μžλ°”λŠ” ν•¨μˆ˜ μžμ²΄κ°€ ν΄λž˜μŠ€μ— 쒅속적인 λ©”μ„œλ“œμ΄κΈ°μ— λžŒλ‹€μ‹μ΄ 읡λͺ…객체가 될 수 밖에 μ—†λ‹€. λ©”μ„œλ“œ ν•˜λ‚˜λ§Œ μ‘΄μž¬ν•  수 μ—†λ‹€! 

 

++) λžŒλ‹€μ—μ„œ μ°Έμ‘°λ³€μˆ˜κ°€ ν•„μš”ν•œ 이유?

μœ„μ™€ 같은 λ‚΄μš©μΈλ° κ²°κ΅­ λžŒλ‹€κ°€ 객체이고, 객체λ₯Ό 닀루렀면 μ°Έμ‘°λ³€μˆ˜κ°€ ν•„μš”ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

이걸 λžŒλ‹€λ‘œ λ°”κΎΈλ©΄

 

νƒ€μž… obj =(a,b) -> a>b?a:b ; 이 될건데 이 objλΌλŠ” μ°Έμ‘°λ³€μˆ˜μ˜ νƒ€μž…μ€ 뭘까? 

int value=obj.max(3,5); λ₯Ό ν•˜κ²Œ 되면 Object ν΄λž˜μŠ€μ— max λ©”μ„œλ“œκ°€ 없기에 μ—λŸ¬κ°€ λœ°κ±°λ‹€.

 

 

 

πŸ‹ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€

 

 

 

λžŒλ‹€μ‹μ„ 닀루기 μœ„ν•œ μ°Έμ‘°λ³€μˆ˜ νƒ€μž…μ€ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λ‘œ ν•œλ‹€. (λžŒλ‹€μ—μ„œ λ°˜ν™˜ν˜• νƒ€μž…μ„ μ§€μ •ν•΄μ€˜μ•Ό ν•˜λŠ” 경우)

 

Myfunction2λ₯Ό νƒ€μž…μœΌλ‘œ λ°›λŠ” μ°Έμ‘°λ³€μˆ˜ f에 maxν•¨μˆ˜λ₯Ό μ˜€λ²„λΌμ΄λ”© ν•΄μ€€λ‹€. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
 
class Main {
    @FunctionalInterface
    interface MyFunction2{
        int max(int a,int b);
    }
 
    public static void main(String args[]) throws NumberFormatException, IOException {
 
    MyFunction2 f=new MyFunction2() {
        @Override
        public int max(int a, int b) {
            return a>b?a:b;
        }
    };
 
    int val=f.max(1,2);
    System.out.println(val);
 
 
 
 
 
 
    }
 
}
 
cs

 

이걸 λžŒλ‹€λ‘œ 고치면 μ•„λž˜μ™€ κ°™λ‹€. 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
 
class Main {
    @FunctionalInterface
    interface MyFunction2{
        int max(int a,int b);
    }
 
    public static void main(String args[]) throws NumberFormatException, IOException {
 
    MyFunction2 f=(a,b)->a>b?a:b;
 
    int val=f.max(1,2);
    System.out.println(val);
 
 
 
 
 
 
    }
 
}
 
 
cs

 

μ΄λ ‡κ²Œ λžŒλ‹€λ‘œ μ“°λ©΄ λžŒλ‹€λŠ” ν•¨μˆ˜ 이름을 μ“°μ§€ μ•ŠλŠ” 읡λͺ…κ°μ²΄λ‹ˆκΉŒ λ©”μ„œλ“œκ°€ μ—¬λŸ¬κ°œλ©΄ μ–˜κ°€ max ν•¨μˆ˜μΈκ±Έ μ–΄λ–»κ²Œ μ•Œμ•„μš”?? 라고 ν•  수 μžˆμ§€λ§Œ ν•¨μˆ˜ν˜• μΈν„°νŽ˜μ΄μŠ€λŠ” 단 ν•˜λ‚˜μ˜ μΆ”μƒλ©”μ„œλ“œλ§Œ κ°–κΈ° λ•Œλ¬Έμ— 그런 걱정은 ν•  ν•„μš”κ°€ μ—†λ‹€. 

 

 

REF

https://www.youtube.com/watch?v=3wnmgM4qK30&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=158 

 

https://www.youtube.com/watch?v=0Sp9eFRV8gE&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=159 

 

728x90