728x90
Lambda 표현식 같은 경우는 Java version 8 이상부터 사용이 가능합니다.
자바 람다 표현식 클래스는 인터페이스에 메서드가 '하나'만 있어야 사용 가능하다는 점 꼭 유의해야 합니다.
자바 패키지에서 제공하는 인터페이스 중 메서드가 하나인 인터페이스들의 종류들입니다.
- java.lang.Runnable
- java.util.Comparator
- java.io.FileFilter
- java.util.concurrent.Callabe
- java.security.PrivilegedAction
- java.nio.file.PathMatcher
- java.lang.reflect.InvoatoinHandler
예제
예를 들어서 보여 드리겠습니다.
하나의 메소드가 존재하는 인터페이스를 호출하면 인터페이스 내에 존재하는 메소드가 안에 선언이 됩니다.
//클래스 내에 인터페이스 생성
interface Calculate{
int operation(int a, int b);
}
//기존 인터페이스 호출하면 오버라이드 되는 operation 메소드
private void calcultedClassic() {
Calculate calAdd = new Calculate() {
@Override
public int operation(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
};
System.out.println(calAdd.operation(1, 2));
}
람다 표현식을 이용하면 인터페이스 내에 메서드를 작성할 필요 없이 사용 가능합니다.
//인터페이스
interface Calculate{
int operation(int a, int b);
}
//람다를 이용한 호출
private void calLambda() {
Calculate calAdd = (a, b) -> a + b;
System.out.println(calAdd.operation(1, 2));
}
@FunctionalInterface
람다 표현식을 이용한 인터페이스 내에 또 다른 메소드를 작성할 경우 람다가 표현된 메서드에서 오류가 뜨게 됩니다. 이럴 때에는 @FunctionalInterface 어노테이션은 인터페이스 위에 선언하게 된다면 인터페이스 내에 메서드를 두 개 이상 작성할 경우 인터페이스를 중심으로 오류 메시지를 출력해줘서 컴파일 오류를 사전에 방지할 수 있습니다.
@FunctionalInterface
interface Calculate{
int operation(int a, int b);
}
java.lang.Runnable
Runnable 인터페이스 또한 메서드가 하나이기 때문에 사용 가능합니다. Runnable 인터페이스 안에 run이라는 메서드를 출력해보겠습니다.
private void runn() {
Runnable runnable = new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(Thread.currentThread().getName());
}
};
new Thread(runnable).start();
}
람다 표현식을 이용할 수 있습니다.
private void runnLanbda() {
new Thread(() ->{System.out.println(Thread.currentThread().getName());}).start();
}
'JAVA_SPRING > JAVA' 카테고리의 다른 글
String 클래스에 대한 학습 테스트 (0) | 2022.02.05 |
---|---|
Set Collection에 대한 학습 테스트 (0) | 2022.02.05 |
자바 기본자료형(Primitive data type)을 왜 사용할까? (0) | 2022.01.29 |
OpenAPI 데이터를 자바를 이용해 데이터를 받기(POSTMAN을 이용해 공공데이터 오픈API에 데이터 요청, Java, OkHttp 이용) (0) | 2021.08.04 |
자바 스트림(Java stream) - foreach() 메소드를 이용 (0) | 2020.08.22 |