우당탕탕

[Java] 람다 표현식, 람다(Lambda Expression)이란? 본문

언어/Java

[Java] 람다 표현식, 람다(Lambda Expression)이란?

모찌모찝 2022. 9. 12. 11:03
람다식이란?

나는 처음 시작한 프로젝트가 금융권 프로젝트라 자바 7 버전으로 처음 프로젝트를 시작했었다.
이후 현재는 자바 11을 사용하는 프로젝트를 진행하면서 자바 8 이후 도입된 stream과 람다를 사용하다 보니 편해서 작성하게 되었다.

람다란?

Java8 버전 이후에 추가된 기능으로 따지면 메서드를 하나의 식으로 표현한 것이다.
아래 예시 코드를 살펴보자

int num = 10;
Runnable runnable = new Runnable() {
    @Override
    public void run() {
        System.out.println("number: " + num);
    }
};
runnable.run();

보통 람다 설명에서 자주 사용하는 Runnable 코드이다.
이를 람다로 사용하면 아래와 같이 적을 수 있다.

int num = 10;
Runnable runnable = () -> System.out.println("number: " + num);
runnable.run();

Runnable runnable = (매개변수) -> 실행문 형식인 것이다.
() 안에는 함수의 매개변수가 들어가게 되며, 한 개의 매개 변수일 경우 생략이 가능하다. 또한 실행문의 경우 {} 안에 작성하며 되며 이 또한 한 줄일 경우 생략 가능하다. 

해당 코드를 보면 num 변수가 있는 것을 확인할 수 있다.
자바 8에서는 final이 붙지 않은 변수가 사용되고 값이 변경되지 않으면 해당 변수는 Effectively final이라고 부른다.
위의 코드에서 num 변수의 경우 객체가 소멸될 때까지 값이 변경되지 않기 때문에 Effectively final이다.
만약 해당 num 변수를 람다식 안이나 밖에서 값을 아래와 같이 변경하게 된다면 컴파일 에러가 발생한다.
( 람다식의 경우 변수는 final 변수를 사용하거나 Effectively final이어야만 사용 가능하다. ) 

int num = 10;
Runnable runnable = () -> {
	num ++;
    System.out.println("number: " + num);
};
num ++;
runnable.run();

나중 포스팅에서 적을 자바 8의 Function 인터페이스를 사용한 람다식을 마지막 예제로 작성하고 글을 마친다.

public static void main(String args[]) {
	Function <Integer, Integer> example = x -> x+x;
    log.info(example.apply(10));
}

// 출력 : 20

 

Comments