JAVA - 람다식

Seongjin Jo·2023년 1월 2일
0

JAVA

목록 보기
4/5

✔ 람다 함수


람다 함수 특징

람다 함수란?

  • JAVA 8에서 눈에 띄는 가장 큰 변화는 람다식의 도입이다. 람다는 람다 대수에서 유래한다.람다 대수에서 람다식은 수학의 함수를 단순하게 표현하는 방법이다. 즉 , 익명 함수를 지칭하는 용어. 함수를 보다 단순하게 표현하는 방법.

람다 기본 형태 : A a = (매개값) -> { 구현코드 };
수학의 함수 : f(x,y) = x+y;
람다식 : (x,y) -> x+y

장점 :

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

단점

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

람다 함수의 표현식

  1. 람다는 매개변수 화살표(->) 함수몸체{}로 이용하여 사용 할 수 있다.
  2. 함수몸체가 단일 실행문이면 괄호{}를 생략 할 수 있다.
  3. 함수몸체가 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; }

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

함수형 인터페이스 @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);
}

( 예제 )

기본 자바 문법

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
interface Math {
    public int Calc(int first, int second);
}
public static void main(String[] args){

   Math plusLambda = (first, second) -> first + second;
   System.out.println(plusLambda.Calc(4, 2));

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

}

0개의 댓글