요약하기:
함수형 인터페이스는 추상메서드를 1개만 가지고 있는 인터페이스이다.
자바8부터 익명 내부클래스는 람다식으로 축소시킬 수 있다.
함수형 프로그래밍을 하기 위해선 함수 밖의 값을 참조하거나 변경해서는 안되고, 함수가 전달받은 파라미터만 사용해야 한다.(순수함수, 불변성의 고려가 필요하다.)
함수형 인터페이스와 람다 표현식 소개
함수형 인터페이스 : 추상메서드가 1개만 있는 경우.
2개가 있으면 함수형 인터페이스가 아니다.
인터페이스임에도 자바 8부터는 static메서드와 default 메서드를 정의할 수 있다.
이 경우도 함수형 인터페이스임에는 변함이 없다!
중요한건 추상메서드의 개수가 몇개인가 이기 때문이다.
1개면 무조건 함수형 인터페이스.
자바 8에서는 @FunctionalInterface라는 어노테이션을 제공하는데,
추상메서드가 2개가 되면 자동으로 붉은줄이 표시된다.
더 견고하게 함수형 인터페이스를 관리할 수 있다는 장점이 있다.
자바8 이전에는 인터페이스를 구현하려면 익명 내부클래스를 이용해서 구현했다.
java8부터는 구현이 1줄일 경우 바로 람다식으로 변형 해줄 수 있고,
2줄 이상일 때도 변경해서 함수형 인터페이스를 사용시 lambda 식을 이용해서 코드를 줄여줄 수 있다.
(함수형 인터페이스는 어디서 사용되고 왜 사용될까?)
자바에서 함수형 프로그래밍
- 함수를 First class object로 사용할 수 있다.
- 순수 함수 (Pure function) : 입력값이 같으면 리턴값도 같아야 한다.
리턴값이 동일하게 11로 출력되는 것을 볼 수 있다.
만약 같은 값을 넣었는데 동일한 리턴값을 보장해주지 못한다면 함수형 프로그래밍이라 보기 어렵다.
RunSomething runSomething = new RunSomething() {
int baseNumber = 10;
@Override
public int doIt(int number) {
return number + baseNumber;
}
};
이 코드는 외부 변수에 의해서 리턴값이 보장이 안될 가능성을 가지고 있다.
순수함수로 보기 어렵다.
자바에서 함수형 프로그래밍을 사용하길 원한다면 위와같이 보장이 안되거나, 가능성이 있는 경우는 최대한 피하는 것이 좋다.순수함수인지, 불변성을 가지고 있는지 고려 필요.
- 고차 함수 (Higher-Order Function)
- 불변성
'스프링 스터디 (인프런) > 더 자바 8' 카테고리의 다른 글
인터페이스의 변화 - 인터페이스 기본 메소드와 스태틱 메소드 (0) | 2023.04.08 |
---|---|
함수형 인터페이스와 람다 - 메소드 레퍼런스 (0) | 2023.04.06 |
함수형 인터페이스와 람다 - 람다 표현 (0) | 2023.04.05 |
함수형 인터페이스와 람다 - 자바에서 제공하는 함수형 인터페이스 (0) | 2023.04.01 |
소개 - 자바 8 소개 (0) | 2022.11.15 |