든든한 우리 형, 함수형 - 논리를 꼬집다

개발할 때 늘 도움을 주는 우리 형, 함수형을 소개합니다

형을 만나다

형을 처음 만난 건 2016년 첫 직장에서였습니다. 사수인 팀장님이 이 형과 아주 친했죠. 저는 그곳에서 일하는 동안 형의 도움을 꾸준히 받으며 성장했습니다. Underscore라는 라이브러리를 사용하고 따라 만들면서 형에 대해 알아갔습니다. 처음에 형은 참 어렵게 느껴졌습니다. 그래도 늘 한결같은 순수한 면에 매력을 느꼈습니다. 서비스가 커가면서 형의 도움을 받는 일이 많아졌죠. 복잡도가 올라갈 때 특히 도움을 많이 받았습니다. 반복되는 코드가 발견되면 꼭 알려줬죠. 이렇게 말했습니다. “이 부분이야, 여길 꼬집어. 이 논리를 꼬집어내.”

논리를 꼬집다

처음엔 무슨 말인지 이해가 되지 않았습니다. 어디가 꼬집어야 할 논리인지 알기 힘들었죠. 잘못 꼬집어서 잘 되던 프로그램이 망가지기도 했습니다. 수많은 실수 끝에 어느 정도 느낌이 왔습니다. 결국 논리를 꼬집기 위해선 추상화가 필수였던 것입니다. 일종의 글짓기인 프로그래밍에선 다양한 논리가 존재합니다. 어떤 순서로 어떤 방식으로 프로그램이 동작하도록 할지 결정하는 논리. 이 중에서 반복되는 논리를 특정 상황에만 적용되지 않는 수준으로 끌어올리는 게 추상화입니다. 조금 더 범용적으로 적용될만한 논리를 모아 하나의 함수로 만드는 것. 그게 우리 형, 함수형이 알려준 첫 번째 도움이었습니다.

forEach

예를 들기 가장 좋은 게 forEach입니다. 이 친구는 for의 논리를 함수로 만든 친구입니다. 자바스크립트에서는 메서드 형태로 배열에만 적용되지만, 논리를 놓고 보면 배열처럼 순차적으로 값을 조회할 수 있는 모든 경우에 사용할 수 있습니다. 생각해보면 배열을 놓고 for와 같은 논리를 구현할 방법은 많습니다. while을 사용할 수도 있습니다. for 만해도 아주 다양한 방식으로 구현할 수 있습니다. -1부터 시작하거나 평범하게 0부터 시작할 수도 있죠. 가만 보니 어떤 구현체건 결국 논리는 값을 순차적으로 조회하는 게 핵심이군요. 사실 메서드가 아닌 함수에선 each라고 부르는 경우가 더 많죠. 한국어로 ‘각각의’라는 뜻을 갖는 걸 봤을 때 순회할 수 있는 값에서 각각의 값을 확인한다는 의미인 거겠죠. 이 친구는 우리 형, 함수형이 참 좋아하는 논리가 잘 꼬집힌 함수인 것 같네요.