함수형 인터페이스(Functional Interface)

Walker·2021년 12월 21일
0

Java

목록 보기
2/5

함수형 인터페이스내부에 추상 메소드를 하나만 가지는 인터페이스를 의미하며
2개 이상이 되면 @FunctionalInterface 어노테이션에 의하여 컴파일 에러가 발생한다.
(static 메소드나 default 메소드는 추가로 가져도 상관없음)

기존의 함수형 인터페이스 사용법은 위와 같은 형태로 오버라이드하여 사용하는 형태였다.

자바 8에서부터는 람다식을 활용하여 메소드가 하나일 경우 위와 같이 줄여 쓰는 것이 가능하다.

수학적인 함수에서 가장 중요한 것은 입력받은 값이 동일한 경우 결과 값이 동일해야 한다는 것이다.

위와 같이 메소드 밖에 있는 값을 상태값으로 가지게 되면 순수한 함수라고 보지 않으며
이러한 내부의 상태값을 변경하는 경우(++)는 입력값과 결과값이 일정하지 않게 된다.
(함수의 파라미터나 내부값을 변경하지 않고 사용하는 것이 안전!)

이러한 함수형 인터페이스의 가장 기본적인 기능 중 하나는 Function<input, output>으로
apply 메소드를 오버라이드하여 사용 가능하다.

사실 위에 처럼 클래스를 만들어서 사용하는 것보다는
바로 위와 같이 사용하는 곳에서 구현하는 것이 더 의미있을 것 같다.

이러한 Function은 두개를 엮어 하나의 Function으로 만들수도 있는데
이때 사용하는 것이 compose()로 인자로 들어가는 Function(multifly2)을 먼저 실행하고
그 결과값을 받아서 나머지(plus10)가 사용한다.

andThen()은 비슷한데 인자가 나중에 실행되고 앞의 내용이 먼저 실행된다.
이와 같은 맥락으로 BiFunction(i1,i2,o) / Consumer(i) / Supplier(o)등이 있다.

Predicate는 문자열이나 숫자를 조건으로 판단하여 boolean 값으로 결과를 리턴한다.

이러한 조건들을 엮어서 and()나 or()로 판단하는 것도 가능하다.

profile
I walk slowly, but I never walk backward. -Abraham Lincoln-

0개의 댓글