함수형 사고는 함수형 프로그래밍의 기술과 개념을 말합니다. 함수형 프로그래머는 코드를 액션과 계산, 데이터로 나눠서 바라봅니다.
- CHAPTER 1 쏙쏙 들어오는 함수형 코딩에 오신 것을 환영합니다 中 -
책에서 소개하고 있는 함수형 프로그래밍(functional programming)의 위키피디아 요약 정의는 다음과 같다.
비전공자로선 도저히 이해할 수 없는 용어들뿐이다. 순수 함수는 뭐고, 부수 효과는 또 뭐란 말인가?
순수 함수: 인자에만 의존하고(같은 인자를 넣으면 항상 같은 결과를 돌려준다는 의미) 부수 효과가 없는 함수.
부수 효과: 함수가 리턴 값 외에 메일을 보내거나, 전역 상태를 수정하는 기능 등이 발생하는 모든 일. 함수를 부를 때마다 발생하기 때문에 문제 발생.
다만, 실무에서는 모든 기능을 순수 함수로만, 부수 효과를 발생시키지 않고 프로그래밍을 한다는 건 불가능하기 때문에 이를 잘 제어하는 것이 중요하다고 저자는 강조한다.
그래서 다른 방법으로 함수형 프로그래밍을 설명하면서 나오는 세 가지 키워드가 바로 액션, 계산, 데이터다.
저자는 액션을 구분하는 게 가장 중요하다고 설명한다. 도대체 왜일까?
액션은 호출하는 시점과 횟수에 의존하는 함수다. 즉, 부수 효과가 발생할 가능성이 가장 높은 코드다. 예시를 보자.
callDataToAppend(user); // 부르는 횟수 중요
getMilliseconds(); // 부르는 시점에 의존
checkValidation(); // 부르는 시점, 횟수 모두 중요
액션은 호출하는 시점과 횟수에 의존하는 함수이기 때문에 호출할 때 유의해야한다. 예시 중 getMiliseconds()
함수는 시간의 밀리단위 초를 가져오는 함수로 언제 호출되느냐에 따라 값이 매번 바뀐다. 그밖에도 회원가입 폼에서 빈번하게 일어나는 유효성 검사를 위한 checkValidation()
같은 함수는 시점과 횟수가 모두 중요하다. 언제 하느냐에 따라 값이 바뀌고, 너무 빈번한 호출은 과부하를 일으킬 수 있다.
계산과 데이터는 호출하는 시점이나 횟수의 영향을 받지 않는다. 이와 같은 특징으로 액션과 1차적으로 구별할 수 있다. 계산과 데이터를 나누는 2차 특징은 실행 여부에 있다.
sum(a, b); // 계산
[1,2,3,4,5] // 데이터
{ name: "John", age: 30} // 데이터
즉, 데이터는 이벤트에 대해 기록한 정적인 사실이며 계산은 입력값으로 출력값을 만드는 순수 함수에 해당한다. 따라서 데이터는 보이는 그대로를 신뢰할 수 있으나 계산은 실행 전까지 인자값이 어떻게 변경될 지 알 수 없다.
그러므로 가장 신뢰성이 높은 순으로 줄 세운다면 데이터 > 계산 > 액션 순이다.
함수형 프로그래밍에서 코드를 분류하는 세 가지 방식인 액션, 계산, 데이터의 개념을 살펴봤다. 한 번 머릿속에 정리되면 헷갈리지 않을 정도로 명료하다. 이 책에서 나오는 내용을 기반으로 요즘IT에서 함수형 프로그래밍을 Javascript 언어에서 어떻게 활용해야하는지 정리해둔 글이 있어 들고 왔다.
챕터 1에서는 함수형 프로그래밍을 이해하기 위해 어떤 식으로 사고해야하는지, 함수형 프로그래밍이 어떤 개념과 연결되어있는지를 설명해서 앞으로 어떻게 책을 읽어야되는지 알려주는 가이드를 따라가봤다.
쭉 읽으면서 최근 많이 사용하고 또 열심히 공부 중인 React.js는 '과연 함수형 프로그래밍 방식을 활용하는 걸까?' 하는 궁금증이 생겼다. 이와 관련해서는 따로 정리를 하면서 고민하는 시간을 가지고 싶다.