함수형 프로그래밍의 특징
1. 순수함수
- 동일한 입력에 항상 동일한 값을 반환 (딱 수학에서의 함수 느낌)
- 프로그램의 상태 및 실행과 서로 영향을 끼치지 않아야 함
2. 비상태, 불변성
3. 선언형 함수
- '무엇'을 하는지에 초점 (명령형 함수는 '어떻게' 하는지)
- if, for, switch 등 -> map, foreach, filter 등
4. 1급 객체와 고차함수
- 1급 객체: 함수를 객체로서 취급할 수 있는 느낌
- 고차함수: 함수를 인자나 반환값으로 사용하는 함수
생각
- DAO 같은 트랜잭션 코드가 보일러 코드가 될 때가 많아서 1급 객체와 고차함수는 필요성을 많이 느꼈음.
Spring 없이 순수 JPA로 트랜잭션 코드를 짰을 때는 공통적인 코드를 제외하고 트랜잭션 시작과 끝 사이의 작업만 작성하기 위해, 함수형 프로그래밍을 알아보고 함수형 인터페이스를 만들어서 해결한 기억이 남. (소스)
- 최근에 자바에서 stream을 자주 사용하고 있는데 각 요소에 '무슨' 작업을 하는지 눈에 잘 들어온다고 느낌.
하지만 복잡한 로직에서는 오히려 구조를 따라가기 힘들었는데 지금 생각하니 로직을 변수로(1급 객체) 뽑아내었으면 어떨까 떠오름.
- 순수함수에 대해서는 함수를 사용할 때 반환값에만 집중할 수 있어 좋은 듯함.
여기서 상태는 객체보다는 전역변수와 같은 시스템의 상태 같은데, 자바를 하는 입장에서 크게 와닿지는 않았음.
- 불변성의 필요성에 대해서 아직 경험해 보지 못해서 의아했는데 순수함수와 비슷한 이유인 듯함.
상태의 변경을 추적하기 쉽게 한다는 점에서 OOP와 신조가 유사하다고 생각.
참고한 글