[Java] 람다(Lambda)

Updated:

람다 대수 : 함수를 단순하게 표현하는 방법

람다(Lambda) 란?


  • 람다 대수는 이름을 가질 필요 없다 : 익명 함수
  • 커링 (Curring) : 입력값이 둘 이상인 함수는 최종적으로 1개 입력만 받는 람다 대수로 단순화 가능
  • 일급객체(First Class citizen) : 다른 객체에 적용 가능한 연산을 모두 지원하는 객체. 함수를 값으로 사용하기도 하며 파라미터로 전달, 변수 대입 등 연산 가능

장단점


  설명
장점 함수를 좀 더 간단하게 표현
  반복문 삭제 가능
  멀티쓰레드 활용하여 병렬 처리 가능
  지연연상을 수행하여 불필요한 연산 수행 가능
단점 호출이 까다로움
  stream 사용 시 단순 for, 단순 while문의 경우 성능이 떨어짐
  불필요하게 사용하면 가독성이 떨어짐

표현식


  • (매개변수목록) -> { 함수몸체 }
  • 매개변수의 타입을 추론할 수 있는 경우에는 타입을 생략 가능
  • 매개변수가 하나인 경우에는 괄호(())를 생략 가능
  • 함수의 몸체가 하나의 명령문만으로 이루어진 경우에는 중괄호({})를 생략가능 (이때 세미콜론(;)은 붙이지 않음)
  • 함수의 몸체가 하나의 return 문으로만 이루어진 경우에는 중괄호({})를 생략할 수 없음
  • 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();
    

함수형 인터페이스(functional interface)

  • 람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야만 한다
  • 함수형 인터페이스 : 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입
  • 함수형 인터페이스는 추상 클래스와는 달리 단 하나의 추상 메소드만을 가진다
  • 참조변수의타입 참조변수의이름 = 람다 표현식
  • @FunctionalInterface : 해당 어노테이션을 인터페이스의 선언 앞에 붙이면, 컴파일러는 해당 인터페이스를 함수형 인터페이스로 인식

      @FunctionalInterface
      interface Calc { // 함수형 인터페이스의 선언
          public int min(int x, int y);
    
      }
    
      public class Lambda02 {
      public static void main(String[] args){
              Calc minNum = (x, y) -> x < y ? x : y; // 추상 메소드의 구현
              System.out.println(minNum.min(3, 4));  // 함수형 인터페이스의 사
          }
      }
      //결과 : 3
    

참고


Tags:

Categories:

Updated:

Leave a comment