728x90
람다식은 다른 말로 익명 메소드라고도 한다.
인터페이스 중에서 메소드를 하나만 가지고 있는 인터페이스를 함수형 인터페이스라고 한다.
Thread를 만들때 사용하는 Runnable 인터페이스의 경우 run() 메소드를 하나만 가지고 있다.
public class LambdaExam1 {
// Thread가 실행될 때 Thread 생성자 안에 넣은 run 메소드가 실행되도록 해라
// 매개변수로 메소드를 전달할 수 없음(인스턴스만 가능)
// -> run이라는 메소드를 가지고 있는 Runnable 객체를 만들어 전달한 것임
public static void main(String[] args) {
// Runnable을 이용하여 Thread를 만듬
// 이 자체가 Thread가 생성되는 구문이므로 .start() 사용
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();
}
}
람다식 문법
(매개변수 목록) -> {실행문}
// 2개의 값을 비교하여 어떤 값이 더 큰지 구하는 compareTo()라는 메소드를 가지고 있는 인터페이스
public interface Compare{
public int compareTo(int value1, int value2);
}
public class CompareExam {
// Compara 인터페이스를 받아들인 후 해당 인터페이스를 이용하는 exec 메소드
public static void exec(Compara compara){
int k = 10;
int m = 20;
int value = compara.compareTo(k, m);
System.out.println(value);
}
public static void main(String[] args) {
// i-j>0일시 i가 더 큼
exec((i, j)->{
return i - j;
});
}
}
728x90
'강의 정리하기 > JAVA' 카테고리의 다른 글
데몬 Thread (1) | 2023.03.11 |
---|---|
Thread와 상태 제어 (0) | 2023.03.11 |
Thread와 공유 객체 (0) | 2023.03.10 |
Thread (0) | 2023.03.10 |
어노테이션 (0) | 2023.03.10 |