[람다식] Java 함수형 인터페이스 @FunctionalInterface
- 프로그래밍 언어/Java
- 2019. 10. 26. 20:59
함수적 인터페이스 (@FunctionalInterface)
- 모든 인터페이스는 람다식의 타겟타입으로 사용할 수 없다. (= 모든 인터페이스가 람다식으로 대입될 수 없다.)
- 람다식은 하나의 메소드를 구현하는 것이기 때문에 인터페이스에는 구현될 단 하나의 추상메소드만 존재해야한다.
- 그러기 위해서 사용하는 방식이 함수적 인터페이스. 인터페이스에 단 하나의 추상메소드만 있어야한다.
- @FunctionalInterface 어노테이션은 컴파일러가 어노테이션이 있는 인터페이스의 추상메소드 개수를 세어 2개 이상인 경우 컴파일 오류를 낸다.
- 그러나 어노테이션이 없다고 함수적 인터페이스가 아니라고는 하지 않는다. 단지 개발자의 실수를 방지하기 위한 체킹용 어노테이션이다.
매개변수와 리턴값이 없는 람다식
@FunctionalInterface
public interface MyFunctionalInterface {
public void method();
}
public static void main(String[] args) {
MyFunctionalInterface fi;
fi = () -> {
String str = "method call1";
System.out.println(str);
};
fi.method();
fi = () -> {System.out.println("method call2");};
fi.method();
fi = () -> System.out.println("method call3");
fi.method();
}
매개변수가 있는 람다식
@FunctionalInterface
public interface MyFunctionalInterface {
public void method(int x);
}
public static void main(String[] args) {
MyFunctionalInterface fi;
fi = (x) -> {
int result = x * 5;
System.out.println(result);
};
fi.method(2);
fi = (x) -> {System.out.println(x * 5);};
fi.method(2);
fi = x -> System.out.println(x * 5);
fi.method(2);
}
리턴값이 있는 람다식
@FunctionalInterface
public interface MyFunctionalInterface {
public int method(int x, int y);
}
public class TestExample {
public static void main(String[] args) {
MyFunctionalInterface fi;
fi = (x, y) -> {
int result = x + y;
return result;
};
System.out.println(fi.method(2,5));
fi = (x, y) -> { return x + y;};
System.out.println(fi.method(2,5));
fi = (x, y) -> x + y;
System.out.println(fi.method(2,5));
fi = (x, y) -> sum(x, y);
System.out.println(fi.method(2,5));
}
public static int sum(int x, int y){
return x + y;
}
}
- 리턴값이 있는 람다식의 경우는 하나의 문장으로 메소드가 사용될 경우 ( 위의 경우 sum 메소드가 사용됨. ) 그냥 평범하게 괄호 지우고 return 지우고 메소드명만 쓰면 된다.
- 리턴값이 있는 경우는 method가 값을 반환하므로 어딘가 담거나 바로 쓰여져야함.
'프로그래밍 언어 > Java' 카테고리의 다른 글
왜 String은 자바에서 불변(Immutable)인가? (0) | 2019.12.10 |
---|---|
[람다식] Java 람다식 멤버변수, 로컬변수 사용하기(this 사용) (0) | 2019.10.27 |
[Stream] 수집, collect() 메소드, Collectors (0) | 2019.10.11 |
[Stream] 집계, Optional 클래스, 커스텀 집계(reduce) (0) | 2019.09.19 |
[Java 알고리즘] x만큼 간격이 있는 n개의 숫자, 프로그래머스 level1 (0) | 2019.09.18 |