함수형 프로그래밍

gh1224·2022년 11월 11일

함수형 프로그래밍의 특징

1. 순수함수

  • 동일한 입력에 항상 동일한 값을 반환 (딱 수학에서의 함수 느낌)
  • 프로그램의 상태 및 실행과 서로 영향을 끼치지 않아야 함

2. 비상태, 불변성

  • 데이터의 불변성을 유지하기 위해 복사본 사용

3. 선언형 함수

  • '무엇'을 하는지에 초점 (명령형 함수는 '어떻게' 하는지)
  • if, for, switch 등 -> map, foreach, filter 등

4. 1급 객체와 고차함수

  • 1급 객체: 함수를 객체로서 취급할 수 있는 느낌
  • 고차함수: 함수를 인자나 반환값으로 사용하는 함수

생각

  • DAO 같은 트랜잭션 코드가 보일러 코드가 될 때가 많아서 1급 객체와 고차함수는 필요성을 많이 느꼈음.
    Spring 없이 순수 JPA로 트랜잭션 코드를 짰을 때는 공통적인 코드를 제외하고 트랜잭션 시작과 끝 사이의 작업만 작성하기 위해, 함수형 프로그래밍을 알아보고 함수형 인터페이스를 만들어서 해결한 기억이 남. (소스)
  • 최근에 자바에서 stream을 자주 사용하고 있는데 각 요소에 '무슨' 작업을 하는지 눈에 잘 들어온다고 느낌.
    하지만 복잡한 로직에서는 오히려 구조를 따라가기 힘들었는데 지금 생각하니 로직을 변수로(1급 객체) 뽑아내었으면 어떨까 떠오름.
  • 순수함수에 대해서는 함수를 사용할 때 반환값에만 집중할 수 있어 좋은 듯함.
    여기서 상태는 객체보다는 전역변수와 같은 시스템의 상태 같은데, 자바를 하는 입장에서 크게 와닿지는 않았음.
  • 불변성의 필요성에 대해서 아직 경험해 보지 못해서 의아했는데 순수함수와 비슷한 이유인 듯함.
    상태의 변경을 추적하기 쉽게 한다는 점에서 OOP와 신조가 유사하다고 생각.

참고한 글

0개의 댓글