본문

[2017.11.15] 27. 람다(Lambda) 개념과 사용 이유

도입

이번 포스팅에서는 람다의 개념과 특징에 대해 정리할 예정이다.


개념

(출처 https://en.wikipedia.org/wiki/Lambda_expression)

람다 표현식은 익명의 함수이다. 덧붙여 설명하면 익명이라는 것은 함수를 객체로 정의해 사용하는 것이 아니라, 매개 변수로 바로 구현해 사용한다. 예를 들어, Thread 안에 익명의 runnable를 선언해 사용 할 수 있다.

1
2
3
4
5
new Thread(new Runnable() {
    public void run() {
        // 처리해야할 로직                
    }
}).start();
cs


람다를 사용하는 이유

람다 표현식을 사용하는 이유는 코드를 간결하게 전달할 수 있기 때문이다.

람다가 기술적으로 자바 8 이전의 자바로 할 수 없었던 일을 제공하는 것은 아니다. 다만 동작 파라미터를 이용할 때 익명 클래스 등 판에 박힌 코드를 구현할 필요가 없다! 람다 표현식을 이용하면 2장에서 살펴본 동작 파라미터 형식의 코드를 더 쉽게 구현할 수 있다. 결과적으로 코드가 간결하고 유연해진다.

(출처 - 자바 8 인 액션 p84)

람다 사용 전

람다 사용 후

1
2
3
4
5
6
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o2.getTitle().compareTo(o1.getTitle());
    }
});
cs
1
Collections.sort(list, (o1, o2) -> o2.compareTo(o1);
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
class LambdaBasic {
    // 1.callback 클래스를 lambda로 변경하기
    // 함수명을 없애고 () {} 사이에 화살표를 넣는다.
    (int x) -> {
        System.out.println(x);
    }
        
    // 2. 파라미터가 하나이면 타입을 생략 가능 
    (x) -> {
        System.out.println(x);
    }
        
    // 3. 하나의 파라미터면 파라미터측의 괄호를 생략, 
    //      로직이 한줄이면 로직측의 괄호를 생략 가능
    x -> System.out.println(x);
        
    // 4. 파라미터가 없으면 괄호로 작성
    () -> {System.out.println(x);}
        
    // 5. 리턴값이 있을 경우
    () -> return "Hello";
        
    // 6. 참조형 (인자가 하나이고, 실행되는 메소드의 매개변수가 1개라면)
    // 파라미터의 개수가 예측가능할 경우 객체::메소드 형태로 호출 가능
    System.out::println
}
cs



#람다 #람다 사용 이유 #왜 람다 #lambda

공유

댓글