[이 책의 구성]이 책은 많은 레시피로 구성되어 있고 각 레시피는 독립적이지만 대부분 다른 레시피와 연관되어 있다. 책을 읽는 순서는 독자가 선택해도 좋은데, 각 장에서 다루는 내용은 다음과 같다.- 1장 ‘코틀린 설치와 실행’에서는 REPL 사용 방법, 메이븐(Maven)과 그레이들(Gradle) 같은 빌드 도구를 사용하는 방법, 그랄(Graal)에 포함된 네이티브 이미지 생성기 사용법을 비롯해 코틀린을 설치하고 실행하는 기본 과정을 다룬다.- 2장 ‘코틀린 기초’에서는 비트 단위 시프트 연산자 또는 Pair 클래스의 to 확장 함수 사용법을 비롯한 난해한 문제들을 다루기에 앞서, 널 허용(nullable) 타입, 연산자 중복, 그리고 타입 간 변환 같은 코틀린의 기본 기능 일부를 다룬다.- 3장 ‘코틀린 객체 지향 프로그래밍’에서는 다른 언어를 사용하는 개발자가 코틀린을 접하면 아마 놀라거나 색다르다고 생각할 수 있는 코틀린의 객체 지향 기능에 집중한다. 이 장에서는 const 키워드 사용 방법과 지원 속성(Backing Property), 지연 초기화(Lazy initialization), 그리고 기존 자바 개발자라면 혼동스러워 할 것이 분명한 무시무시한 Nothing 클래스를 코틀린이 어떻게 다루는지 설명한다.- 4장 ‘함수형 프로그래밍’에는 해당 기능에 대한 설명이 필요한 함수형 기능을 사용하는 몇 가지 레시피만 들어 있다. 함수형 프로그래밍 개념은 특히 컬렉션, 시퀀스, 코루틴(coroutine)을 설명할 때를 비롯해 이 책 곳곳에서 다루지만, 특이하거나 특별히 흥미롭다고 여겨질 만한 몇 가지 함수형 기법을 이 장에서 설명한다.- 5장 ‘컬렉션’에서는 배열과 컬렉션, 컬렉션 분해, 여러 속성을 사용한 정렬, 컬렉션에서 윈도우 사용, 수열 생성과 같이 사용법이 직관적이지 않은 메소드를 주로 다룬다.- 6장 ‘시퀀스’에서는 자바의 스트림(stream) 사용 방식과 비슷한 코틀린이 지연 계산법으로 시퀀스 항목을 다루는 방법을 보여준다. 이 장의 레시피에서는 시퀀스 생성, 시퀀스에서 yield하는 방법, 무한한 시퀀스 사용법을 다룬다.- 7장 ‘영역 함수’에서는 코틀린의 또 하나의 고유한 주제인 객체 컨텍스트 안에서 코드 블록을 실행하는 함수를 다룬다. 코틀린의 let, apply, also 같은 함수들은 매우 유용하다. 이 장에서는 이러한 함수의 사용 방법과 이유를 자세하게 설명한다.- 8장 ‘코틀린 대리자’에서는 대리자(delegate) 구현 방법 같은 코틀린의 편리한 기능에 대해 설명한다. 대리자는 상속보다는 합성을 사용하며 lazy, observable, vetoable 같은 몇몇의 대리자가 코틀린 기본 라이브러리에 포함되어 있다.- 9장 ‘테스트’에서는 특히 Junit 5에 초점을 둔 테스트라는 중요한 주제를 다룬다. 현재 버전의 Junit은 코틀린 일반 애플리케이션과 코틀린 스프링 프레임워크 애플리케이션에서 모두 잘 동작하도록 디자인되어 있다. 이 장에서는 테스트 작성과 실행을 손쉽게 만들어주는 몇 가지 접근 방식에 대해 다룬다.- 10장 ‘입력/출력’에서는 자원 관리와 관련된 구체적인 2가지 레시피를 다룬다. 이 장에서는 여러 컨텍스트에서 광범위하게 응용할 수 있는 use 함수로 파일 입출력을 처리한다.- 11장 ‘그 밖의 코틀린 기능’에서는 어느 다른 범주에도 쉽게 포함할 수 없는 주제를 다룬다. 현재 코틀린 버전을 얻는 방법, when 문이 값을 리턴하지 않는 경우에도 when 문을 강제하는 방법, 정규표현식과 함께 replace 함수를 사용하는 방법과 같은 주제를 다룬다. 더불어 TODO 함수와 Random 클래스도 설명한다. 또한 코틀린 함수를 자바 예외 처리와 통합하는 방법도 배운다.- 12장 ‘스프링 프레임워크’에서는 코틀린에 매우 우호적인 스프링 부트와 함께 스프링 프레임워크를 다룬다. 스프링이 관리하는 빈(bean)으로 코틀린 클래스를 사용하는 방법, JPA 퍼시스턴스를 구현하는 방법, 필요시 의존성을 주입하는 방법을 보여주는 몇 가지 레시피가 이 장에 포함되어 있다.- 13장 ‘코루틴과 구조적 동시성’에서는 코틀린의 가장 인기 있는 기능 중 하나이자, 코틀린 언어에서 동시 프로그래밍과 병렬 프로그래밍의 기초인 코루틴에 대한 주제를 다룬다. 이 장의 레시피에서는 빌더(builder)와 디스패처(dispatcher) 같은 기초 지식, 코루틴을 취소하고 디버깅하는 방법, 그리고 코루틴을 사용자 정의 자바 스레드 풀에서 실행하는 방법을 다룬다.[이 책의 독자 대상]코틀린을 처음 배우려는데 이왕이면 좀 더 실무적으로 익히고 싶은 입문자와, 입문은 했으나 숙련된 고급 기법을 알고 싶은 코틀린 사용자. 특히 자바나 기타 JVM 기반 언어에서 객체 지향 프로그래밍의 기초를 알고 있는 개발자에겐 더 도움이 된다. [지은이의 글]『코틀린 쿡북』에 발을 내딛은 여러분을 환영한다. 이 책의 기본 목적은 단지 코틀린 문법과 의미를 가르치는 것뿐만 아니라 코틀린의 특정 기능을 언제 그리고 왜 사용해야 하는지를 보여주는 것이다. 이 목표를 위해 반드시 코틀린의 모든 문법과 라이브러리를 상세하게 다뤄야 할 필요는 없다. 하지만 기본 원리에 대한 많은 레시피가 추가되어 코틀린 초보자조차도 쉽게 이해할 수 있는 책이 완성되었다.코틀린 커뮤니티가 멀티플랫폼multiplatform, 네이티브native, 자바스크립트 개발을 수용하도록 장려하는 젯브레인JetBrains 사의 강력한 움직임이 일어나고 있다. 하지만 코틀린을 사용한 멀티플랫폼, 네이티브, 자바스크립트 개발이 베타 상태이거나 도입률이 매우 낮기 때문에, 결국 나는 멀티플랫폼, 네이티브, 자바스크립트는 레시피에 포함하지 않기로 결정했다. 결과적으로 이 책은 오로지 JVM을 위한 코틀린에 집중한다.깃허브 리포지토리 https://github.com/kousen/kotlin-cookbook에서 이 책의 모든 코드를 찾을 수 있다. 코드는 (코틀린 DSL로 작성된 빌드 파일은 물론이고) 그레이들 래퍼Gradle wrapper를 포함하고 있으며 모든 테스트를 통과했다.이 책의 모든 코드 예제는 손쉽게 구할 수 있는 장기지원Long Term Support 버전의 자바, 즉 자바 8과 자바 11 모두에서 컴파일되고 테스트되었다. 비록 자바 8은 기술적으로 사용 기한이 만료됐지만, 여전히 코드 예제를 적용해 볼 수 있을 만큼 그런대로 산업 전반에 퍼져 있다. 이 책을 저술할 때 코틀린의 최신 버전은 1.3.50이었으며 1.3.60이 진행 중이었다. 모든 코드는 이 두 버전 모두에서 동작하고 깃허브 리포지토리는 최신 버전의 코틀린으로 꾸준히 업데이트될 것이다.이 책과 같은 레시피 서적은 코틀린 기술이나 어법 사용보다는 가능한 한 코틀린에 대한 모든 것을 담고 있는 자료가 되는 데 집중한다. 이 때문에 이 책의 모든 레시피에서 코틀린의 기능을 완전히 이용할 수 있다는 장점도 있지만 사용된 코틀린 기능의 기초 설명에 많은 시간을 들이지 못한다는 단점도 있다. 여러분이 컬렉션 생성 방법이나 배열 사용법, 클래스 디자인에 대해 능숙하지 않다 해도 기본 용법에 대한 요약이 각 장에 포함되어 있기 때문에 걱정할 필요는 없다. 또한 이 책은 코틀린 라이브러리에서 기능 구현으로 넘어간다. 이를 통해 개발자가 실제로 언어를 사용하는 방법을 보여주고 또 그렇게 구현한 이유를 알려준다.[옮긴이의 글]프로그래머라면 새로운 프로그래밍 언어에 대해 항상 관심이 있을 것입니다. 저 또한 새로운 프로그래밍 언어를 경험해보길 좋아해서 2013년 즈음 젯브레인스JetBrains 사가 프로덕션에 코틀린을 사용한다는 말을 듣고 코틀린을 처음 접해봤습니다. 당시 코틀린 공식 튜토리얼을 따라 해보았으나 그루비나 스칼라에 비해서도 아무런 특색이 없어 매우 실망하고 세일즈를 위한 언어라 치부하고 코틀린을 두 번 다시 쳐다도 보지 않았으며 그 후로 코틀린을 다시 보게 될 일은 없을 줄 알았습니다.하지만, 2017년 구글 I/O에서 안드로이드 팀이 안드로이드 공식 개발 언어로 코틀린을 지정함으로써 코틀린에 대한 세간의 관심은 최고조에 이르렀습니다. 더불어, 평소 존경하는 에릭 마이어가 2017년 한 컨퍼런스에서 코틀린을 좋아한다고 남긴 말에도 단순히 립서비스로 생각하고 넘겼으나, 에릭 마이어는 이후에도 코틀린에 대해 꾸준한 애정을 보이며 코틀린 코드와 의견을 트위터에 올렸으며, 그렇게 저의 무관심은 조금씩 관심으로 바뀌어 갔습니다.이후 2018년에 살펴본 코틀린 1.2는 정말 많은 발전이 있었으며 자바와의 호환성 역시 훌륭해서, 앞으로 JVM 기반으로 프로젝트를 한다면 이제 다신 자바를 선택하지는 않을 것이라는 생각이 들게 해줬습니다. 오늘날 코틀린은 모바일 개발에만 머무르지 않고 서버 사이드, 자바스크립트, 네이티브, 데이터 분석과 머신러닝 등을 아우르는 개발의 모든 분야에 진입하려고 노력 중이며 코틀린 공식 문서에서도 해당 분야에 대한 내용을 확인할 수 있습니다.서버 사이드 코틀린을 좀 더 이야기해볼까요? 세상에서 가장 인기 있는 프레임워크인 스프링도 5.0부터 스프링 공식 지원 언어로 코틀린을 지정했으며 JVM에서 가장 인기 있는 빌드 자동화 도구인 그레이들Gradle도 5.0부터 코틀린 DSL을 지원하기 시작했습니다. 이처럼 코틀린은 꾸준히 자신의 영역을 넓혀가고 있으며 앞으로가 더욱 촉망되는 언어라고 생각합니다.비록 이 책에서는 코틀린의 다양한 활용 분야 중 서버 사이드 코틀린을 집중해서 다루지만 해당 분야로 나아갈 수 있는 기초 지식을 익히기에 분명히 좋은 책입니다. 기존 자바 개발자에게는 꽤 많이 출간된 여러 레퍼런스 서적에 비해 각자가 필요한 부분을 찾아 빠르게 학습할 수 있습니다. 또한, 코틀린 입문자도 책을 따라 하며 어렵지 않게 코틀린 컴파일러를 설치하고 한 단계씩 더 어려운 주제로 학습해 나아갈 수 있게 구성되어 있습니다.저는 현재 근무 중인 회사에서 코틀린 스프링을 사용 중인데, 처음 프로젝트를 구성할 때 꽤 애를 먹었습니다. 이 책에는 ‘스프링 프로젝트를 코틀린으로 구성하는 방법’을 설명하는 레시피들도 담겨 있는데, 이 책 번역을 좀 더 빨리 했더라면 프로젝트를 구성하면서 겪은 고생을 피할 수 있었을 터라 매우 아쉬웠습니다.나름대로 열심히 노력했지만 부족한 부분이 있을 것입니다. 그럼에도 독자분들이 번역 때문에 고심하지 않고 편하게 읽으면서 코틀린을 익히실 수 있기를 바라봅니다.