: 람다식은 간결하고 효율적인 방법으로 익명 함수를 생성할 수 있게 해준다.
일반적으로, 람다식은 다음과 같은 형태를 가진다.
람다식 기본문법
(매개변수목록)->{실행문}
(parameters) -> { statements; }
parameters는 메소드의 매개변수를 나타내고, statements는 메소드의 바디를 나타낸다.
람다식은 인터페이스의 추상 메소드를 구현하기 위해 사용될 수 있다.
이때 인터페이스는 단 하나의 추상메소드를 가져야 한다. 이러한 인터페이스를 함수형 인터페이스(Functional Interface)라고 한다.
Compare 인터페이스 정의
Compare 인터페이스: 2개의 값을 비교하여 어떤 값이 더 큰지 구하는 compareTo()메소드를 가지고 있다.
// 2개의 값을 받아들인 후, 정수를 반환하는 메소드를 선언
public interface Compare{
public int compareTo(int value1, int value2);
}
Compare 인터페이스를 이용하는 클래스
public class CompareExam{
// Compare 인터페이스를 받아들인 후, 해당 인터페이스를 이용하는 exec 메소드
public static void exec(Compare compare){
int k = 10;
int m = 20;
int value = compare.compareTo(k, m);
System.out.println(value);
}
public static void main(String[] args){
exec((i, j)->{
return i - j;
});
}
}
Runnable을 이용하여 Thread를 만드는 방법
Thread를 만들 때, 사용하는 Runnable 인터페이스의 경우 run() 메소드를 하나만 가지고 있다.
Thread가 실행되면 Thread 안에 넣은 run()메소드가 실행된다.
자바는 메소드만 매개변수로 전달할 방법이 없다. 인스턴스만 전달할 수 있다.
그렇기 때문에 run()메소드를 가지고 있는 Runnable 객체를 만들어서 전달한다.
public class LambdaExam1{
public static void main(String[] args){
new Thread(new Runnable(){
public void run(){
for(int i=0; i<10; i++){
System.out.println("hello");
}
}}).start();
}
}
람다식을 이용해서 수정한 코드
public class LambdaExam1{
public static void main(String[] args){
new Thread(()->{
for(int i=0; i<10; i++){
System.out.println("hello");
}
}).start();
}
}
메소드만 전달할 수 있다면, 좀더 편리하게 프로그래밍할 수 있다. 자바는 메소드만 전달할 수 있는 방법이 없었기 때문에 매번 객체를 생성해서 매개변수로 전달해야 했다. 이런 부분을 해결한 것이 람다 표현식이다.