Lambda [Java]

SnowCat·2023년 6월 8일
0

Java - Language

목록 보기
16/17
post-thumbnail

람다 표현식

  • 람다 표현식은 메소드를 하나의 식으로 표현한 것을 의미함
(x, y) -> x < y ? x : y;
  • 람다 표현식을 사용하면 클래스, 객체 생성 없이 메소드를 사용할 수 있음
  • 자바에서 람다 표현식은 익명 클래스와도 같다고 할 수 있음
  • 람다식은 메서드의 매개변수로 전달될 수도 있으며, 메소드의 결과값으로 반환될 수도 있음
  • 람다 표현식 사용을 통해 기존의 불필요한 코드를 줄이고, 작성된 코드의 가독성을 높일 수 있음
new Thread(new Runnable() {
    public void run() {
        System.out.println("make thread");
    }
}).start();

new Thread(()->{
    System.out.println("make thread");
}).start();

함수형 인터페이스

  • 람다 표현식을 사용할 때는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야 함
  • 이 때 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입을 함수형 인터페이스라 부름
  • 함수형 인터페이스는 추상 클래스와 달리 단 하나의 추상 메서드만을 가져야 함
  • 또한 @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));
    }
}

메서드 참조

  • 메서드 참조는 람다 표현식이 단 하나의 메서드만을 호출하는 경우에 람다식에서 불필요한 매개변수를 제거하고 사용할 수 있도록 해줌
MyClass obj = new MyClass;
Function<String, Boolean> func = (a) -> obj.equals(a); // 람다식
Function<String, Boolean> func = obj::equals(a);       // 메소드 참조

생성자 참조

  • 생성자를 호출하는 람다식도 메소드 참조를 이용해 생정자 참조로 변환할 수 있음
Function<Integer, double[]> func1 = a -> new double[a]; // 람다식
Function<Integer, double[]> func2 = double[]::new;      // 생성자 참조

출처:
http://www.tcpschool.com/java/java_lambda_concept

profile
냐아아아아아아아아앙

0개의 댓글