Functional Interface
어떤 인터페이스안에 추상 메소드가 딱 하나만 있을 때, 함수형 인터페이스라고 한다.
추상 메소드가 두개 이상일 때에는 함수형 인터페이스가 아니다. 다른 형태의 메소드는 상관하지 않는다!
@FunctionalInterface //자바에서 제공하는 어노테이션
public interface FuncIfTest {
void doIt(); //추상 메소드 1개
static void printName() { //추상 메소드 x
System.out.println("cy");
}
default void printBirthday() { //추상 메소드 x
System.out.println("0210");
}
}
인터페이스에서는 abstract를 생략할 수 있으며, 이 인터페이스의 구현체를 만들 때 이 함수를 구현해야 한다.
자바8 부터 인터페이스에 static이나 public 키워드도 생략할 수 있다.
public Class Test {
public static void main(String[] args){
//익명 내부 클래스 anonymous inner class
FuncIfTest fi = new FuncIfTest() {
@Override
public void doIt() {
System.out.println("hello");
}
};
}
}
인터페이스를 사용하려면 그 인터페이스의 구현체를 만들어야하는데, 보통 우리는 익명 내부 클래스를 사용한다.
public Class Test {
public static void main(String[] args){
//람다식 rambda
FuncIfTest fi = () -> System.out.println("hello");
}
}
하지만 만약 그 인터페이스가 함수형 인터페이스라면 람다식을 활용하여 간단하게 구현할 수 있다.
함수형 인터페이스를 인라인으로 구현한 이 특수한 형태의 오브젝트를 변수에 할당하거나, 파라미터로 전달하거나 혹은 이 자체를 리턴할 수 도 있다. 즉, 함수를 First class object로 사용할 수 있다는 뜻이다.
따라서 함수형 인터페이스는 자바에서 함수형 프로그래밍 패러다임을 적용할 수 있게 했다고 볼 수 있다.
자바에서 함수형 프로그래밍의 특징
1. 함수를 First class object로 사용할 수 있다.
2. 순수 함수 : 함수 밖에 있는 값을 변경하거나 사용하지 않는다.
3. 고차 함수 : 함수가 함수를 매개변수로 받을 수 있고, 함수를 리턴할 수 있다.
4. 불변성
더 공부해보자
- 일급 객체 (first class object)
- 함수형 프로그래밍
이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.
더 자바, Java 8 강의 | 백기선 - 인프런
백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합
www.inflearn.com
'Java' 카테고리의 다른 글
[Java8] 람다 표현식 (lambda) (0) | 2024.07.14 |
---|---|
[Java8] 자바에서 제공하는 함수형 인터페이스 (1) | 2024.07.14 |
[Java8] Java8 소개 (0) | 2024.07.13 |
[Java] Reflection (0) | 2024.07.08 |
[Java] 파라미터를 전달하는 방법 (원시 타입 vs 참조 타입) (0) | 2024.03.19 |