티스토리 뷰

Java

[Java] 람다(lambda)함수란?

joeylee 2020. 11. 23. 00:42

람다란?

메서드로 전달할 수 있는 익명함수를 단순화 한 것입니다.

함수형 프로그래밍(Functional Language)에서 온 개념으로 매개변수(parameter)를 가진 코드 블록이지만, 런타임 시에는 익명 구현 객체(추상메소드를 한개 포함한)를 생성합니다.

아래와 같이 자바8 이전에는 메서드를 값으로 쓸 수 없어 매개변수로 넘기지 못했습니다.

그래서 익명구현객체를 인스턴스화 시켜서 넘겨주었습니다.

new Thread(new Runnable()
{
    public void run()
    {
        System.out.println("자바 8이전의 스레드 생성");
    }
}).start();

이런 부분을 해결하기 위해서 자바 8에서 람다를 사용해 메서드를 값으로 넘길 수 있었습니다.(익명구현객체를 자동으로 만들어줌)

new Thread(()->{
    System.out.println("람다 표현식을 사용한 스레드 생성");
}).start();

람다의 기본 문법은 이렇습니다

// 인자 -> 바디
(int a, int b) -> { return a + b; }

// 인자 타입 생략 - 컴파일러가 추론
(a, b) -> { return a + b; }

// return 및 중괄호 생략
(a, b) -> a + b

// 인자가 하나인 경우 인자 괄호 생략
a-> a * 2

// 인자가 없으면 빈 괄호로 표시
() -> System.out.println("hi joeylee")

// 메소드 참조 Method reference
// (value -> System.out.println(value)) 의 축약형
System.out::println

@FunctionalInterface 어노테이션을 붙이면 익명 클래스용 인터페이스를 생성할 수 있습니다. (단 하나의 추상 메소드만을 가진 인터페이스)

@FunctionalInterface
interface Calculation {
  Integer apply(Integer x, Integer y);
}

Calculation addition = (x, y) -> x + y;
Calculation subtraction = (x, y) -> x - y;

사용이유

  • 람다식은 결국 로컬 익명 구현객체를 생성하게 되지만, 이 람다식의 사용 목적은 인터페이스가 가지고 있는 메소드를 간편하게 즉흥적으로 구현해서 사용하는 것이 목적입니다.
  • 코드를 간결하게 만들고 가독성이 향상됩니다.

'Java' 카테고리의 다른 글

[Java] JVM 구조  (0) 2020.11.27
[Java] Object 도서 정리(2)  (0) 2020.11.23
[Java] Object 도서 정리(1)  (0) 2020.11.23
[Java] 리액티브(reactive) 프로그래밍이란?  (0) 2020.11.23
[Java] 제이미터(jmeter)란?  (0) 2020.11.23
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Today
Yesterday
링크
«   2024/05   »
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
글 보관함