알라딘

헤더배너
상품평점 help

분류국내저자 > 컴퓨터/인터넷
국내저자 > 번역

이름:오현석

최근작
2024년 3월 <리액트훅 인 액션>

12

러닝 리액트

리액트를 사용하면 UI 컴포넌트를 정의하고 선언적으로 활용해 UI를 구축하고 제어할 수 있다. 리액트 라이브러리 자체는 비교적 간단한 UI 라이브러리라고 할 수 있지만, 리액트를 뒷받침하는 합성성과 관심사 분리, 데이터 흐름 방향의 단순화 등은 UI뿐만 아니라 다양한 응용 분야에서 활용할 수 있는 좋은 아이디어다. 이 책은 기본적인 ES6부터 시작해서 차근차근 리액트의 여러 아이디어를 설명하며 이해에 방해가 될 수 있는 곁가지를 최대한 줄이고 꼭 알아야 하는 내용 위주로 전개한다. 이 책을 통해 리액트의 핵심 요소를 잘 이해하고 나면 리액트 공식 문서나 자세하고 복잡한 리액트 내용을 더 쉽게 이해하고 여러분 자신의 프로젝트에 리액트를 잘 활용할 수 있을 것이다.

리액트훅 인 액션

리액트(React)에 함수 컴포넌트가 도입되고, 훅hook이 도입되면서 다양한 서드파티 라이브러리가 훅을 제공하기 시작했고 훅과 함수 컴포넌트를 함께 사용하면 클래스 기반의 컴포넌트보다 훨씬 더 간결하고 합성성이 좋으면서 유지보수하기도 쉬운 앱을 만들 수 있다는 사실을 사람들이 깨닫게 되면서 훅과 함수 컴포넌트가 많이 쓰이고 있다. 예를 들어, 최근 자주 쓰이는 리액트 상태 관리 라이브러리인 주스탠드(Zustand), 조타이(Jotai) 등은 모두 훅을 제공한다. 따라서 이제 리액트 개발을 익히기 위해서는 훅을 다루는 방법을 체계적으로 잘 배워둘 필요가 있다. 하지만 대부분의 리액트 책은 아직도 클래스 컴포넌트를 자세히 다루고, 훅보다는 클래스 메서드를 통한 컴포넌트 생명 주기 관리에 대해 설명하고, 리액트 훅에 대해서는 간단히 설명하고 넘어가는 경우가 많다. 이 책은 리액트의 여러 가지 기능 중에서도 특히 훅을 자세히 다룬다. 자바스크립트와 웹 개발을 어느 정도 알고, 기본적인 리액트 개발을 배운 개발자라면 이 책을 통해 훅을 더 잘 이해하고 자신만의 커스텀 훅을 작성해 프론트엔드 프로그램을 좀 더 모듈화할 수 있을 것이다. 무엇보다 풍부한 그림을 통해 리액트 함수 컴포넌트가 어떻게 작동하는지, 함수 컴포넌트의 각 기능을 어떻게 훅으로 분리해 내는지 등을 시각적으로도 자세히 설명해 주기 때문에, 이를 통해 좀 더 쉽게 컴포넌트와 훅의 관계를 이해할 수 있으며 여러분이 작성한 컴포넌트에서 공통 기능을 어떻게 훅으로 분리해 낼 수 있을지에 대해서도 쉽게 이해할 수 있다. 그리고 훅의 동작을 잘 이해하고 나면 새로운 서드파티 라이브러리가 제공하는 훅을 활용할 때도 더 쉽게 컴포넌트와 서드파티 훅의 동작이 어떤 식으로 이뤄질지 이해하고 활용할 수 있다. 또 리액트를 잘 모르는 프론트엔드 개발자라 하더라도, 그림을 통해 클래스 컴포넌트의 여러 부분이 어떻게 함수 컴포넌트와 훅으로 바뀌는지에 대해 자세히 설명해 주고, useState 훅을 사용한 컴포넌트 상태 관리로부터 useReducer를 통해 상태를 여러 컴포넌트에 공유하는 방법, useRef 훅을 사용해 참조를 공유하는 방법 등 리액트 함수 컴포넌트를 사용해 웹 앱을 만들 때 필요한 여러 기능을 차근차근 설명해 나가기 때문에 리액트 초보자가 리액트 기초를 쌓고 싶을 때도 도움이 된다. 이 책이 훅을 사용하는 리액트 프로그래머들에게 작게나마 도움이 되길 바란다.

모던 파이썬 입문

이 책은 파이썬 언어의 기초를 설명하되 언어 자체를 지루하게 설명하기보다는 언어를 통해 할 수 있는 일을 설명하고, 실제 코드를 작성해 보면서 배운 내용을 복습하고, 실제 생활에서 파이썬을 어떻게 활용할 수 있는지 알려주는 좋은 책입니다. 또한, 프로그래머들이 생각하는 방식을 알려주기 위해 개념과 예제를 균형 있게 배치해 여러분이 좀 더 편하게 코딩을 시작할 수 있게 도와줍니다.

순수 함수형 데이터 구조

함수형 프로그래밍이 개발자들 사이에서 기본 교양으로 자리 잡기 시작했지만, 아직도 함수형 언어나 함수형 프로그래밍은 느리다는 편견을 가진 개발자가 많다. 특히 데이터 구조에 있어서는 불변성을 활용한 데이터 구조를 사용하면 제자리에서 데이터를 갱신하면서 최적화된 알고리즘을 사용할 수 있는 명령형 데이터 구조보다 느릴 것이라는 편견이 있는 개발자가 많을 것이다. 실제로 1990년대 중반까지만 하더라도 불변성을 활용한 데이터 구조를 사용하면 명령형 데이터 구조보다 느릴 것이라는 생각은 단순한 편견은 아니었다. 물론 물밑에서는 이 문제를 해결하려는 여러 가지 노력과 연구가 진행되고 있었다. 크리스 오카사키(Chris Okasaki)는 그런 연구 결과를 집약하고 자신의 연구 결과를 덧붙여서 박사 학위 논문을 썼고, 나중에 이를 좀 더 보완해 『Purely Functional Data Structures』라는 이름의 책으로 펴냈다. 이 책은 불변성(immutability)과 지연 계산(laziness)을 활용해 100% 함수적으로 만든 데이터 구조와 알고리즘도 명령형 데이터 구조나 알고리즘만큼 성능이 좋을 수 있다는 사실과 그런 데이터 구조를 만들기 위한 몇 가지 방법을 제시한다. 그리고 함수형 프로그래밍을 공부하는 사람들 사이에서는 일종의 고전으로 자리 잡았다. 비록 책의 제목은 데이터 구조 책처럼 보이지만, 데이터 구조에 대해서만 써놓은 책이 아니다. 이 책에서 제시하는 기수법을 활용한 데이터 구조 개발 방법이나 지연 계산을 활용해 비싼 연산을 분산시켜서 알고리즘의 효율을 높이는 기법 등을 읽어보고, 직접 코드를 작성하고 분석하다 보면 지금까지와는 전혀 다른 사고방식에 눈뜰 수 있을 것이다. 지연 계산을 활용해 연산을 분산시키는 것은 메모리와 실행 시간을 맞바꾸는 전통적인 트레이드오프(trade-off) 관계의 연장선상에 있다고 볼 수 있다. 힙에 맵(또는 딕셔너리) 등을 할당하고 이를 활용해 계산 결괏값을 저장함으로써 알고리즘의 효율을 높였던 방식에서 더 나아가 나중에 수행하거나 분산시켜 수행해야 할 계산을 함숫값(또는 클로저)이나 지연 계산 썽크(thunk) 형태로 저장하고 이를 활용해 효율적인 알고리즘을 개발할 수 있다. 어쩌면 이를 좀 더 확장하면 마이크로서비스 아키텍처 등의 분산 시스템이나 동시성 시스템 기술에 활용할 수 있는 새로운 라이브러리나 기법을 만들 수 있을지도 모른다. 굳이 그런 실무 활용을 고려하지 않더라도, 여러분이 원하는 작업을 처리하는 새로운 방법을 배우고 함수형 사고방식을 연습할 수 있는 교재로도 이 책은 (약간은 어렵겠지만) 훌륭하다. 함수형 프로그래밍 기초 서적을 한 권 정도 마무리하고, 하스켈이나 스칼라 같은 언어 책을 읽은 개발자에게 한 번쯤 도전해보라고 권하고 싶다. 개인적으로는 이런 고전 수준의 책을 번역한다는 것이 상당히 설레면서도 두려웠다. 쉬운 작업은 아니었고 아마 실수한 부분도 있겠지만 그래도 몇 권 안 되는 번역서 중에 이런 책이 추가된 건 큰 행운이라고 생각한다.

스칼라 동시성 프로그래밍

내가 처음 접했던 컴퓨터는 금성사의 FC-30으로, 8비트, 4MHz(절대 GHz의 오타가 아니다!) Z-80A CPU를 사용하던 귀여운 녀석이었다. 반면, 지금 내가 이 서문을 작성하는 데 사용 중인 컴퓨터는 인텔 코어 i7이 들어 있는 데스크탑으로, 무려 3.9GHz에 4개의 64비트 코어가 들어 있고, 하이퍼스레딩 기능을 통해 4개의 가상 코어를 더 사용할 수 있는 머신이다. 불과 33년이 흘렀지만, z80과 i7 사이의 성능 차이는 2만 2천배다(MIPS로 단순히 비교하자면 Z80A가 0.6MIPS, i7은 133,740 MIPS이다. 물론 MIPS 같은 단위로 성능을 비교해서는 안 된다). 무려 코어가 4개씩 들어간 이유는, 더 이상 클럭 속도를 늘리는 데 한계에 봉착한 프로세서 생산 업체들이 이제는 코어를 늘려가면서 성능 한계를 극복하려 노력하고 있기 때문이다. 하지만, 여러 코어에서 동시에 프로그램을 실행할 수 있는 CPU가 흔해졌다고 해도, 모든 프로그램이 이를 제대로 활용할 수 있는 것은 아니다. 특히, 원래 처리해야 할 데이터의 양이 아주 방대한 빅데이터 분야나, 계산해야 할 양이 많은 기계학습 분야, 또는 사용자가 GUI 등으로 프로그램에 이벤트를 발생시키고, 프로그램은 이를 비동기적으로 처리하면서, 더 쾌적한 사용자 경험을 제공해야 하는 프로그래밍 분야 등에서는 전통적인 단선적 프로그래밍 기법만으로는 컴퓨터 하드웨어가 제공하는 병렬성을 충분히 살리지 못할 가능성이 많다. 또한 동시 프로그래밍이나 병렬 프로그래밍은 진입하기가 쉽지 않다. 먼저, 동시성을 살려서 병렬 처리가 가능하게 프로그램을 작성할 수 있는 법을 배워야 한다. 하지만 대부분의 프로그래밍 교재나 안내서는 그런 부분에 대해 잘 다루지 않거나, 다루더라도 간단한 스레드 활용법 정도를 소개하는 데 그친다. 이런 책을 통해 병렬 프로그래밍에 입문하게 된 개발자는 곧 비결정성이나, 기존의 단선적인 프로그램 흐름에서는 발생할 수 없는 다양한 문제들과 마주치면서 당황하게 된다. 하지만 당황할 것은 없다. 에드가 다익스트라 같은 위대한 전산학자도 1960년대부터 여러분과 같은 문제에 직면하고, 해결하기 위해 고민했으며, 그 외에 수많은 연구자들이나 개발자들도 비슷한 문제를 접하고 고민해 왔지만, 병렬성과 동시성의 모든 문제를 해결해 줄 수 있는 최후의 해결책은 아직 나온 적이 없기 때문이다. 다만 이런 경우에 여러분의 실수를 줄일 수 있는 좋은 안내서가 있다면 매우 바람직할 것이다. 그런 면에서 자바 프로그래머들은 축복받은 축에 속한다. 브라이언 게츠(Brian Goetz) 등이 집필한 『자바 병렬 프로그래밍』(에이콘출판, 2008)은 자바 동시 프로그래밍의 기초부터 응용까지를 잘 다룬 멋진 책이다. 하지만, 그 책이 나온 지 10여 년이 지났고 액터, 병렬 컬렉션, 소프트웨어 트랜잭션 메모리 등의 도구들도 많이 보급되고 있다. 따라서 10년 전에 유효했던(물론 대부분은 지금도 여전히 유효하다) 여러 기초 지식을 잘 설명하면서, 그간의 변화를 반영해 다양한 고수준 동시성 도구를 아우를 수 있는 개론서가 등장할 때가 됐다고 할 수 있다. 이 책은 바로 그런 'JVM상의 동시 프로그래밍'에 대한 개론서 역할을 충분히 할 수 있는 책이다. 동시성 프로그래밍을 할 때, 자바를 사용해 다양한 추상화를 쉽게 구현하고 표현할 수 있다면 좋을 것이다. 비록 자바 8에 람다, 인터페이스 디폴트 메소드 등이 들어가면서 과거보다 훨씬 표현력이 좋아지긴 했지만, 애석하게도 자바는 주류 언어 중에서는 상당히 제약이 심한 언어 중 하나다. 다양한 동시성 도구를 소개하면서 자바 API를 사용하는 경우, 그보다 더 이해하기 쉽고 깔끔한 언어를 활용하는 것보다 오히려 코드 이해가 어려워질 수도 있다. 그런 면에서, 자바 프로그래머에게 스칼라는 또 하나의 축복이라고 감히 말할 수 있다. 이 책은 스칼라를 사용한 JVM상에서의 동시 프로그래밍에 대해 설명하며, 스칼라 코드로 인해 예제 코드는 간결하고 이해하기 쉬워졌다. 따라서 독자 여러분은 문제 자체의 본질과 그 해결 방법에 좀 더 집중할 수 있다. 더구나, 이 책의 저자인 프로코팩은 스칼라의 본산인 EPFL 스칼라 팀의 일원이며, 스칼라 동시성 라이브러리를 작업해온 핵심 멤버라는 점에서, JVM 동시 프로그래밍 책을 저술하기에 가장 적합한 사람 중 하나라고 말할 수 있다. 스칼라 프로그래머라면 주저 없이 이 책을 읽고, 다양한 동시 프로그래밍 도구를 적재적소에 사용하게 되길 바란다. 자바 프로그래머라면, 이 책을 통해 스칼라를 사용해서 얼마나 간결하고 멋진 코드를 작성해 JVM상에서 실행할 수 있는지 경험하는 한편, 다양한 동시성 도구들을 배우고 익히는 기회도 함께 획득하기 바란다. 그리고 자바나 스칼라 프로그래머가 아닌 독자라면, 각종 동시 프로그래밍 도구의 기본적인 개념과 사용 방법, 주의사항 등을 배우고 익히면서, 프로그래밍 언어를 적절히 선택하는 것이 얼마나 코딩 생활을 쾌적하게 만들어줄 수 있는지를 느껴보기 바란다.

스칼라와 기계 학습

90년대 중반 AI 과목을 대학에서 들을 때만 해도 언제쯤 되야 컴퓨터가 바둑에서 인간을 이길 수 있을지 모르겠다는 이야기를 들었지만, 알파고가 이세돌 사범을 이기면서, 입신의 경지에 이른 기사들이 "알사범"이라고 알파고를 부르는 것을 직접 목도한 것이 불과 몇 개월 전이다. 인간의 모든 인지 사고 능력을 발휘하는 강 인공지능(Strong AI)까지는 아직 거리가 있을지 모르지만, 적어도 특정 분야에서 전문가와 비슷하거나 그 이상의 성능을 발휘하는 약 인공지능(Weak AI) 프로그램은 알파고와 같은 게임이나, 자동 주행 자동차, 각종 이미지 인식, 시리(Siri)와 같은 시스템, 전문가 시스템 등등 우리 삶의 곳곳에서 널리, 깊이 쓰이고 있다. 이런 변화에는 병렬 처리 기술과 딥러닝 등의 발달이 큰 역할을 했다. 또한, 이런 기계 학습 기법과 빅데이터의 방대한 데이터 처리 능력을 결합하면 이전에는 제공하지 못했던 가치있는 정보를 제공할 수 있고, 다양한 범위에서 사람들을 이롭게 할 수 있을 것이다. 이런 변화의 물결에 올라타기 위한 가장 좋은 도구 중 하나가 스칼라다. 스칼라를 활용하면 기존의 방대한 자바 에코시스템을 그대로 활용할 수 있으면서, 최근 빅데이터 처리의 킬러 앱 중 하나인 스파크(Spark)을 통해 큰 데이터를 쉽게 처리할 수 있다. 또한 스파크를 기반으로 요즘 활발하게 개발 중인 여러 기계 학습 알고리즘 라이브러리를 활용할 수도 있다. 이 책은 스칼라를 기계 학습에 활용하고 싶은 독자들에게 좋은 안내서가 될 것이다. 스칼라를 활용한 데이터 처리 기법이나 스파크에 대한 간략한 소개를 통해 기계 학습에 스칼라를 활용할 때 사용할 수 있는 기본적인 도구를 갖출 수 있다. 또한, 데이터 전처리, 비감독 학습, 베이지안 분석, 회귀와 정규화, 은닉 마코프 모델, SVM, 인공 뉴럴 네트워크, 유전자 알고리즘, 강화 학습 등의 수학적인 기초와 스칼라 구현 방법을 소개하며, 그 구현을 활용해 실제 금용 데이터의 트렌드를 어떻게 분석하는지를 보여줌으로써 실제 어떤 식으로 각종 알고리즘을 적용할 수 있고 각각의 장단점은 무엇인지를 배울 수 있다. 아무쪼록 이 책이 스칼라를 기계 학습에 활용하려고 마음먹은 여러 독자들에게 좋은 출발점이 되기를 바란다.

실전 파이썬 핸즈온 프로젝트

프로그래밍 언어를 배울 때는 보통 기본 문법을 배우고, 간단한 예제를 풀어보면서 다양한 프로그래밍 요소와 표준 라이브러리를 문제를 해결할 때 활용하는 방법을 익히게 된다. 이 정도 수준이 되면 이제부터 할 수 있는 일이 무궁무진해지지만, 오히려 할 수 있는 일이 너무 많아서 무엇을 해야 할지 정하지 못하고 주저하는 사이 시간은 가고 언어에 대해 배웠던 지식도 머릿속에서 사라져가는 경우가 흔히 있다. 이럴 때 가장 좋은 방법은 일상생활에서 해결하고 싶은 일을 찾아서 프로젝트를 시작하는 것이다. 보통 주변에서 절실히 필요한 무언가가 있을 때 생산성도 높아지고, 자기 자신에게 절실한 현실의 문제를 제대로 푸는 프로그램을 개발하면 의외로 그 프로그램이 남에게도 유용하다는 사실을 발견하고 그 자체가 큰 사업이 되거나 제품이 되는 경우도 흔히 있다. 하지만 적절한 프로젝트를 찾지 못한 사람은 이 책에서 큰 도움을 얻을 수 있다. 이 책은 천문학이나 로켓과학, 인공지능 등의 분야에서 실제로 해결해야 했던 문제나 있을 법한 문제를 파이썬으로 푸는 방법을 보여준다. 문제 자체도 흥미진진하고, 문제에 얽힌 역사적·과학적 사실도 재미 삼아 읽기에 부족함이 없으며, 문제를 해결하기 위한 아이디어를 프로그램으로 풀어나가는 방법 또한 흥미진진하다. 그리고 이런 복잡한 문제를 파이썬과 파이썬 생태계에 존재하는 편리한 라이브러리를 통해 얼마나 짧은 코드로 쉽게 풀 수 있는지를 감상하면서 감탄하는 경험도 할 수 있다. 아무쪼록 파이썬 기초를 뗀 독자들이 이 책을 통해 프로그래밍의 재미를 더 느끼고 파이썬 기술도 한층 더 갈고닦기 바란다.

아토믹 코틀린

브루스 에켈은 『Thinking in C++』, 『Thinking in Java』, 『Atomic Scala』 등의 책에서 보듯이 언어를 쉽게 설명하기로 정평이 나 있다. 스베트라나 이사코바는 코틀린 컴파일러 팀의 일원이자 『Kotlin in Action』의 공저자이며 다양한 콘퍼런스에서 코틀린을 소개하고 가르치는 일을 하고 있다. 따라서 이 책은 코틀린을 배우길 원하는 개발자에게 코틀린의 기초를 쉽고 정확하게 설명해줄 수 있는 저자들이 쓴 책이라 할 수 있다. 아무쪼록 독자 여러분이 이 책을 통해 코틀린을 더 잘 이해하고 향후 코틀린을 더 깊이 배우는 데 필요한 기초를 단단히 다질 수 있길 바란다.

유쾌한 파이썬

파이썬은 그 간결성과 특유의 표현력으로 많은 사람에게 꾸준히 사랑을 받고 있다. 빅데이터 시대에 각광받는 언어 중 하나로, 오늘날 C, C++, 자바 다음으로 많이 사용되는, 프로그래머가 꼭 알아야 하는 언어가 되어가고 있다. 언어를 배우는 것은 언어 문법과 라이브러리가 제공하는 기능을 익히는 기본적인 부분과, 언어를 활용해 여러 가지 문제를 해결하는 프로그램을 작성해 보는 실질적이고 응용적인 부분으로 나뉜다. 하지만, 실제로 프로젝트나 작업을 진행하면서 필요한 응용 기능을 구현하는 과정에서 기본기를 배울 수 있다면 흥미는 배가되고, 학습 후 곧바로 배운 바를 실전에 써먹을 수 있기 때문에 파이썬으로부터 얻는 이익도 더 커질 것이다. 이 책은 여러분이 안기부나 CIA와 같은 첩보 기관의 비밀 요원이라 가정하고, 각종 첩보 공작에 필요한 여러 가지 기술을 하나하나 구현해 나간다. 그 과정에서 다양한 파이썬 라이브러리 사용법과 기본 문법, 그리고 애플리케이션 개발 방법을 배울 수 있다. 코딩은 즐거움을 수반한다. 이 책을 읽으면서 암호화, 웹에서 파일 내려받기, 이미지 처리, 지리정보 인코딩/디코딩 등 일상생활의 다양한 문제를 해결하다 보면 코딩의 재미를 더 깊이 느낄 수 있으면서, 다양한 분야에서 활용할 수 있는 파이썬 프로그래밍 기초 지식을 쌓고, 향후 더 복잡하고 어려운 문제에 이를 적용할 수 있을 것이다. 여러분이 이 책을 통해 나와 같은 즐거움을 느끼고, 한 걸음 더 파이썬 프로그래밍의 세계에 발을 깊이 담글 수 있게 되길 바란다.

코어 파이썬 애플리케이션 프로그래밍 Core Python Applications Programming Third Edition

빅 데이터가 소위 '뜨거운' 이슈가 되면서 최근 새롭게 조명을 받는 언어 중 하나가 파이썬이다. 물론 파이썬 자체는 이미 C나 C++, 자바와 더불어 세계적으로 널리 쓰이는 대중화된 언어 중 하나란 점에서 새삼스럽기는 하다. 이 분야에서 파이썬이 각광을 받는 이유를 들자면 프로그래밍 공부에 시간을 투자할 만한 시간을 내기 어려운 데이터 과학자들에게 배우기 쉬우면서도, 데이터의 전처리와 후처리에 필요한 다양한 기능을 제공하고, 필요한 경우 다른 언어나 모듈들과 통합해 사용하기 쉬운 등 여러모로 장점이 많은 언어이기 때문이리라. 이런 장점은 바로 일반 독자에게도 적용 가능하다. 실제 개발에서 파이썬을 사용하고 있는 개발자는 물론이지만, 다른 언어를 주로 쓰는 개발자라도 필요한 도구를 간단하게 개발하거나 프로토타입을 만들어야 할 필요가 있을 때 파이썬은 유용한 도구가 된다. 파이썬은 또한 프로그래밍을 처음 배우는 사람이 배우기 쉽고 다양한 프로그램 개념을 쉽게 습득할 수 있는 언어이기도 하다. 어떤 언어든 처음 한두 권의 자습서를 떼고 나면 막막한 느낌이 들기 마련이다. 문법은 어느 정도 습득했고 간단한 예제도 다뤄봤지만, 실제 실무나 실전에서 활용하려면 시작점이 될 만한 문서를 찾아보기도 어렵고, 도움을 받기 어려운 경우가 많다. 그런 의미에서 이 책 『코어 파이썬 애플리케이션 프로그래밍』은 초급자가 중급자로 발돋움하기 위한 좋은 발판이 될 수 있다. 이 책에서 기본적인 개념과 키워드를 배우고, 부족한 부분은 다른 책이나 웹 서핑을 통해 채워나간다면 짧은 시간 안에 훌륭한 개발자로 자리 잡을 수 있을 것이다. 이 책은 개발자라면 누구나 알아야 하는 기본 도구라 할 수 있는 정규식과 네트워크 프로그래밍, 멀티스레드, 멀티프로세스 프로그래밍을 다룬 후 웹 서버 프로그래밍, 구글 앱 엔진, COM 등 다양한 응용 분야를 다룬다. 각 장을 마무리할 때마다 새로운 개념과 분야를 배우고 더 잘 이해하게 될 것이며, 더불어 실무에서 유용하게 사용할 수 있는 도구를 갖춰 갈 수 있을 것이다. 아무쪼록 이를 통해 파이썬을 더 넓고 깊게 활용할 수 있는 개발자들이 많이 늘어나고, 실무에서 파이썬을 사용해 개발의 재미와 빠른 목적 달성의 기쁨을 동시에 맛볼 수 있는 분들이 널리 늘어나길 바란다.

코틀린 완벽 가이드

『코틀린 인 액션(Kotlin in Action)』을 번역하기 시작했던 2016년 말은 아직 코틀린이 안드로이드 공식 지원 언어가 되기 전이었다. 하지만 구글 I/O 2017에서 코틀린이 안드로이드 공식 언어로 지정됐으며, 때맞춰 『코틀린 인 액션』을 독자 여러분에게 선보일 수 있었다. 그 후 시간이 지나면서 코틀린 언어도 변화해 왔으며, 코틀린이 실행되는 환경인 JVM과 코틀린이 의존하는 상당수 기능을 제공하는 자바 표준 라이브러리나 자바 언어 자체도 빠르게 변했다. 이 책 『코틀린 완벽 가이드(Kotlin In Depth 1&2)』는 코틀린 개발 팀원의 책으로서 너무 이론적이지 않게 코틀린 언어를 설명하고 있다는 점도 마음에 들었고, 코틀린 언어만이 아니라 Ktor, 코테스트, 스프링, 안드로이드 개발 등 다양한 코틀린 소프트웨어 개발 예제를 소개하고 있다는 점이 특히 마음에 들어서 즐겁게 번역했다.

코틀린 함수형 프로그래밍

빅데이터 붐이 일 때 스칼라(Scala)와 스파크(Spark)가 적극적으로 커뮤니티에 받아들여지면서부터 함수형 프로그래밍에 대한 세간의 관심이 그 전에 비해 극적으로 늘어났다. 이제는 일반 개발자 사이에도 함수형 프로그래밍이 어느 정도 필수적인 프로그래밍 패러다임으로 받아들여지는 분위기다. 2010년대 이전과 비교하면, 함수형 프로그래밍에 대한 책도 많이 늘어났고 동영상 강의나 관련 자료도 인터넷에서 많이 찾아볼 수 있게 됐다. 그럼에도 함수형 프로그래밍을 정통적으로 알려주는 책은 그리 많지 않다. 무엇보다 일반 프로그래밍 언어에서 타입을 활용하는 함수형 프로그래밍의 고계 타입을 표현하려면 어려운 점이 많으므로, 함수형 패러다임과 복잡한 타입 시스템을 적극적으로 지원하는 하스켈(Haskell)이나 스칼라 같은 언어를 사용해 함수형 프로그래밍의 개념을 알려주는 경우가 많다. 대표적인 책으로 하스켈의 『가장 쉬운 하스켈 책』(비제이퍼블릭, 2014)이나 이른바 '빨간 책'인 스칼라의 『스칼라로 배우는 함수형 프로그래밍』이 있다. 반대로 정적 타입을 지원하지 않는 언어(자바스크립트 등)에서 함수형 프로그래밍을 다루는 책도 많이 있지만, 타입 시스템을 활용하지 않기 때문에 고계 타입이 주는 장점을 살리지 못한다는 한계가 있다. 이 책은 유명한 '빨간 책'의 코틀린 버전으로, 코틀린을 알고 있는 개발자들이 함수형 프로그래밍의 개념을 깊이 배우고 연습할 수 있도록 쓰였다. 새로운 패러다임을 배우기 위해 새로운 프로그래밍 언어를 배우면, 백지 상태에서 개념과 언어를 함께 배울 수 있어 완전히 새로운 관점에서 배움을 진행할 수 있다는 장점이 있다. 하지만 언어를 배우는 데 드는 노력으로 인해 개념을 이해하기는 더 어려워질 수도 있다. 그런 점에서 볼 때, 이 책은 코틀린 프로그래밍 언어를 사용했으므로 좀 더 쉽게 함수형 프로그래밍에 접근할 수 있는 길을 열어준다고 할 수 있을 것이다. 이 책을 읽고, 연습문제를 모두 풀어나가다 보면 함수형 프로그래밍의 개념을 이해하고 다양한 함수형 타입을 설계할 능력을 키워 나갈 수 있을 것이다. 또한, 명령형 코드를 작성할 때도 학습한 개념을 활용해 좀 더 우수하고 안전한 프로그램을 작성할 수 있게 된다. 부디 함수형 프로그래밍에 관심을 갖고 이 책을 집어든 여러분이 전체 여정을 마친 후 잘 훈련된 함수형 프로그래머로 거듭나길 기원한다.

파이썬 로보틱스

1990년 초, DC 모터를 사용한 마이크로 마우스가 스무드 턴(smooth turn)을 하면서 미로를 찾아가는 모습을 지켜보면서 환호성과 탄성을 질렀던 기억이 난다. 오늘날에는 반제품의 마이크로 마우스에 코딩만 하면 얼마든지 로봇 프로그래밍을 즐길 수 있고, 레고 마인드스톰 등 다양한 제품을 사용해 여러 가지 로봇을 만들고 실험해 볼 수 있다. 그렇지만, 역시 로봇이 가지는 매력은 내 손으로 움직이는 어떤 존재를 만들고, 그 존재에 내가 작성한 코드를 집어 넣어서 생명을 불어 넣고, 그 존재가 실제 현실에서 움직이는 것을 본다는 점에 있다. 게다가 로봇 제어는 전자, 통신, 기계, 전산 등이 모두 집약된 종합 예술이다. 로봇을 만드는 전 과정을 배우기 위해서는 직접 로봇을 만들어보는 것이 가장 좋을 것이다. 이 책은 계획, 설계, 도면 작성부터 기계/전자적인 부품의 선택 및 로봇 제작까지 하드웨어 부분과, 그 위에 올라가는 운영체제(ROS)와 제어를 위한 컨트롤러에 들어갈 펌웨어, 실제 제어를 담당하는 로직에 이르기까지 로봇의 모든 부분을 직접 만들면서 내부를 들여다볼 수 있게 만든 책이다. 또한, 사용자 경험을 향상시키기 위한 음성 인식이나 합성, 자율 주행 알고리즘, 시각 알고리즘 등에 이르기까지 재미있는 로봇을 만들 때 필요한 여러 가지 기술을 로봇을 직접 만들면서 배울 수 있다. 이 책이 로봇에 관심이 많은 여러 독자들에게 좋은 출발점이 될 수 있기를 바라며, 여러분도 재미있는 로봇의 세계에 깊이 빠져들게 되길 빈다.

한 권으로 읽는 컴퓨터 구조와 프로그래밍

누구나 프로그래머가 될 수 있지만 누구나 좋은 프로그래머가 될 수 있는 것은 아니다. 자동차를 잘 운전하기 위해 꼭 차를 조립할 수 있어야 하는 것은 아니지만, 최상위 클래스 F1 드라이버가 되려면 드라이빙에 필요한 신체나 정신적인 능력은 물론 레이스에 적합하게 차를 설정하기 위한 다양한 공학적 지식도 필요한 것처럼, 좋은 프로그래머가 되기 위해서는 도메인 지식은 물론 컴퓨터의 동작 원리나 컴퓨터공학 전반에 대해 잘 이해할 필요가 있다. 운이 좋게도 나를 포함한 40대 이상 개발자들은 자라나면서 자연스럽게 컴퓨터 산업의 발달 과정에 맞춰 기술의 지평을 넓힐 수 있었지만, 요즘 컴퓨터에 입문하는 사람들은 지식 생산 속도나 프레임워크와 프로그래밍 언어 변화가 너무나 빨라서 실무에 사용하는 프레임워크와 프로그래밍 언어의 변화나 새로운 기술 트렌드를 좇아가기도 힘들다. 하지만 그렇다고 근본적인 컴퓨터공학에 대한 공부를 포기해서는 안 된다. 컴퓨터가 어떻게 작동하고 프로그래밍의 기초 원리가 무엇인지 이해하면, 직접 작성한 프로그램이 잘 작동하지 않을 때 조금 더 쉽게 문제를 해결할 수 있으며 새로운 기술을 배우고 익힐 때도 훨씬 더 수월할 수 있다. 누군가 좋은 스승이 있어서 하드웨어, 소프트웨어 등의 여러 내용을 잘 알려준다면 가장 좋겠지만, 쉽게 기초를 설명해주면서 컴퓨터공학에 대한 지식을 넓혀나갈 토대를 마련해줄 수 있는 책을 통해 컴퓨터 전반을 이해하는 것도 그에 못지않게 좋은 방법이다. 이 책은 저자가 자원봉사로 학생들을 가르치며 다뤘던 내용을 정리한 책이다. 하드웨어의 토대가 되는 기초 전자회로, 게이트로부터 시작해서 메모리, CPU, I/O, 컴퓨터 아키텍처 전반을 설명하고, 그 위에서 소프트웨어를 작성하는 방법을 웹과 C 프로그램을 통해 맛보여주며, 보안, 인공지능, 알고리즘 등의 내용까지 거의 모든 것을 다루는 컴퓨터공학 개론서라 할 수 있다. 이 책을 쭉 훑어보면서 컴퓨터공학에 대해 전체적으로 감을 잡고, 각 분야를 좀 더 자세히 다룬 책이 나 인터넷 강의 등을 찾아보면서 지식을 넓히는 작업을 꾸준히 하면 어느 순간 내공이 쌓이고 좋은 프로그래머가 된 자기 자신을 발견하게 될 것이다. 아무쪼록 컴퓨터에 관심을 가지는 일반 독자나, 컴퓨터공학을 간략히 살펴보고 싶은 개발자 동료들에게 이 책이 도움이 되길 바란다. - 호주 브리즈번에서

함수형 파이썬 프로그래밍

역자가 처음 함수형 프로그래밍 언어인 Standard ML을 접했던 20여 년 전만 해도 함수형 프로그래밍은 (일반 개발자들에게) 낯선 개념이었고, 지원하는 언어도 그리 많지 않았다. 하지만 세월이 지나면서 함수형 프로그래밍 요소를 지원하지 않는 언어를 찾아보기가 어려울 정도로 상황이 바뀌었다. 이제 클로저(람다)나 함수를 반환하는 함수, `map`이나 `fold`, `reduction` 등의 컬렉션 함수나 메소드를 지원하지 않는 언어는 거의 없고, 본격적인 함수형 언어인 스칼라나 클로저, 하스켈 등을 업무에 사용하는 직장이나 개인도 많이 늘어났다. 예를 들어 파이썬에서도 대규모 프로그래밍에서는 객체지향이나 모듈화 등 전통적인 복잡도 관리 기법을 주로 사용하지만, 개별 함수나 식의 계산 등의 소규모 프로그래밍에서는 제네레이터나 이터레이터, 데코레이터와 컬렉션을 사용해 함수적인 접근 방식을 사용하는 경우가 많다. 우리 나라에서도 실용적이면서도 생각을 코드로 표현하고 읽기 쉬운 파이썬을 사용하는 경우가 많이 늘어났다. 전통적인 명령형 코드로 파이썬 애플리케이션을 작성하는 것도 즐거운 일이지만, 함수형 프로그래밍을 좀 더 배우고 그것을 적재적소에 활용할 수 있다면 더 많은 재미와 더 높은 생산성을 함께 즐길 수 있을 것이다. 이 책은 바로 그런 개발자를 위한 것이다. 전통적인 명령형 프로그래밍에 익숙한 개발자들이 함수 프로그래밍을 사용하기 시작할 때 배워야 할 기본적인 코딩 방식과 개념이 몇 가지 있다. 또한, 처음부터 함수 프로그래밍을 지원하기 위해 만들어진 함수 언어와 달리 파이썬에서 함수 프로그래밍을 활용할 경우에 알아둬야 할 주의사항도 몇 가지 있다. 이 책은 함수 프로그래밍이 무엇인지 간략히 설명하고, 여러 함수 프로그래밍 기법을 파이썬으로 어떻게 구현하는지를 이해하기 쉬운 예제와 자세한 설명을 곁들여 소개한다. 그 과정에서 파이썬의 특성상 주의해야 할 여러 가지 사항을 알려줌으로써 프로그래머가 함정에 빠지지 않도록 도와준다. 이 책을 읽고 코드를 작성해 본 독자들은 곧 함수형 프로그래밍의 재미에 빠져들고, 실무에서도 다양한 부분에 함수형 프로그래밍 기법을 사용할 수 있게 될 것이다. 또한, 최근 각광받는 머신 러닝이나 인공지능에서 파이썬이 자주 사용되는 경향을 반영해, 탐색적 자료 분석 예제를 통해 통계를 처리하고 데이터에 숨어있는 경향을 분석하는 작업에 파이썬 함수형 프로그래밍을 어떻게 활용할 수 있는지를 맛보게 해준다. 자바와 C/C++만 강조하던 우리나라 전산 환경에 다양한 언어들이 도입되고, 개발자들이 한 언어의 패러다임에 매몰되지 않고 다양한 패러다임을 접하고 활용하는 것은 매우 바람직한 일이라 생각한다. 새로운 언어나 패러다임을 배우는 것은 그 자체로도 재미있을 뿐 아니라, 기존에 자신이 알고 있던 언어나 패러다임에 대한 이해를 한 단계 높여주며, 개발 시 사용할 수 있는 연장 통에 새로운 연장을 하나 더 추가함으로써 필요한 작업을 더 쉽게 처리하게 해준다. 아무쪼록 이 책이 독자 여러분이 조금 더 나은 프로그래머로 한 단계 올라가는 데 기여할 수 있기를 바란다. - 브리즈번에서 오현석

핵심 코틀린 프로그래밍

번역서 『Kotlin in Action』(에이콘, 2017)을 출간하기 전부터 초중급 개발자를 대상으로 코틀린(Kotlin)을 더 깊이 다루는 책을 써왔다. 하지만 업무와 다른 번역 작업이 겹쳐지며 저술 속도는 더디기만 했다. 게다가 중간중간 코틀린이 업데이트되면서 사용자들의 관심사가 달라짐에 따라 책의 내용을 여러 번 다시 써야만 했다. 그 과정을 겪으면서 당장 사람들이 관심을 갖는 내용을 담은 책이 아니라 언어 자체를 깊이 이해할 수 있도록 돕는 책을 쓰기로 결심했다. 그리고 마침내 코틀린 언어 자체에 대해 이야기하는 책을 낼 수 있게 됐다. 좋은 개발자가 되려면 무엇보다 개발 전반에 필요한 지식을 갖춰야 한다. 특히 프로그래밍 언어에 대한 지식은 모든 개발의 바탕이 되는 중요한 지식이다. 언어를 배울 때는 언어가 제공하는 여러 키워드와 구성 요소를 제대로 이해하고, 이런 요소를 프로그래밍에 어떻게 써먹어야 할지도 알아야 한다. 하지만 더 일반적인 언어론이나 프로그래밍 측면에서 각 요소가 왜 그런 식으로 설계됐는지도 알아야 자신이 사용하는 언어의 발전을 더 잘 이해하고 향후 그 언어가 변하더라도 좀 더 쉽게 변화를 받아들이고 활용할 수 있다. 또 언어론적인 관점을 잘 이해하고 있으면 새 언어를 배울 때도 도움이 된다. 이 책에서는 코틀린 언어를 설명하는 과정에서 프로그래밍 언어에 대한 지식을 쉬운 설명과 예제를 곁들여 함께 전달하고자 노력했다. 이런 설명을 통해 코틀린의 설계를 여러분이 좀 더 쉽고 명확하게 이해하고 충분히 활용하게 되길 바란다. - 브리즈번에서 오현석

Effective Python 2nd 이펙티브 파이썬 : 파이썬 코딩의 기술

이 책은 코딩 기초를 떼고 파이썬 라이브러리의 사용법을 얼추 익힌, 초급에서 중급으로 발전하고 싶은 프로그래머가 꼭 읽어야 할 책이다. 이 책에서 설명하는 기본기를 확실히 체득하고 연습한 다음, 실전에서 다양한 코드를 읽고 작성해보며, 객체지향이나 함수형 프로그래밍, 비동기 프로그래밍 등과 같은 프로그래밍 패러다임을 다룬 책이나 인터넷 문서를 살펴보면서 실력을 쌓으면, 어디서 누구와 작업을 해도 신뢰할 만한 프로그래머라는 평가를 받으면서 일할 수 있을 것이다. 이 책을 읽은 독자들이 더 나은 프로그래머로 발전하고 파이썬 프로그래밍의 재미를 더 많이 느낄 수 있길 빈다.

Kotlin in Action

학교 특히 대학원에서는 컴파일러와 함수형 프로그래밍을 주로 공부했지만 회사에 들어온 후 자바와 C, C++ 개발을 10여년 진행해 왔다. 호주로 오고 나서 스칼라를 접했고 함수형 프로그래밍이라는 말이 여러 프로그래머 사이에 회자되는 모습을 보면서 격세지감을 느끼기 시작했다. 스칼라를 공부하면서 90년대 초중반 학교에서 공부했던 내용을 JVM 환경에 잘 버무린 스칼라 언어 특징을 지켜보며 스칼라를 설계한 마틴 오더스키에게 경탄했다. 스칼라가 주는 간결한 코드의 매력에 푹 빠져 계속 공부를 하면서 고차 함수를 넘어서는 타입 시스템이나 고계 타입(higher-kinded type) 등을 스칼라로 구현한 스칼라 제드나 CAT 등의 라이브러리도 살펴봤다. 타입을 활용한 강력한 추상화는 하스켈이나 스칼라 등 하드코어 함수형 프로그래밍 언어의 마약과도 같은 장점이긴 하지만, 실무에서 그런 기능으로 버무려 둔 코드가 얼마나 유지 보수성이 있을까 하는 의문이 머릿속을 떠나지 않았다. 기능을 추가하고 더 고차원적인 추상화를 가능케 하기보다는 오히려 기능을 제약하고 추상화 방법을 제한하되 초보부터 고수까지 다 이해하기 쉽고 유지보수하기 쉬운 언어를 만들어야 하는 게 아닐까? 2014년 애플이 스위프트를 발표하고, 비슷한 때 코틀린이라는 언어가 우연히 시야에 들어왔다. 두 언어는 각각 오브젝티브 C와 자바라는 언어를 개선하면서도 스칼라처럼 너무 큰 변화를 추구하지는 않는 실용적인 접근 방식을 택한 언어라는 점과, 널 가능성 처리와 람다 구문 등에서 비슷한 점이 많았다. 어쩌면 스칼라가 택한 접근 방법보다는 스위프트나 코틀린이 택한 접근 방법이 현실적으로 적용하기엔 더 쉽지 않을까 하는 생각으로 관심을 갖고 코틀린을 지켜봤다. 특히 안드로이드라는 환경이 중요하고 개발자들이 따로 공부에 투자할 시간이 절대적으로 부족한 한국의 현실에서는 코틀린이 더욱 쓸모가 있을 것 같았다. 그리고 코틀린이 2017년 안드로이드 공식 언어가 되면서 한국에서도 코틀린에 대한 관심이 폭발적으로 늘어나는 모습을 볼 수 있었다. 언어적으로 볼 때 코틀린은 그다지 새로운 언어가 아니다. 코틀린이 제공하는 여러 기능을 살펴보면 정말 자바를 개선하기 위해 많은 부분에서 고민을 했다는 느낌이 많이 든다. 학술적으로 가치가 있거나 소위 힙스터 프로그래머들의 관심을 끌 만한 기능은 거의 없다. 함수를 표현하는 인터페이스로 데이터 타입이나 함수를 표현해서 객체지향과 통합하는 방법 등은 이제 다양한 언어에서 채용하고 있는 잘 알려진 기법이다. 모나드를 쉽게 활용할 수 있게 해주는 for 컴프리핸션이나 패턴 매치, 고계 타입(higher-kindedtype) 등 함수형 프로그래밍 언어에서는 당연히 제공하는 기능도 아직 제공하지 않는다. 하지만 ‘방망이 깎던 노인’이 방망이를 깎던 것처럼 여러 해 동안 실제 IDE 개발에 코틀린을 사용하면서 얻은 피드백을 바탕으로 이해하기 쉽고 개발자 손에 착 달라붙으면서도 기존 자바 소스와 함께 사용하기 편리한 언어를 만들어냈다. 코틀린이 자바에 추가한 여러 기능은 커다란 추가 런타임 라이브러리가 필요할 정도로 양이 많지는 않지만, 자바의 가려움을 긁어줄 만한 내용들이 들어있다. 그러면서도 너무 복잡하거나 너무 어렵지는 않아 다양한 수준의 개발자가 함께 참여해야 하는 실전 프로젝트에서 사용하기에 딱 좋다. 게다가 기존 자바 라이브러리와의 호환성을 중시하면서 개발해 왔기 때문에 상대적으로 JVM에서 기존 자바 에코시스템을 활용하기 쉽다는 장점도 있다. 어쩌면 코틀린은 최신 언어라고 부르기엔 너무 구식 특성만을 가진 언어일지도 모른다. 그러나 대규모 개발과 유지 보수성, 기존 자바 시스템과의 호환성 등을 고려해본다면 가장 강력한 자바 대체재라고 볼 수 있다. 이 책은 코틀린 언어를 개발하는 젠브레인 개발자가 직접 쓴 책이다. 물론 이 책은 코틀린에 대해 자세히 설명한다. 그런데 코틀린의 특성을 설명할 때마다 그 특성을 자바 쪽에서는 어떻게 사용해야 하고, 이때 어떤 주의 사항이 있는지 설명한다는 점이 특이하다. 이는 코틀린을 설계한 사람들의 머릿속에 자바 호환성이 아주 중요하게 자리 잡고 있음을 보여준다. 한편 이 책은 코틀린 기능들이 서로 어떻게 연관되고 이를 어떻게 활용할 수 있는지 설명해준다. 특히 확장 함수와 수신 객체 지정 람다, 그리고 그런 기능을 DSL에 적용하는 모습을 살펴보면 한편의 아름다운 시를 볼 때처럼 아름다움을 느낄 수 있다. 여러분도 이 책을 읽고 나면 비슷한 느낌을 받을 수 있을 것이다. 아무쪼록 이 책을 통해 코틀린이 여러분 손에 착 달라붙는 제대로 깎은 방망이처럼 작업할 때 편하게 사용할 수 있는 도구로 자리 잡길 바란다. 그리고 코틀린을 통해 늘어난 생산성만큼 독자 여러분이 좀 더 여유 있는 저녁이 있는 삶을 누릴 수 있게 되길 바란다. 브리즈번에서

Programming in Scala (Second Edition) 한국어판

내가 대학생이던 1995년, 컴파일러 과목을 들으면서 Standard ML이란 언어를 사용한 프로젝트를 진행했다. 당시 나를 비롯한 학생들은 재귀 호출이나 클로저에 익숙치 못해 발생하는 어려움이나 느린 속도에 대한 불만이 많이 있었다. 게다가, 졸업 후 함수언어를 실무에서 사용할 일은 거의 없었다. 함수 언어는 프로그래밍 언어 실험실에서나 쓰는 언어인 것 같았다. 20여년이 지난 지금 상황은 많이 달라졌다. 루비, 파이썬, 자바스크립트 등의 언어가 실무에서 살아남기 위해 하나쯤 배워둬야 하는 언어로 자리잡았다. 또한, 구글의 고(Go)나 애플의 스위프트(Swift), 페이스북의 핵(Hack), 최근 표준이 개정된 C++11이나 자바 8 등의 언어와 앞에서 언급했던 여러 다이나믹 언어등을 통해 알 수 있는 최근의 대세는 함수형 언어 기능의 도입이라 할 수 있다. 성능에 대한 요구나 메모리 사용에 대한 제약이 심한 경우가 아니라면 더 이상 언어의 속도에 대한 불만을 이야기하는 사람은 거의 없고, 클로저는 당연히 언어가 지원해야 하는 기능이며, 고차 함수나 패턴매칭, 리스트 내장(list comprehension) 등도 더 이상 낯선 기능이 아니다. 이런 변화가 생긴 이유가 무엇일까? 나는 이를 프로그램이 복잡해지면서, 컴퓨터 구조와 프로그램 언어 사이의 임피던스 미스매치(impedance mismatch)를 줄이는 것보다도 인간의 사고와 프로그램 언어 사이의 임피던스 미스매치를 줄이는 것이 더 중요해지기 시작했기 때문이라고 말하고 싶다. 함수 언어를 사용하면 타입 추론이 주는 간결한 표현과 타입 오류 예방 능력의 도움을 받을 수 있고, 패턴매칭을 활용하면 다양한 여러 경우를 중복 없고 누락 없이(MECE, Mutually Exclusive Collectively Exhaustive) 간편하게 기술할 수 있다. 또한 컬렉션과 고차함수, 클로저, 다양한 연산자를 활용하면 함수 언어를 통해 도메인 특화 언어(DSL)를 정의할 수 있고, 이렇게 만든 DSL을 기존 시스템이나 다른 모듈들과 매끄럽게 통합해 활용할 수 있다. 함수형으로 잘 짠 프로그램은 문제 해결을 위해 컴퓨터가 밟아 나가야 하는 절차를 하나하나 지시하기보다는, 문제에 대한 해법을 재귀와 패턴매칭을 사용해 탑다운으로 정의하기 때문에 더 이해하기 쉽다. 스칼라는 자바와 JVM이라는 든든한 기반 위에서 함수 프로그래밍뿐 아니라 객체지향과 절차적 프로그래밍을 잘 버무린 언어다. 스칼라를 배우면서 여러분은 함수형 프로그래밍의 기초를 잡을 수 있다. 또한, 스칼라 언어 개발자들이 기존 언어 패러다임과 함수언어를 조합하기 위해 고민 끝에 만들어낸 아이디어들을 배워가면서 함수형 프로그래밍뿐 아니라 절차적 프로그래밍이나 객체지향 프로그래밍을 할 때도 더 나은 프로그래머가 될 수 있다. 이 책은 스칼라를 만든 오더스키가 직접 쓴 책이고, 기초부터 차근차근 스칼라 언어를 잘 설명해 준다. 앞에서부터 하나하나 정독해 나가면 스칼라 언어를 배우는 것은 물론, 언어와 관계 없이 프로그래밍에 활용할 수 있는 여러 아이디어도 얻을 수 있다. 아무쪼록 이 책이 독자 여러분이 탁월한 프로그래머로 발전할 수 있는 데 도움이 되었으면 한다.

Programming in Scala 3/e

『Programming in Scala (Second Edition) 한국어판』(에이콘, 2014)을 번역했던 3~4년 전만 해도 우리 나라에서 스칼라에 대한 관심은 그리 크지 않았다. 하지만 『Programming in Scala (Second Edition) 한국어판』이 나오는 것과 거의 비슷한 시점에 아파치 스파크가 인기를 끌고, 기술 창업이 늘어남에 따라 자바 등의 언어보다는 사용하기 편리한 파이썬이나 스칼라 등의 언어에 대한 관심이 급격히 늘어났다. 그로 인해 스칼라 커뮤니티에 유입되는 개발자도 늘고, 각종 스터디나 세미나에서도 스칼라가 예전에 비해 더 많은 관심을 받게 됐다. 스칼라 버전이 2.12로 높아짐에 따라 기존 버전에서 사용하던 일부 기능이 없어지고, 일부는 용어나 용법이 바뀌었으며, 새로 도입된 기능도 몇 가지 있다. 한국어나 영어 같은 일상 언어가 변해가는 것처럼, 프로그래밍 언어에서도 사용 환경이나 사용자의 요구에 따라 자연스럽게 그런 변화가 채택된다. 이것은 언어와 그 언어를 사용하는 커뮤니티가 건강하고 활력있게 존재한다는 증거라 할 수 있다. 그로 인해 『Programming in Scala (Second Edition) 한국어판』에 들어있지 않은 최신 스칼라 언어 기능에 대한 문의를 이메일이나 한국 스칼라 사용자 모임인 라스칼라 코딩단 슬랙 채널(lascala.slack.com)을 통해 받는 경우가 자주 있었다. 그때마다 최대한 도움을 주려고 노력했지만, 『Programming in Scala (Second Edition) 한국어판』의 원서인 『Programming in Scala, Second Edition』 개정판이 빨리 나왔으면 하는 바람이 있었다. 다행히 2016년 4월 개정판인 『Programming in Scala, Third Edition』이 나왔고, 에이콘 권성준 사장님과 황영주 상무님께서 발 빠르게 움직여주신 덕분에 2판 역자들이 그대로 3판 개정판 번역을 진행하게 된 것은 역자들 모두에게 기쁜 일이었다. 최대한 서두른다고 노력했으나 여러 가지 이유로 2016년에 출간하지 못하고 1년의 시간이 지나버린 것에 대해 기다려온 독자 여러분께 미안할 따름이다. 2판 역자 서문에서도 이야기했지만 다양한 패러다임의 언어를 사용하면 절차적 프로그래밍이나 객체지향 프로그래밍을 진행할 때도 더 나은 프로그래머가 될 수 있다. 이 책을 통해 독자 여러분이 스칼라를 잘 배우고, 배운 것을 스칼라와 함수형 프로그래밍에서 잘 활용하며, 더 나아가 어떤 프로그래밍 언어를 사용하더라도 적재적소에 알맞은 개념을 활용해 읽기 쉽고 유지 보수하기 편한 코드를 만들어내는 프로그래머로 자리잡을 수 있기를 바란다. - 2017년 4월 호주 브리즈번에서

가나다별 l l l l l l l l l l l l l l 기타
국내문학상수상자
국내어린이문학상수상자
해외문학상수상자
해외어린이문학상수상자