Java, Spring
Java 함수형 프로그래밍
ted k
2023. 2. 6. 20:51
함수형 프로그래밍
- 순수함수(pure function)를 조합하고 공유 상태(shared state), 변경 가능한 데이터(mutable data) 및 부작용 (side-effects)를 피하는 기본 원칙에 따라 소프트웨어를 구성하는 프로그래밍 패러다임
- 절차보다 기능에 초점을 맞춘다.
1급 객체 (first object)
- 변수나 데이터 구조 안에 넣을 수 있다.
- 파라미터로 전달할 수 있다.
- 동적으로 프로퍼티 할당이 가능
- 리턴값으로 사용할 수 있다.
- 자바의 경우 함수형 인터페이스를 통해 구현이 가능
순수 함수 (pure function)
- 순수 함수란 같은 입력에 대해 항상 같은 출력을 반환하는 함수
- 멀티스레드에서도 안전하고 병렬처리 및 계산도 가능하다.
- 동일한 입력에 대해 항상 같은 값을 반환한다.
- 부수효과 side effect 가 없는 결과를 생성하고 함수에서 인자를 변경하거나 프로그램의 상태를 변경하지 않는다.
- side effect
- 함수의 실행으로 함수 외부 상태가 변경되는 것
- 함수외부 변수의 값이 변경됨
- 예외나 오류로 인하여 프로그램이 중단됨
- side effect
예시
public class Functional {
@FunctionalInterface
interface Calc {
int add();
}
public static void main(String[] args) {
int result = run(() -> 3 + 4);
System.out.println(result);
}
public static int run(Calc c) { // 실행을 위임한다.
return c.add();
}
}
- 참고, FunctionalInterface
- FunctionalInterface는 함수를 일급객체로 사용할 수 있게 만들어 준다.
- 즉, (a, b) → a + b 를 파라미터로 받았고 행위도 값으로 취급하였다.
- 또한 함수 재사용에 용이하다
- FunctionalInterface에는 오직 하나의 함수만 존재해야한다.