람다식은 코드의 간결성과 속도를 높여주는데 뛰어난 성능을 보여주며, 코드의 가독성 또한 증가시킨다.
람다식의 전제조건은 정의된 추상메서드가 1개여야만 한다는 것이다. 이것을 함수적 인터페이스라고 한다.
@FunctionalInterface
public interface MyInterface2 {
int method(int a);
default void print() {
System.out.println("Hello");
}
}
@FunctionalInterface 에노테이션이 붙어있는데, 없어도 무방하다. 이 에노테이션의 의미는 컴파일러에게 함수적인터페이스라고 전달하는 것이며 만약 함수적 인터페이스가 아닐경우( 즉 추상메서드가 1개가 아닐경우) 컴파일러는 컴파일 오류를 발생시키는 것으로 기억하고 있다.
public class Main {
public static void main(String[] args) {
MyInterface mif1 = new MyInterface() {
@Override
public void method(int a, int b) {
}
};
// 람다를 이용한 익명 구현 객체
MyInterface mif = (a,b) -> {
};
MyInterface2 mif3 = new MyInterface2() {
@Override
public int method(int a) {
// TODO Auto-generated method stub
return 0;
}
};
// 람다를 이용한 익명 구현 객체
MyInterface2 mif4 = (a) -> {
return 0;
};
// 1줄일 경우 리턴 문 생략
MyInterface2 mif5 = (a) -> 0;
MyInterface2 mif6 = (a) -> a*2;
mif6.print();
System.out.println(mif6.method(99));
}
}
람다는 () ->{}; 로 종결이 되는데. 만약 Statement가 1줄이라면 {}을 생략할 수 있다. 또한 리턴이 명확할 경우 return문 또한 생략이 가능하다.
() 사이에는 추상메서드의 매개변수가 오게 되니, 파악하고 맞는 파라미터 이름을 아무거나 지정해주면 {}안에서 자유롭게 사용이 가능하다.
'JAVA-Basic' 카테고리의 다른 글
9.hashcode & equals (0) | 2020.07.10 |
---|---|
8.Exception 예외와 처리 (0) | 2020.07.10 |
7.익명클래스(AnonymousClass) (0) | 2020.07.10 |
6.Interface와 다형성의 구현과정 (0) | 2020.07.10 |
5.추상클래스와 상속관계의 Promotion & Casting (0) | 2020.07.10 |