◈ 이 책에서 다루는 내용 ◈
◆ 코틀린 언어를 이용한 모든 고전 디자인 패턴 구현 방법
◆ 반응형 패턴과 동시성 패턴을 적용한 어플리케이션의 확장성 개선 방법
◆ 코틀린 언어의 모범 사례와 새로운 기능
◆ 함수형 프로그래밍의 핵심 원칙과 코틀린에서 해당 원칙 적용 방법
◆ 관용적인 코틀린 코드와 피해야 할 코틀린 코드
◆ 코틀린의 언어적 힘을 이용한 안정적인 동시성 시스템 설계 방법
◆ 코틀린과 Ktor 프레임워크를 이용한 마이크로서비스 작성 실습 방법
◈ 이 책의 대상 독자 ◈
안정적이고 확장성 있으며 유지 보수가 용이한 애플리케이션을 개발하기 위해 코틀린에서 디자인 패턴을 익히고자 하는 개발자를 대상으로 하는 책이다. 제대로 이해하려면 프로그래밍에 관한 사전 지식이 꼭 필요하다. 디자인 패턴에 관한 지식은 유용하지만 필수는 아니다.
◈ 이 책의 구성 ◈
1장, ‘코틀린 시작하기’에서는 코틀린의 기본적인 문법을 다루고 디자인 패턴의 쓸모와 코틀린에서 디자인 패턴을 활용해야 하는 이유가 무엇인지를 논한다. 1장의 목표는 코틀린의 모든 기능을 설명하는 것이 아니라 코틀린의 기본적인 개념과 관용구에 익숙해지도록 하는 것이다. 코틀린의 더 많은 기능은 이후의 장들에서 관련된 디자인 패턴을 다루면서 하나씩 설명할 것이다.
2장, ‘생성 패턴 사용하기’에서는 고전적인 생성 패턴을 모두 설명한다. 생성 패턴은 객체를 생성하는 방법 및 시기와 관련된다. 생성 패턴에 숙달되면 객체의 생애 주기를 더욱 잘 관리할 수 있으며 유지 보수하기 쉬운 코드를 작성할 수 있다.
3장, ‘구조 패턴 이해하기’에서는 유연하며 확장성 있는 객체 간 계층 구조를 만드는 방법에 초점을 맞춘다. 데코레이터 패턴과 어댑터 패턴 등을 다룬다.
4장, ‘동작 패턴과 친해지기’에서는 코틀린을 사용한 동작 패턴을 설명한다. 동작 패턴은 객체가 다른 객체와 상호작용하는 방법, 그리고 동적으로 객체의 동작을 변경하는 방법을 다룬다. 효율적이며 결합도가 낮은 객체 간 통신을 구현하는 방법을 살펴본다.
5장, ‘함수형 프로그래밍 소개 함수형 프로그래밍의 기본 원칙을 설명하고 이 원칙이 코틀린 언어와 어떻게 어울리는지 살펴본다. 불변성과 고차 함수, 값으로서의 함수 등의 주제를 다룰 것이다.
6장, ‘스레드와 코루틴’에서는 코틀린에서 스레드를 새로 띄우는 방법을 자세히 알아보고 스레드보다 코루틴이 확장성 측면에서 더 나은 이유를 설명한다. 코틀린 컴파일러가 코루틴을 다루는 방법, 그리고 코루틴 시야 및 분배자와의 관계를 살핀다.
7장, ‘데이터 흐름 제어 집합’에서는 자료 구조에 적용할 수 있는 고차 함수를 다룬다. 순서열(sequence), 채널(channel), 흐름(flow)을 사용해 동시성·반응형 코드에서 고차 함수를 적용하는 방법을 살펴볼 것이다.
8장, ‘동시성을 위한 설계’에서는 동시성 디자인 패턴이 어떻게 수많은 작업을 한 번에 관리하고 작업의 생명 주기를 구조화할 수 있도록 해주는지 설명한다. 동시성 디자인 패턴을 잘 사용하면 자원 유출이나 데드락과 같은 문제를 방지할 수 있다.
9장, ‘관용구와 안티패턴’에서는 코틀린에서 권장되는 모범 코드와 사용해서는 안 될 코드를 논한다. 관용적으로 사용되는 모범적 코틀린 코드가 어떻게 생겼는지, 또 피해야 할 코드는 어떻게 생겼는지 배울 수 있을 것이다. 9장을 읽고 나면 가독성과 유지 보수성이 더욱 높은 코틀린 코드를 작성할 수 있을 뿐 아니라 흔히 저지르는 실수도 피할 수 있을 것이다.
10장, ‘Ktor를 사용한 동시성 마이크로서비스’에서는 지금까지 배운 지식을 활용해 코틀린으로 마이크로서비스를 개발한다. 이를 위해 젯브레인스에서 개발한 Ktor 프레임워크를 사용할 것이다.
11장, ‘Vert.x를 활용한 반응형 마이크로서비스’에서는 코틀린에서 마이크로서비스를 만들기 위한 또 다른 방법으로 반응형 디자인 패턴에 기반을 둔 Vert.X 프레임워크를 소개한다. 실무에서 실제로 사용되는 코드 예제를 살펴보며 동시성 및 반응형 패턴의 장단점을 논하고, 언제 각 패턴을 사용해야 하는지 알아볼 것이다.
◈ 옮긴이의 말 ◈
코틀린은 매력적인 언어입니다. 현대적인 언어의 특징을 잘 갖추고 있으면서도 사용하기 까다롭지 않습니다. 자바의 오래된 문법으로부터 독립했지만 여전히 자바 생태계를 누릴 수 있습니다. 젯브레인스 사에서 개발한 언어인 만큼 IDE 지원이 강력하고, 안드로이드의 기본 개발 언어로 채택돼 커뮤니티 역시 두텁습니다. 최근에는 상당한 수준의 멀티플랫폼 개발까지 지원하면서 미래가 더 기대되는 언어입니다.
코틀린의 이러한 매력을 충분히 느끼려면 코틀린을 ‘코틀린답게’ 사용해야 합니다. 그러나 코틀린의 문법만 공부해서는 무엇이 코틀린다운 코드인지 알기 어렵습니다. 코틀린은 기본적으로 모든 프로그래밍 패러다임을 지원하는 다중 패러다임 언어이기 때문입니다. 즉 코틀린으로도 얼마든지 자바 스타일의 코드를 작성할 수 있습니다.
그래서 실제 문제를 해결할 수 있는 코드를 살펴보는 것이 중요합니다. 〈코틀린 디자인 패턴 2/e〉이 다양한 수준의 수많은 예제로 가득한 것도 그런 이유입니다. 저자는 자주 등장하는 문제에 대한 전형적인 해결책인 디자인 패턴을 가장 코틀린다운 코드로 구현하여 보여줍니다. 어떤 패턴은 코틀린의 문법 요소 덕분에 훨씬 간결해지고, 어떤 패턴은 구현할 때 코틀린의 기능에 크게 의존합니다. 이러한 예제를 통해 독자는 코틀린의 모범 사례를 자연스럽게 체득할 수 있을 것입니다.
이 책의 놀라운 점은 GoF의 고전 디자인 패턴에 그치지 않고 반응형 패턴과 동시성 패턴까지 자세히 다룬다는 점입니다. 프론트엔드 개발에서 반응형 프로그래밍은 이제 표준처럼 자리잡았고, 많은 데이터를 효과적으로 다루기 위해서 동시성 프로그래밍은 필수적입니다. 그러나 이들을 디자인 패턴으로 인식하고 예제 코드와 함께 일목요연하게 정리한 자료를 찾기란 여전히 쉽지 않습니다. 그렇기에 코틀린 개발자뿐만 아니라 현대적인 어플리케이션을 개발하는 모든 이들에게 이 책은 좋은 안내서가 돼줄 것입니다.
책의 마지막 두 장에서는 Ktor와 Vert.x 프레임워크를 이용해서 실제 마이크로서비스를 개발하는 예제를 보여줍니다. 비록 간단한 서비스지만 코틀린이 웹 서버 개발에 사용하기에도 충분히 매력적인 언어라는 것을 엿볼 수 있습니다. 또한 앞서 설명한 여러 디자인 패턴이 실제 프레임워크를 활용할 때 어떻게 접목되는지 확인할 수 있기에, 예제를 그대로 따라 구현하는 것만으로도 책의 내용을 더 깊이 이해할 수 있게 될 것입니다.
이 책을 통해 코틀린이라는 멋진 언어를 처음 배우려는 이들은 그 매력을 십분 느끼고, 현대적인 언어에 디자인 패턴을 접목해 확장성 있는 소프트웨어를 개발하고자 하는 이들은 필요한 모범 사례를 습득할 수 있기를 바랍니다. 마지막으로 이 책이 한국의 코틀린 커뮤니티에 조금이나마 보탬이 되기를 기대합니다.