본문 바로가기

프로그래밍/Java

Java_람다식(Lambda Expression)

반응형

람다식 (Lamda Expression)

- 함수형 프로그래밍 방식
: 자바 8부터 함수형 프로그래밍 방식을 지원하고 이를 람다식이라고 한다.

() -> {System.out.println("람다식");};
(x) -> {System.out.println(x + "<<<");};
x -> {}; - 매개변수가 하나면 ()를 생략할 수 있다.
x -> System.out.println(); - 구현부가 한 줄이라면 {}를 생략할 수 있다.

 → ()안에는 매개변수, {} 안에는 실행할 코드를 적어주면 된다.


람다식을 사용하기 위해 반드시 선행되어야 할 부분은 인터페이스가 만들어져 있어야 한다.

 

람다식 예제

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package ch01;
 
public class MainTest {
 
    // main 함수
    public static void main(String[] args) {
 
        // int add(int x, int y);
        
        // 1. 인터페이스가 있고
        // 2. 어떻게 구현될지 식을 재정의 한다. (람다식으로)
        IAdd iAdd = (x, y) -> {return x + y;};
        
        System.out.println(iAdd.cal(1010));
        System.out.println("--------------");
        
        //람다식 정의
        IPrint iPrint = (str, token) -> { System.out.println( str + ":" + token);};
        //람다식 활용
        iPrint.myPrint("람""다");
        System.out.println("--------------");
        
        IPrint2 iPrint2 = () -> {return "람다"; };
        String tmp = iPrint2.print();
        System.out.println(tmp);
        
        // 람다식을 만들기 위해서 선행 조건 및 실행 순서
        // 1. 인터페이스가 있어야 한다.
        // 2. 인터페이스 안에는 반드시 하나의 추상 메서드만 존재해야 한다.
        // 3. 1, 2 조건을 만족한다면 우리가 필요한 식을 정의할 수 있다.
        // 4. 3번에서 람다식을 정의하였다면 식을 정의할 때 사용한 인터페이스 타입을
        //    이용하고 그 안에 추상 메서드 이름을 사용해서 호출해 사용할 수 있다.
        
//        new Thread(()->{}).start();
    } // end of main
 
// end of class
 
// 람다 표현식 만들기 인터페이스 먼저 정의되어야 한다. !!!!!!!!!
// 주의점 2, 함수형 인터페이스라고 한다. (단, 인터페이스 안에 추상메서드는 반드시 한개이어야 한다.)
// !!! 단 하나의 추상메서드 !!! 
 
@FunctionalInterface 
interface IAdd {
    int cal(int x, int y);
}
 
interface IPrint{
    void myPrint(String str, String token);
}
 
interface IPrint2{
    String print();
}
 
결과 화면
20
람:다
람다
cs

→ 람다 표현식을 만들기 위해서는 반드시 인터페이스가 있어야 한다.
단, 인터페이스 안에 추상메서드는 반드시 하나여야 한다. (@FunctionalInterface)
 
→ 매개변수가 있는 추상메서드인 경우 람다식 구현부에 return을 해주어야 한다.

 

람다식 쓰레드 예제

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package ch02;
 
public class MainTest2 {
 
    // main 함수
    public static void main(String[] args) {
 
        //쓰레드 익명 함수 
        new Thread(new Runnable() {
 
            @Override
            public void run() {
                for (int i = 0; i < 100; i++) {
                    System.out.println("i : " + i);
 
                    try {
                        Thread.sleep(500);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        }).start();
 
        System.out.println("----------------------------");
 
        //쓰레드 람다 표현식
        new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                System.out.println("i : " + i);
 
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();
 
    } // end of main
 
}
결과 화면
----------------------------
i : 0
i : 0
i : 1
i : 1
i : 2
i : 2
i : 3
i : 3
i : 4
i : 4
i : 5
i : 5
....
cs

→ 쓰레드를 사용하면 람다식을 사용하면 더 간결하게 표현할 수 있다.

반응형