Java

함수형 인터페이스란?

lee-maru 2020. 10. 27. 21:33

함수형 인터페이스

 

우리가 잘 사용하고 있지만, 잘 모르고 사용했던, 함수형 인터페이스 (Functional Interface)는

인터페이스 내에 추상 메서드가 딱 하나 만 있으면 Functional Interface라고 한다.

 

함수형 인터페이스 예제

//1번
public interface Functional {
    void doIt();
}

//2번
public interface Functional {
    abstract void doIt();
}

//3번
@FunctionalInterface
public interface Functional {
    abstract void doIt();

    static void printName(){
        System.out.println("java");
    }

    default void printHello(){
        System.out.println("hello");
    }
}

@FunctionalInterface를 추가하면, 추상 메서드가 2개이거나, 함수형 인터페이스 선언이 잘못되었을 때 컴파일러에서 알아서 걸러주기 때문에, 좀더 체계적인 코드 작성이 가능하다. 

 

함수형 인터페이스를 사용하고 싶다면

자바 8 이전이후로 나누게 되는데

//Before JAVA 8 익명 내부클래스 사용 inner anonymous class 
public class Main {
    public static void main(String[] args) {
            Functional functional = new Functional() {
                @Override
                public void doIt() {
                    System.out.println(" JAVA 8 이전의 방식 ");
                }
            };
    }
}

//After JAVA8 람다 사용 Lambda Expression
public class Main {
    public static void main(String[] args) {
            
            Functional functional1 = () -> System.out.println("JAVA 8 이후의 방식");
    
    }
}

 

이렇게 람다 식을 사용해서 좀 더 깔끔하고 가독성 좋게 사용이 가능해진다. 

 

코틀린 처럼 함수를 정의한 것처럼 보이지만, 자바 내에서는 특수한 형태의 Object 이다. 함수형 인터페이스를 inline 으로 구성한 것이다. 

 

>다음은 자바에서 함수형 인터페이스를 어떻게 지원하는지 기본 API를 보자