함수형 스타일의 자바스크립트 프로그래밍, ‘잘’ 배우는 방법

 

블로그_추천사02

함수형, 함수형,  여기저기서 들리는 ‘함수형’ 이야기. 그런데 어떻게 접근해야 할까요? 실무에 적용할 아이디어를 좀 더 빠르게 얻을 순 없을까요? 자바스크립트에서의 함수형 프로그래밍을 고민하는 프로그래머를 위한 실무밀착형 가이드! 《함수형 자바스크립트 프로그래밍》을 소개합니다.

요즘 자바스크립트는 정말 뜨겁습니다. 다양하게 등장하는 신기술들을 보고 있으면 ‘함수형’이 곳곳에 스며들고 있음을 알 수 있습니다. 페이스북은 리액트, 리덕스를 Elm과 같은 함수형 프로그래밍 기술의 영향을 받았다고 했으며, immutable.js와 같은 불변 객체 라이브러리를 만들기도 했습니다. RxJS는 함수형 반응형 프로그래밍으로 잘 알려져 있고, Underscore.js와 Lodash도 함수형 자바스크립트 라이브러리입니다.

자바스크립트는 여러 방향으로 발전하고 있으며 그중 한 방향은 함수형 프로그래밍으로 향해 있습니다. 그동안 어떻게 바뀌어 왔는지, 어떻게 바뀌어가고 있는지를 보면 알 수 있습니다. 자바스크립트에 직접 적용되었거나 되고 있는 map, filter, reduce, Promise, 화살표 함수 등이나 ECMAScript 다음 버전에 제안된 Pipeline Operator, Partial application, flatMap, Observable 등도 모두 함수형 프로그래밍에 대한 것들입니다. 자바스크립트의 함수는 이전부터 클로저, 일급 함수, 익명 함수, call, apply, bind, arguments 등의 강력한 기능을 갖추었고, 최근에는 async, await, 화살표 함수, 나머지 매개변수, 인자 기본 값 설정 등으로 인해 함수의 기능이 더욱 확장되고 있습니다. 모두 새로운 것 같지만, 함수형 프로그래밍 언어들에서 오래전부터 준비되어왔고 검증된 기술들입니다.

“개발자들에게 좀 더 실용적인 관점에서의 함수형 자바스크립트에 대해 알려주고 싶습니다.”

객체지향, 절차지향 등 다른 패러다임에 익숙한 프로그래머가 곧바로 함수형 프로그래밍을 이해하는 것은 쉽지 않다고 합니다. 사고방식의 전환이 필요하기 때문이 아닐까 싶습니다. 이 과정에서 시간과 노력이 들어가는 일은 어쩔 수 없지만, 다른 패러다임을 이해하기 위해 넘어야 하는 허들을 낮춰주고 좀 더 개발자스러운 방식으로 생각할 수 있는 아이디어를 준다면 어떨까요?

《함수형 자바스크립트 프로그래밍》은 ‘실용적인 관점으로 함수형 스타일의 자바스크립트 프로그래밍을 알려주고 싶다’는 생각에서 출발했습니다. 단순히 기법이나 개념을 소개하는 데 그치는 게 아니라, 흔하게 만드는 코드 스타일을 함수적으로 바꿔 나가면서 새로운 스타일과 콘셉트를 전달합니다. 뜬구름 잡는 느낌을 주거나 지나치게 어려운 접근보다는 진행 중인 프로젝트의 작은 부분부터 적용해 나갈 수 있도록 사례 중심으로 안내합니다. 자바스크립트 개발자는 코드를 통해  함수형 프로그래밍으로 더 나아지는 게 무엇인지 직관적으로 알 수 있으며, 단계적으로 예제를 개선해 가면서 함수적 방식의 프로그래밍이 무엇인지 감을 잡을 수 있습니다.
 

이 책에는 함수형 진영에서 연구된 기술들을 지금의 자바스크립트에 어떻게 적용해왔는지, 어떻게 적용해나갈지에 대한 내용이 담겨 있습니다. 기존의 함수형 자바스크립트 라이브러리를 탐구하고, 클로저, 엘릭서 등의 다른 함수형 언어들의 장점들을 자바스크립트에 옮겨보며 얻은 저자의 노하우와 생각들이 녹아 있습니다. 《함수형 자바스크립트 프로그래밍》은 크게 두 가지 틀로써 함수형 방식의 자바스크립트 프로그래밍에 접근합니다.

note-21. Underscore.js를 직접 만들어보며 배우는 함수형 자바스크립트
Underscore.js는 함수형 프로그래밍을 지원하는 자바스크립트 라이브러리입니다. 기존에 구현된 코드들을 따라가 보면 이미 진행된 탐구에 대해 많은 것들을 배울 수 있습니다.  Underscore.js의 API를 알려주기 위함이 아니라 왜 이런 함수가 만들어졌고, _.identity 같이 쓸모 없어 보이는 함수가 왜 실용(실무)적인 관점에서 필요한지 전달하며, 이를 통해 함수의 사용처와 함수형 패러다임의 뼈대를 이해할 수 있습니다.

note-22. 저자가 만든 라이브러리를 통해 살펴보는 함수형 자바스크립트 기법
책의 후반부에서는 저자와 저자의 개발팀이 만든 함수형 자바스크립트 라이브러리 Partial.js를 통해, Underscore.js와 Lodash의 기능적 아쉬움을 해결하면서 기능을 확장해 나갑니다. 이는 단순히 ‘이 라이브러리를 사용하라’는 의도가 아닙니다. 파이프 라인, 불변 객체, 템플릿 엔진, 비동기 제어 등에 있어서 더 나은 기능을 어떻게 구현할 수 있는지를 알 수 있고, 이를 통해 API 디자인을 어떻게 하는지도 알 수 있습니다.

여러분은 이 책으로 함수형 스타일의 자바스크립트 프로그래밍 기법을 배울 수 있고, 자바스크립트를 함수형으로 다루는 데 있어서 필요한 문법들에 대해 집중적으로 이해할 수 있으며, 함수형 패러다임을 이해하며 실무에 활용할 수 있는 아이디어를 얻을 수 있을 것입니다.

블로그_추천사01

또한 이 책과 함께 참고할 만한 동영상 강의를 인프런에서 무료로 볼 수 있습니다. 짧은 시간에 함수형 프로그래밍의 개요를 알 수 있고, 책과 흐름은 같지만 예제 등 세부적으로 다른 부분이 있으니 꼭~ 한번 보시길 추천합니다. (예를 들면, 예제가 다르고, 책의 주제와 맞지 않아 담지 않았던 몇 가지 내용(개발 동향, 엘릭서, 클로저, 병렬성, 동시성에 대한 이야기 등)도 간략히 다루고 있습니다.)
(아래 이미지를 클릭하면 강좌 페이지로 이동합니다.)

인프런_함수형(https://www.inflearn.com/course/함수형-프로그래밍/)

《함수형 자바스크립트 프로그래밍》에는 실무에 함수형 프로그래밍을 어떻게 반영할지 고민하고 노력했던 저자의 노하우와 그 결과가 고스란히 담겨 있습니다. 그리고 철저히 개발자스러운 접근 방식을 녹여 독자에게 보다 ‘쓸만한’ 내용을 담고자 했습니다. 저자의 의도와 책이 전하고자하는 바가 여러분에게 잘 전달되었으면 합니다. 🙂

* 이 책의 모든 예제는 https://github.com/indongyoo/functional-javascript에서 확인할 수 있습니다.

 

▶ [ Yes24 ] [ 교보문고 ] [ 알라딘 ] [ 인터파크 ]

커니의 코틀린 부제 이벤트 정보

커니의 코틀린 부제 이벤트

-. 참여만 해도! (랜덤으로 당첨자 발표합니다)

-. 좋은 아이디어는 당첨 확률 업!(좋은 아이디어는 픽업합니다)

-. 커니의 코틀린 도서를 출간 직후 바로 증정해 드립니다!

참여하기 고고 ==> https://www.facebook.com/insightbook/posts/1199185183572568

인사이트에서 ‘기초부터 다지는 커니의 안드로이드’를 집필하셨던 김태호 님의 코틀린 책이 곧 출간됩니다. 아래의 정보를 참고하여 부제 이벤트에 참여해주세요!

 

1. 지금 쓰고 계신 코틀린 책의 특징을 간단히 설명해주신다면?

자바 문법과 이에 상응하는 코틀린 문법을 비교 설명하여 빠른 시간에 실무에 적용할 수 있도록 하였습니다. 기존에 자바로 작성할 때 겪던 문제를 코틀린으로 어떻게 해결할 수 있는지 보여주고, 실무에서 자바와 코틀린을 혼용해본 경험을 바탕으로 기존의 자바 프로젝트를 코틀린으로 변환하는 방법, 혼용시 유의할 점을 다루었습니다.

 

2. 코틀린과 비교하여 구성한 내용, 그 알맹이는 어떤 것인지 궁금합니다.

우선, 이 책이 단순히 코틀린 문법을 안내하기만 하는 것이 아니라 현업에서 쓰는 코드를 작성할 수 있도록 해주기를 바랬습니다. 그래서 ‘현업에서’ 활발히 사용하는 최신 라이브러리(Retrofit, RxJava, Dagger 등)를 코틀린과 함께 사용하는 방법을 다루었습니다. 이 라이브러리들은 모두 몇 년 이상 지속적으로 안드로이드 애플리케이션 개발에 사용되어 왔고, 앞으로도 큰 이변이 없는 한 몇 년간 사용될 것으로 예상합니다.

1-as86LrhMP7bbf5qsdD38tg
3. 라이브러리도 함께 잘 설명해주신 책인 건가요?

라이브러리 자체에 대한 설명은 아주 깊게 들어가진 않으며, 예제 코드를 이해할 수 있는 정도로만 다룹니다. 코틀린으로 작성하는 앱 예시를 보여주면서, 최신 라이브러리를 코틀린과 함께 사용하는 방법을 겸사겸사 설명해주는 느낌으로 생각하고 있습니다. 그보다는 코틀린을 설명하는 부분에 꽤 힘을 많이 쏟았습니다.

 

4. 구글 I/O에서 발표된 라이브러리를 다룬다던데?

안정적이고 탄탄한 애플리케이션을 만들 수 있도록 도와주는 안드로이드 아키텍처 컴포넌트(Android Architecture Components)를 적용하는 방법을 학습할 수 있습니다. 안드로이드 아키텍처 컴포넌트는 최근 구글 I/O에서 발표된 라이브러리인데요, 아마도 국내 출간되는 도서 중에서 이를 다루는 첫 사례가 될 것 같습니다.
io17_live_1

5. 마지막으로 한 말씀?

저는 2016년부터 약 1년간 코틀린을 실무에 사용했습니다. 이 경험을 바탕으로, 이 책에서 실무에 코틀린을 적용할 때 유용하게 사용할 수 있는 정보를 최대한 많이 다루기 위해 노력했습니다. 아직 코틀린을 실무에서 적용하는 곳이 많지 않은 만큼, 이 책에서 다루는 내용이 실무 적용을 앞두고 계신 분들에게 도움이 되지 않을까 싶습니다.