함수형 프로그래밍이란 무엇인가?
함수형 프로그래밍이란 무엇인가?
함수형 프로그래밍(Functional Programming, FP)이라는 말을 들으면 막연하게 "함수를 많이 쓰는 프로그래밍?" 정도로 생각하기 쉬워요. 맞는 방향이긴 한데, 그걸 정확하게 설명하려면 조금 더 들어가 봐야 해요. 위키백과의 정의부터 출발해서, 스칼라에서 함수형 코드가 왜 이렇게 쓰이는지 하나씩 풀어 볼게요.
출처: Scala 3 Book
본문
위키백과는 함수형 프로그래밍을 이렇게 정의해요.
함수형 프로그래밍은 함수를 적용하고 합성(compose)해서 프로그램을 구성하는 프로그래밍 패러다임이다. 프로그램의 상태를 바꾸는 명령형 문장(statement)의 나열이 아니라, 각각 값을 반환하는 표현식(expression)의 트리로 함수 정의가 이루어지는 선언형(declarative) 프로그래밍 패러다임이다.
함수형 프로그래밍에서는 함수를 일급 시민(first-class citizen)으로 취급해요. 즉 함수를 이름(로컬 식별자 포함)에 바인딩하고, 인자로 전달하고, 다른 함수에서 반환할 수 있죠. 다른 어떤 데이터 타입과 똑같이 다룰 수 있다는 뜻이에요. 이 덕분에 작은 함수들을 모듈처럼 조합하는, 선언적이고 합성적인 스타일로 프로그램을 작성할 수 있어요.
경험 많은 함수형 프로그래머들은 자신의 코드를 수학으로 보려는 강한 욕구를 가진다는 사실도 알아 두면 도움이 돼요. 순수 함수들을 합성하는 것을 일련의 대수 방정식을 조합하는 것처럼 보는 거죠.
함수형 코드를 작성하다 보면 마치 수학자가 된 것 같은 기분이 들어요. 그리고 이 패러다임을 이해하고 나면, 항상 값을 반환하는 순수 함수를 쓰고 싶어져요 — 예외나 null 값을 반환하는 게 아니라요. 그래야 함수들을 결합(합성)해 해법을 만들 수 있으니까요. "수학 같은 방정식(표현식)을 쓰고 있다"는 그 느낌이, 오직 순수 함수와 불변 값만 쓰게 만드는 원동력이 돼요. 대수학이나 다른 수학에서 쓰는 것과 똑같은 방식이니까요.
함수형 프로그래밍은 매우 큰 주제라서, 이 전체를 한 챕터에 담는 간단한 방법은 없어요. 다만 이어지는 절들에서 주요 주제의 개요를 살펴보고, 함수형 코드를 작성하기 위해 스칼라가 제공하는 도구들을 몇 가지 보여드릴게요.
더 알아보기 (Learn more)
- Scala 3 Book — Immutable Values — 불변 값
- Scala 3 Book — Pure Functions — 순수 함수
- Scala 3 Book — Functions Are Values — 값으로서의 함수