뭐든 즐기면서 ;)

JAVA 람다식 / 람다식 본문

BACK/JAVA

JAVA 람다식 / 람다식

Tada.*+ 2021. 11. 12. 22:40
728x90

※ 람다식 : 람다식 표현을 사용하여 함수를 작성할 경우, 메소드의 이름이 필요 없기 때문에, 람다식은 익명 함수의 한 종류라고 볼 수 있습니다.

- 익명함수란 : 일회성 함수이다.

자세히 설명하자면, 보통 JAVA에서 메소드를 사용하기 위해서는 클래스를 만들어 메소드를 작성하고, 객체를 생성하여 메소드를 호출합니다. 이때 해당 메소드가 일회성으로 한 번 만 사용하기 위한 메소드라고 가정해 봅니다. 단 한 번을 사용하기 위해 클래스 작성 및 객체 생성, 그리고 메소드 호출의 번거로운 단계를 거쳐야 합니다. 이 번거로운 과정을 생략하기 위해 사용하는 것이 람다식(익명함수)입니다.

람다식 자체만으로 메소드 역할을 수행할 수 있습니다.

 

- 장점

  1. 코드의 간결성(가독성) 
  2. 지연연산 수행
  3. 병렬처리 가능

 

- 단점
  1. 재사용이 불가능합니다.
  2. 디버깅이 어렵습니다.
  3. 람다식을 무작위로 사용하게 되면, 비슷한 함수가 중복 생성되어 오히려 가독성이 떨어질 수 있습니다.
  4. 재귀로 만들 경우에 사용하는 것은 부적합합니다.

 

1. 람다식 문법

() -> {}
() -> 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

 

2. 람다식 특징

  • 1급 객체이다.
    • 변수나 데이터 구조 안에 담을 수 있습니다.
    • 반환값으로 전달할 수 있습니다.
    • 할당에 사용된 이름과 무관하게 고유한 구별이 가능합니다.
    • Stream API의 매개변수로 전달이 가능합니다.
  • 람다식은 순수 함수 <-> 일반 함수
    • (객체지향 언어인 JAVA에서는 이를 구분하기 위해 함수형 인터페이스를 탄생시켰다.)
  • 함수형 인터페이스를 반환합니다.
  • 함수를 변수처럼 선언합니다.
// 기존 익명함수
public class Lambda {
    public static void main(String[] args) {
        System.out.println(
            new MyLambdaFunction() {
                public int max(int a, int b) {
                    return a > b ? a : b;
                }
            }.max(3, 5)
        ); // end of System.out
    } // end of main function
}
// 함수형 인터페이스 작성
@FunctionalInterface
interface LambdaInterface {
    int max(int a, int b);
}

// 람다식을 사용하여 함수형 인터페이스를 반환 받아 선언한 변수에 대입.
public class Lambda {

    public static void main(String[] args) { 
        LambdaInterface lambda = (int a, int b) -> a > b ? a : b; // 람다식을 이용한 익명함수
        System.out.println( lambda.max(3, 5) );
    }

}

 

* 참고 : JAVA에서 기본 적으로 제공하는 함수형 인터페이스 4가지 : https://tadaiswhatever.tistory.com/23

* 1급 객체에 대해서는 추가로 다루도록 하겠습니다.

728x90

'BACK > JAVA' 카테고리의 다른 글

JAVA 함수형 인터페이스란  (0) 2021.11.15
JAVA 개념 / JAVA 이론 / JAVA 기본개념  (0) 2021.11.14
JAVA 함수형 인터페이스 API  (0) 2021.11.11
JAVA CMD / javac  (0) 2021.11.02
JAVA Multi Thread환경 동시성 제어  (0) 2021.10.22
Comments