함수형 프로그래밍은 세가지 도전을 효과적으로 처리할 수 있는 기법을 제공하면서 주목받고 있다.

  1. 동시성에 대한 필요가 널리 퍼졌고, 그에 따라 애플리케이션을 수평적으로 쉽게 확장하고 서비스에 지장이 있는 경우에 대한 회복성을 향상시킬수 있어야 한다. 따라서 동시성프로그래밍은 이제 모든 개발자가 통달해야할 필수 기술이 되었다.
  2. 데이터 중심의 애플리케이션을 작성할 필요가 많아졌다. 거대한 데이터 집합을 효율적으로 다룰 수 있는 기법의 중요성이 부각되고 있다.
  3. 버그가 없는 애플리케이션이 필요하다.

불변성을 사용한 코드를 작성하는 것은 튼튼한 동시성 프로그램을 작성하기 위한 필수적인 도구며, 불변성을 활용한 코드를 작성하는 가장 좋은 방법은 FP를 사용하는 것이다. 불변성, 그리고 더 일반적으론느 함수형 사고방식의 엄격함은 수학에 뿌리를 두고 있고 프로그램 오류를 더 적게 만들어낸다.

스칼라는 혼합 패러다임 언어이기 때문에 함수형 프로그래밍의 규칙을 따르도록 요구하지는 않는다. 하지만 가능하면 그런 규칙을 따를 것을 권고한다.

6.1 함수형 프로그래밍이란 무엇인가?

함수형 프로그래밍은 함수와 값의 동작에 대한 수학적 규칙에 기반한다.

6.1.1 수학함수

함수 내부에서 다른 전역상태를 일체 변경하지 않는 함수를 부수효과가 없다고 하거나 순수하다고 말한다

순수성은 함수를 분석, 테스트, 디버깅하는 과정을 극적으로 단순화시켜준다. 함수를 호출하는 주위 환경을 고려하지 않고 그 모든 것을 수행할 수 있다.

주변환경과 관계 없이 명확하다는 특성은 참조 투명성을 낳는다.

  1. 함수를 아무데서나 호출할 수 있고 호출한 주변환경과 독립적으로 함수가 항상 같은 방식으로 동작하리라 자신할 수 있다. 전역 범위를 변경하는 일이 없기 때문에 그런 함수를 동시 호출하는 것도 단순하며 항상 신뢰할 수 있다. 따로 복잡하게 스레드 안전성을 위한 코드를 작성할 필요가 전혀 없다.
  2. 어떤 식이 두번 이상 반복될때 맨 처음 계산해서 얻은 결과값을 가지고 두번째 이후의 식을 안전하게 치환할 수 있다느 ㄴ것이다.

함수혀 ㅇ프로그래밍에서는 다른 일반적인 데이터 값과 마찬가지로 함수도 1급 계층값이다. 함수를 다른 함수로부터 합성할 수 있다. 함수를 변수에 대입할 수도 있다. 함수를 다른 함수에 인자로 넘길수도 있고 어떤 함수가 다른 함수를 값으로 반환할수도 있다.

함수가 다른 함수를 인자로 받거나 함수를 반환할때 이를 고차함수라고 부른다. 수학에서 고차 함수의 예로 미분과 적분을 들 수 있다.

대표적으로 map이 고차함수이다. 하나의 함수를 인자로 받아서 컬렉션의 모든 원소에 적용한 새 컬렉션을 반환한다.

6.1.2 값이 바뀌지 않는 변수

변수라는 말은 함수형 프로그래밍에서는 새로운 의미를 갖는다. 우선 변수의 값이 변하지 않는다.