Java

[Java8] 함수형 인터페이스

나프초 2024. 7. 13. 22:41

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. 불변성


더 공부해보자

  1. 일급 객체 (first class object)
  2. 함수형 프로그래밍

이 포스팅은 더 자바, Java 8 강의를 수강하며 작성되었습니다.

 

더 자바, Java 8 강의 | 백기선 - 인프런

백기선 | 자바 8에 추가된 기능들은 자바가 제공하는 API는 물론이고 스프링 같은 제 3의 라이브러리 및 프레임워크에서도 널리 사용되고 있습니다. 이 시대의 자바 개발자라면 반드시 알아야 합

www.inflearn.com