입력에서 결과로 이어지는 계산
도서 목록에서 조건에 맞는 책을 고르고 제목을 추출한 뒤 정렬하는 작업을 작은 변환들의 합성으로 표현할 수 있다. 각 변환이 무엇을 받아 무엇을 돌려주는지 명확하면 처리 흐름을 부분별로 이해하기 쉬워진다.
순수 함수와 부수 효과
순수 함수는 같은 입력에 같은 출력을 돌려주며 외부의 관찰 가능한 상태를 바꾸지 않는다. 파일 저장이나 화면 출력, 외부 상태 변경은 이런 계산과 구분하는 부수 효과에 해당한다.
실제 응용 프로그램에는 입출력이 필요하다. 함수형 설계는 이를 없애겠다는 뜻이라기보다 순수한 계산과 효과가 발생하는 경계를 관리하는 방법을 제공한다. 효과를 표현하는 방식은 언어와 라이브러리에 따라 다르다.
값을 바꾸지 않는 자료
불변 자료는 만들어진 값을 직접 변경하지 않고 새로운 결과를 만든다. 이전 상태를 추적하거나 공유 상태의 변경을 줄이는 데 도움이 된다. 구현은 구조의 일부를 공유해 매번 전체를 복사하는 비용을 줄일 수도 있다.
함수를 다루는 함수
함수를 인수로 받거나 결과로 돌려주는 함수를 고차 함수라고 한다. 공통적인 반복 구조를 재사용하고 구체적인 처리만 함수로 전달하는 방식에 활용된다.
함수를 사용한다는 사실만으로 프로그램 전체가 순수한 함수형 설계가 되는 것은 아니다. 여러 패러다임을 함께 지원하는 언어에서도 이런 기법을 선택적으로 사용할 수 있다.
관련 문서
함수 / 프로그래밍 언어 / 객체 지향 프로그래밍