Rambda

람다함수란?

람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 지칭하는 용어

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

람다의 특징

람다 대수는 이름을 가질 필요가 없다. - 익명 함수 (Anonymous functions)

두 개 이상의 입력이 있는 함수는 최종적으로 1개의 입력만 받는 람다 대수로 단순화 될 수 있다. - 커링 (Curring)

익명함수?

익명함수란 말그대로 함수의 이름이 없는 함수. 익명함수들은 공통으로 일급객체(First Class citizen)라는 특징이 있다.

이 일급 객체란 일반적으로 다를 객체들에 적용 가능한 연산을 모두 지원하는 개체. 함수를 값으로 사용 할 수도 있으며 파라메터로 전달 및 변수에 대입 하기와 같은 연산들이 가능하다.

람다의 장단점

장점

  1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현

  2. 지연연산 수행 - 람다는 지연연상을 수행 함으로써 불필요한 연산을 최소화

  3. 병렬처리 가능 - 멀티쓰레디를 활용하여 병렬처리를 사용 가능

단점

  1. 람다식의 호출이 까다롭다

  2. 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어진다.

  3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수도 있다.

람다의 표현식

  1. (매개변수) -> {함수몸체}

  2. () -> {함수몸체)

  3. (매개변수) -> 함수몸체 : 단일 실행문일시 {} 생략 가능

  4. (매개변수) -> {return 0;} : return이 있을 시에는 {} 생략 불가!

람다식 예제

기존 자바 문법

new Thread(new Runnable() {
   @Override
   public void run() { 
      System.out.println("Welcome Heejin blog"); 
   }
}).start();

람다식 문법

new Thread(()->{
      System.out.println("Welcome Heejin blog");
}).start();

함수형 인터페이스

@FunctionalInterface

Functional Interface는 일반적으로 ‘구현해야 할 추상 메소드가 하나만 정의된 인터페이스’를 말한다.

자바 컴파일러는 이렇게 명시된 함수형 인터페이스에 두 개 이상의 메소드가 선언되면 오류가 발생

//구현해야 할 메소드가 한개이므로 Functional Interface이다.
@FunctionalInterface
public interface Math {
    public int Calc(int first, int second);
}

//구현해야 할 메소드가 두개이므로 Functional Interface가 아니다. (오류 사항)
@FunctionalInterface
public interface Math {
    public int Calc(int first, int second);
    public int Calc2(int first, int second);
}

함수형 인터페이스 람다식 구현

위의 함수형 인터페이스를 람다식으로 구현해 사용하는 예제

public static void main(String[] args){

    //위에 함수형 Interface Math를 구현했다.
   Math plusLambda = (first, second) -> first + second;
   System.out.println(plusLambda.Calc(4, 2));
   //결과 6

   Math minusLambda = (first, second) -> first - second;
   System.out.println(minusLambda.Calc(4, 2));
   //결과 2

}

reference

[https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95]