Java Lambda Expression

둥냥둥냥둥·2023년 6월 21일
0

Lambda Expression 이란?

람다식(Lambda Expression)이란 함수를 하나의 식(expression)으로 표현한 것이다. 함수를 람다식으로 표현하면 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수(Anonymous Function)의 한 종류라고 볼 수 있다.

현재 사용되고 있는 람다의 근간은 수학과 기초 컴퓨터과학 분야에서의 람다 대수이다. 람다 대수는 간단히 말하자면 수학에서 사용하는 함수를 보다 단순하게 표현하는 방법입니다.

// 기존의 방식
반환티입 메소드명 (매개변수, ...) {
	실행문
}

// 예시
public String hello() {
    return "Hello World!";
}
-------------------------------
//람다 방식
(매개변수, ... ) -> { 실행문 ... }

// 예시
() -> "Hello World!";
-------------------------------

Lambda Expression 특징

  • 람다식 내에서 사용되는 지역변수는 final이 붙지 않아도 상수로 간주된다
  • 람다식으로 선언된 변수명은 다른 변수명과 중복될 수 없다

Lambda Expression 쓰는 이유

  • 람다식을 쓰지 않을 때보다 코드가 간결해진다
  • 필터링 및 매핑시 집계결과를 쉽게 가져올 수 있다

람다의 장단점

장점

  • 코드의 간결성 : 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있습니다.
  • 지연연산 수행 : 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화 할 수 있습니다.
  • 병렬처리 가능 : 멀티쓰레디를 활용하여 병렬처리를 사용 할 수 있습니다.

단점

  • 디버깅이 어렵다
  • 람다식의 호출이 까다롭습니다
  • 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어집니다.
  • 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있습니다.

람다식 구조

  • 파라미터 리스트

    • 파라미터 타입 생략 가능
    • 파라미터가 하나일때 () 생략 가능
  • 화살표

  • 람다 바디

    • 실행 내용이 단일 실행(한 줄)일때 {} 생략 가능. {}이 생략되면 return 키워드와 ;(세미콜론)도 같이 생략해야 한다.

람다 예제

- 불리언 표현식
 (List<String> list) -> list.isEmpty()

- 객체 생성
  () -> new Apple(10)

- 객체에서 소비
  (Apple a) -> {
          System.out.println(a.getWeight());
  }

- 객체에서 선택/추출
  (String s) -> s.length()

- 두 값을 조합
  (int a, int b) -> a * b

- 두 객체 비교
  (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())

람다의 표현식

  • 람다는 매개변수 화살표(->) 함수몸체로 이용하여 사용 할 수 있습니다
  • 함수몸체가 단일 실행문이면 괄호{}를 생략 할 수 있습니다
  • 함수몸체가 return문으로만 구성되어 있는 경우 괄호{}를 생략 할 수 없습니다
//정상적인 유형
() -> {}
() -> 1
() -> { return 1; }

(int x) -> x+1
(x) -> x+1
x -> x+1
(int x) -> { return x+1; }
x -> { return x+1; }

(int x, int y) -> x+y
(x, y) -> x+y
(x, y) -> { return x+y; }

(String lam) -> lam.length()
lam -> lam.length()
(Thread lamT) -> { lamT.start(); }
lamT -> { lamT.start(); }


//잘못된 유형 선언된 type과 선언되지 않은 type을 같이 사용 할 수 없다.
(x, int y) -> x+y
(x, final y) -> x+y

추가 학습 참고 및 출처

https://dev-kani.tistory.com/38
https://hbase.tistory.com/78
http://www.tcpschool.com/java/java_lambda_concept
https://mangkyu.tistory.com/113
profile
Java 먹자

0개의 댓글