시냅스

Java 함수형 프로그래밍 본문

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
      • 함수의 실행으로 함수 외부 상태가 변경되는 것
      • 함수외부 변수의 값이 변경됨
      • 예외나 오류로 인하여 프로그램이 중단됨

 

예시

 

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에는 오직 하나의 함수만 존재해야한다.

 

Comments