기존 하나의 메소드를 실행하기 위해 인자에 객체를 생성하고 내부적으로 메소드를 선언하던 복잡한 구조를, 임의의 1회용 객체를 생성하고 메소드 부분만 전달할 수 있는 간결한 구조로 변환한 구문을 일컫는다.
public class lambdaTest{
public static void main(String[] args){
new Thread(new Runnable(){
@Override
public void run(){
System.out.println("Running");
}
}).start(); //thread 동작 및 내부 스레드의 run 메소드 실행
}
}
위와 같이 기존 방법을 통해서 run 메소드를 실행하기 위해선, 내부적으로 객체를 전달하면서 run 메소드를 선언해야하는 번거로움이 있었다.
public class lambdaTest{
public static void main(String[] args){
new Thread(()->{
public void run(){
System.out.println("Running");
}
}).start();
}
}
**lambda 표현식을 이용하면(()->{}
), 별도의 객체를 생성해주지 않고도 바로 메소드인자를 전달하면서 해당 메소드를 실행시킬 수 있다.
람다식은 위와 같이 ()->{}의 형태를 지니고 있으며, 구체적인 구조는 아래와 같다.
public interface Compare{
public int CompareTo(int value1, int value2);
}
위와 같이 인터페이스가 정의되어있다고 가정하자.
이때 인터페이스의 메소드를 정의하고 main 클래스에서 해당 메소드를 사용하기 위해선 기존의 복잡한 정의과정이 필요할 것이다.
하지만 아래와 같이, 람다 표현식을 활용해서 매우 간단하게 표현할 수 있게 된다.
public class Test{
public class exec(Compare compare){
int k = 20;
int m = 10;
int value = compare.CompareTo(k, m);
}
public void main(String[] args){
exec( (i,j) ->{
return i-j
});
}
}