JAVA

[JAVA] 람다표현식

집한구석 2022. 1. 1. 11:15
728x90

람다표현식 (Lambda) 개념

  • 함수형 인터페이스를 구현한 클래스 즉, 익명 클래스의 메소드를 하나의 식으로 표현
  • 함수형 인터페이스의 메서드를 람다표현식으로 작성해서 다른 메서드의 파라미터로 전달할 수 있음
  • 매개변수, 화살표, 몸통 구조 
  • 함수형 인터페이스를 통해서만 사용이 가능함, 즉 람다 표현식 전체를 해당 함수형 인터페이스를 구현한 클래스의 인스턴스로 취급함

함수형 인터페이스

  • 인터페이스 내에 한개의 추상 메소드만 정의
  • 외부 메소드에서 호출 시 람다식이나 메소드 참조 가능
  • 자바에서 함수를 일급객체로 사용할 수 없는 단점 보완

Lambda 특징

장점 단점
코드가 축약이 됨 (익명함수로 된 코드 줄임) 남용시 이해하기 어려움
가독성 증가 까다로운 디버깅
병렬 프로그래밍   

Lambda 컴파일 처리

  • invokedynamic을 사용하여 Lambda 표현식 구현을 위한 코드 생성을 런타임 시까지 연기함
  • 런타임시에 어떤 방법으로 객체를 생성할지 결정하는데, 성능 향상을 위한 최적화된 방법을 사용

Lambda 예시

@FunctionalInterface
public interface Converter {

   int merge(int a, int b);
}

public class LambdaTest {
    public static void main(String[] args) {
        // 람다 파라미터 / 화살표 / 람다 몸체
        Converter converter = (a, b) -> a + b;
        int result = converter.merge(1, 2);
        System.out.println(result);
    }
}
  • 함수형 인터페이스 선언
  • 선언한 함수형 인터페이스 사용
new Thread(new Runnable() {
   @Override
   public void run() { 
      System.out.println("명령형"); 
   }
}).start();

new Thread(()->{
      System.out.println("람다표현식");
}).start();
  • 람다 표현식으로 코드를 더 간결하게 표현이 가능함

'JAVA' 카테고리의 다른 글

[JAVA] 비트연산자  (0) 2022.02.06
[JAVA] PriorityQueue  (0) 2022.02.06
[JAVA] 제네릭  (0) 2021.12.15
[JAVA] 리플렉션  (0) 2021.12.12
[JAVA] 데코레이터 패턴  (0) 2021.12.10