Overview Functional Interface

bbangho·2023년 3월 29일
0

functional Interface

자바가 8로 접어들면서 가장 큰 변화된 것은 함수형 개발 페러다임을 지원하기 시작한 것이라고 한다.


함수형 VS 객체지향

함수형 개발 방식과 객체지향 개발 방식을 비교할 때 가장 큰 차이점은 값을 취급하는 단위가 어디까지 인가로 알 수 있다. 객체지향은 값을 클래스 단위로 표현하였다면 함수형은 행위에 해당하는 부분을 값으로 지정할 수 있다는 점이 다르다. 함수를 재사용하기도 좋다.


행위에 해당하는 부분을 값으로 지정한다?

무슨 의미일까 코드를 보면서 이해해보자.

Functional Interface가 있다.

@FunctionalInterface
public interface Validator {
    public boolean test();
}
public class Main {
    public static void main(String[] args) {
        Random random = new Random();
        int a = random.nextInt(10);
        int b = random.nextInt(10);

        boolean check = is(() -> a > b );
        System.out.println("check = " + check);
    }
    public static boolean is(Validator validator){
        return validator.test();
    }
}

실행 결과를 보고 설명하겠다.

먼저 is() 가 실행이 된다. () -> a > b 라는 행위가 Validator 타입의 매개변수로 들어가게 되고 return Validator의 test()를 하게되면

a 랑 b 의 값에 따라서 check의 값이 나오게 된다.

행위를 값으로 받는다

그리고 is의 인자로 들어간 () -> a > b 부분을
() -> a < b , () -> a + b > 10 등등 으로 바꾸면 함수를 재사용 하기 좋다 라는말이 이해가 된다.


함수형 인터페이스란 단 1개의 추상 메소드를 가지는 인터페이스를 말한다.(Object의 메소드를 제외하고)

마무리

함수형 프로그래밍을 사용하게 되면 코드가 간결해지고, 가독성이 높아진다고 한다.
spring을 공부하면서 보았던 Optional 이라던지
다른 부분에서 많이 사용되어서 궁금했어서
이번에 정리를 조금씩 해보려고 한다.

참고 : https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.8

https://beomseok95.tistory.com/277

https://tecoble.techcourse.co.kr/post/2020-07-17-Functional-Interface/

나중에 볼것 : https://www.youtube.com/watch?v=i2U8kWQttJI 자바 8의 함수형 인터페이스

https://www.youtube.com/watch?v=gWIks_tLsFI 자바 8의 함수형 인터페이스

profile
2024. 06.17

0개의 댓글