스칼라로 배우는 함수형 프로그래밍을 읽고 정리한 글입니다.
FP(Functional Programming)의 기본 전제는 프로그램 코드를 오직 순수 함수(pure function)으로만 구성한다는 것이다.
여기서 순수 함수는 부수 효과(side effect)를 발생시키지 않는 함수를 의미하는데, 부수 효과가 있는 함수란 단지 결과를 돌려주는 것 이외의 어떤 일을 수행하는 함수를 의미한다.
저자가 얘기하는 부수 효과, 즉 "그냥 결과를 돌려주는 것 이외의 어떤 일"의 예는 아래와 같다.
그렇다면 부수 효과 없이 프로그래밍을 한다는 것은 결국 위에 얘기한 항목들을 전혀 수행하지 못한다는 것일까?
변수에 값을 다시 대입할 수 없다면 변하는 자료는 어떻게 다루어야 하며, 예외를 던지지 않고서 오류를 어떻게 처리해야 할까?
또한, 부수 효과를 없애기 위해 입출력을 배제해야 한다면, 실제로 입출력 수행이 필요한 프로그램을 개발하지 못한다는 것일까?
이에 대해 저자의 답은 FP는 "프로그램을 작성하는 방식에 대한 제약일 뿐, 표현 가능한 프로그램의 종류에 대한 제약이 아니다" 라고 얘기한다.
(이 책에서는 입출력 수행하는 프로그램, 오류 처리 프로그램, 자료 수정 프로그램을 부수 효과 없이 작성하는 방법을 소개하고 있다.)
결국 순수 함수들로 프로그램을 작성하면 모듈성이 증가하며 그에 따라 테스트가 결국 쉬워지게 된다.
또한, 순수 함수들은 어떤 입력에 대한 결과를 돌려줄 뿐, 위에서 얘기한 항목들과 같은 부수 효과들을 배제하기 때문에 더욱 버그가 생길 가능성이 낮다.