-
함수형 인터페이스란?Java 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를 보자
'Java' 카테고리의 다른 글
[Java-4] JVM의 구조 (1) 2020.11.11 [Java-3] JVM과 JIT 컴파일러란? (2) 2020.11.10 [Java-2] 바이트 코드란 (1) 2020.11.09 [Java-1] 컴파일 방법 & 과정 (14) 2020.11.09 NullPointerException(NPE) 필요한 이유 (0) 2020.10.20