Yunseok's Dev Blog

배운 것을 적는 블로그입니다.

쏙쏙 들어오는 함수형 코딩 서평

함수형 프로그래머는 프로그램을 만들 때 어떤 시각으로 바라보고 그래서 우리는 왜 함수형 프로그래머처럼 생각을 할 수 있어야 하는지 아주 친절하게 설명해 주는 책이다.

함수형 프로그래머는 우리의 프로그램에서 액션과 계산 그리고 데이터를 구분한다. 왜냐하면 액션은 테스트하기 어렵고 예측 불가능하게 만들기 때문이다. 그래서 우리 코드에서 액션, 계산, 그리고 데이터가 무엇인지 분해해서 볼 수 있고, 액션 안에 있는 것들을 계산으로 뽑아내어 테스트하기 쉽고 유지 보수하기 쉬운 코드를 만들 수 있다. 특히 리팩터링할 때 이 액션을 먼저 분리하여 테스트 가능한 코드를 확보해내고 계산으로 추출하여 점점 더 테스트하기 좋고 유지보수하기 좋은 코드로 리팩터링할 수 있다.

함수형 프로그래머는 우리의 코드에서 일급인 것과 일급이 아닌 것을 구분할 수 있다. 그리고 일급이 아닌 것은 추상화하여 일급으로 만들 수 있다. 예를 들어 자바스크립트에서는 함수가 일급이라서 함수에 인자로 넣거나 반환할 수 있는데 if 문 같은 경우는 일급이 아니기 때문에 그렇게 할 수 없다. 하지만 if 조건문이라는 것을 추상화를 하여 함수로 만들면 일급으로 만들 수 있다.

함수형 프로그래머는 코드를 타임라인으로 분해해서 분석하고 버그를 찾을 수 있다. 비동기적인 동작을 디버깅하는 것은 굉장히 어려운 일인데, 액션, 계산 데이터로 나눈 것을 가지고 타임라인을 구성하면 체계적으로 비정상적인 동작을 찾아낼 수 있다.

함수형 프로그래머는 추상화 벽을 사용해서 세부 구현을 감출 수 있다. 추상화 레벨이 다른 코드는 읽기 어렵고 수정하기 어렵다. 그래서 코드의 추상화 레벨을 분석하여 추상화 레벨을 높이거나 낮출 수 있고, 또 추상화 레벨에 따라서 새로운 기능을 추가할 때 어떤 레벨에 코드를 배치할지 결정할 수 있다.

함수형 프로그래머는 암묵적 입력과 암묵적 출력을 찾아내어 명시적인 입력과 출력으로 바꾸어서 액션과 계산으로 분리해낼 수 있다. 예를 들어 전역변수를 읽거나 수정하는 것은 암묵적 입력과 출력에 속한다. 이러한 코드들은 테스트하기 어렵고 예측하기 어렵게 만든다.

나는 이 책을 읽기 전에는 코드를 리팩터링할 때 읽기 어렵거나 중복이 되는 등의 코드 스멜에 따라서 리팩터링 했었다. 그런데 이 책을 읽고 나서는 먼저 액션을 분리해 내는 리팩터링을 먼저 하게 되었다. 왜냐하면 무엇보다 테스트하기 좋은 코드를 만들기 위해서고 액션을 분리해 내면 코드의 복잡성이 내려가서 더 리팩터링 하기 쉽게 만들어주기 때문이다. 그리고 이 액션으로부터 계산을 뽑아내어 액션을 최대한 작게 만들고 영향을 조금 미치게 하는 것이 더 중요하기 때문이다.

Sources