Functional Programming - Get Started

조금 더 쉽게 접근했으면 하는 이유에서 이 글을 기존의 블로그 글들과는 약간 다른 설명법을 쓸 수도 있다. 함수형 프로그래밍(FP)을 처음 들었을 때는 몇년 전이었는데, 그 때는 말 그대로 함수를 사용하는 언어라고만 쉽게 생각해서 가볍게 넘긴적이 있다. 어느정도 맞기는한데, 그 이유를 여러번에 걸쳐서 얘기하려고 한다.

몇달 전 지인으로부터 FP 를 다시 전해듣고, ‘아 내가 생각하지 못했던 뭔가 있구나!’ 라는 생각이 들었다. 그래서 신중하게 살펴보았고 여러 해외 글을 통해 지식을 얻었다. 사실 나도 당연히 한글이 훨씬 편하다. 조금 벗어난 주제이긴 한데, 하지만 내가 영어 문서를 고집하는 이유는 간단하다. 예를 들어, OOP 는 객체 지향 언어다! 라고 하면 나는 객체 지향 언어가 뭔지 궁금해하고, 그 궁금증이 해결되기 전까지는 잘 안넘어간다. 안넘어가기 보다, 이해가 되기 전까지는 다음으로 가기가 싫은 성격이다. 그래서 이해 될 때까지 반복적으로 보는데, 이해력이 부족해서 그런거 같다. 아무튼 OOP 가 뭔지 알면 나는 또, 왜 OOP 를 써야되는지 바로 궁금해진다. 그래서 아직 못본 것들이 수두룩 하다. 사실 그런 성격이 나에게 도움은 줬다. 보통 하나를 배워도 내가 만족할 때까지 가기 때문이다.

FP 를 설명한 대부분의 국내 블로그 글에서는 예를 들면, Side Effect 가 있으면 안된다! 라는 내용과 간단한 코드 그리고 짧은 설명이 끝이다. 주입식으로 공부하는 느낌인데, 해외 글에서는 하나의 단계를 차근차근 설명해주기 때문에 되게 좋았다. 그리고 이 글은 나 처럼 속사정을 모르면 못 넘어가는 분들을 위해 준비하려는 글이다. 그래서 섹션별로 나누고 최대한 이해할 수 있도록 쉽게 하나씩 풀이해서 전하려고 한다. 나는 Frontend 개발자라서 자바스크립트로 설명하려고 한다. 원리만 알면 아주 쉬운 패러다임이다. 기존의 방식과 달라서 재활용할 수 있는 구조가 많아서 효율적이다. 시작하기 전에 이 것만 알고 넘어가자,

1
2
3
4
5
function fp (x) {
return x
}

const fp = (x) => x

두개의 함수 선언문이 있고, 위를 아래와 같이 표현할 수도 있다. 즉, 함수 = 변수 라고 생각을 전환했으면 한다. 즉, 패러다임의 전환으로 시작해야 한다. 참, 후자는 ES2015 의 Arrow 표현식인데 앞으로 저렇게 줄여서 쓰는 경우가 많을 듯 하니 아직 ES2015 를 모르신다면 먼저 알고 넘어갔으면 좋겠다.

그리고 함수형이 짱이다! 라고 한다면, 그건 조금 이상한 접근이다. 이렇게도 가능하네?! 라고 접근하는게 좋을 듯 하다. 그리고 수학적 마인드가 들어간 패러다임이라 효율적으로 쓰기 위한 부분이 있고 이로 인해 너무 이해하기 어렵게 변할 수도 있다. 왜냐하면 Currying 패턴을 많이 쓰는데 함수가 변수로 재할당되면서, 예를 들면,

1
2
3
4
5
6
7
8
9
10
11
12
// const fp = (x) = (y) => x + y
function fp (x) {
return function (y) {
return x + y
}
}

const sum = fp(3)
sum(4) // 7

// or
fp(3)(4) // 7

이런 부분이다. 하지만, Currying 이 익숙해지면, 바로 눈에 들어온다. 나도 처음엔 뭐지? 라는 생각이 들었다. 아무튼 이 정도만 인지하면 된다. 다음글로 이동하기 전에 FP 를 접하기 전에 숙지해야할 점을 정리해보았다.

  • ES2015+
  • Currying 패턴
  • 함수 선언
  • 간단한 수학

참, FP 를 몰라도 개발하는데, 전혀 문제가 없다. 이를 모른다고 남보다 떨어지는 것도 아니다. 그냥 흥미롭게 봤으면 하는 바램으로 봤으면 하는 생각에서 쓰는 생각이다.