Post

Advanced Kotlin with exercises Review

도서출판 ’인사이트‘의 도서 지원을 받아 작성한 리뷰입니다

Image

이 책은 기존에 리뷰를 했던 책 시리즈의 고급편이다.

책에 에 대한 이야기를 하기 전에 일단 이 책을 읽는 내 상황에 대해 먼저 설명이 필요하겠다. 사실 매번 이야기 하기는 하는데 이번엔 특히 중요하다.

난 서버 프로그래밍을 주로 하며, 가장 메이저하다 할 수 있는 Web 기반의 Api Server 프로젝트 외에, 스트리밍, 게임, 데이터 스토리지 등의 다양한 프로젝트를 해 왔다.
Native 언어 (주로 C++)와 C# 으로는 서버라는 단어에서 생각 나는 거의 모든 형태의 프로젝트를 해 봤지만, Kotlin 으로는 Web/gRPC 기반의 Api 서버 외에는 그다지 다양한 프로젝트를 한 경험이 없다.

그런 상황이다 보니 C++ 과 C# 으로는 Framework 라고 할 수 있을만한 코드를 많이 작성 했지만, Kotlin 으로는 그런적이 없고, 이미 잘 되어 있는 Framework 를 가져 다 쓴 적이 대부분이다. 그래서 C++ / C# 과 는 다르게 Kotlin 의 기능을 아주 깊게 이해하고 있는 편은 아니다.

왜 궂이 이런 이야기를 했냐면, 이 책은 일반적으로 나오는 기초 수준을 간신히 벗어난 고급서 와는 좀 다르고, 일반적으로 갖춰진 환경에서 개발 할 경우에는 거의 볼 일이 없는 기법들을 다룬다.
프로그래밍 언어에 대한 이해가 깊지 않으면 이 책을 읽기가 쉽지 않을 것이다, 특히 고급 기능은 표준화된 번역어가 없어 한국어로의 변환이 난해한데, 그것이 책을 읽는것에 시간을 좀 더 걸리게 한다.
만약 이 리뷰를 보고 책을 사려는 당신이 아직 초보 수준이거나, 현재의 나처럼 Json 상하차 업무만 하고 있는것에 만족 하고 있다면 이 책의 내용은 도움이 안 될거다.
하지만 당신이 대규모의 SDK 를 외부에 제공해야 하는 입장이라거나, 특수한 목적의 Framework 를 설계/구현 하여 사용해야 하는 입장이라면 이 책이 큰 도움이 될 것이다.
사용하기 편한 Framework 를 만들어 내기 위해 필요한 Kotlin 의 각종 기능을 친절히 설명 하고 있는 진짜 고급 기능을 다루고 있는 책이다.

아 그리고 아래의 얘기는 전부 Kotlin/JVM 라고 가정하고 대상으로 하겠다. Kotlin/Native 나 Kotlin/JS 는 내가 지식이 거의 없고, 앞으로도 사용 할 생각이 없는지라 공부를 하지 않아 감히 리뷰를 남길 정도의 실력이 되지 않기 때문이다

1장은 Variance 에 대하여 다룬다

Kotlin 은 JVM 과의 호환성 때문에 Generic 구현이 마찬가지로 어설픈데(Type Erase), 덕분에 Kotlin 의 Variance 은 일반적인 Generic 구현과는 다른 특성을 가지게 된다.
이부분에 대해서 아주 잘 설명하고 있고, 실제 자주 쓰이는 사용 예 까지 보여줘서 내용이 아주 충실했다.

2장은 Interface delegation 에 대하여 다룬다

예제 에서는 iOS 와 Android 간에 코드를 통일해서 사용하기 위해서 사용 하는 기법을 소개하고 있지만, 난 개인적으로 사실 Interface delegation 은 C++ 에서 도입했다 이후 언어에서는 사실상 버려진 Multiple inheritance 와 별 다를바 없다고 생각하여 나는 그다지 선호하지는 않는 방법이다

3장에서는 Property delegation 에 대하여 다룬다

Property delegation 은 최신의 굉장히 신기한 기술이다. 적어도 나는 다른 언어에서 비슷한 기능을 본 적이 없다. 잘 사용하면 매우 강력한 기능이다. Property 에 수동으로 getter 와 setter 를 코딩해서 넣어줘야 하는 것들을 아주 간단히 해결 할 수 있다.
JetBrains 에서 만든 ORM 인 Exposed 에서 이 기능을 아주 적극적으로 활용하고 있으니 한번 참고 해 봐도 좋을 것 같다. 예제로 Android 에서의 Activity 초기화 관련한 코드를 보여주고 있는데, 아주 효율적이라는 생각이 들었다. 아쉽다는건 이미 Android 의 UI 는 Jetpack Compose 로 이사가서, 해당 예제를 쓸 일이 안 생길 것 같다는 정도다.

4장에서는 Contract 에 대하여 다룬다

컴파일러에게 코드에 어떤 제약이 있는지 명시하는 코드인데 주로 컴파일러가 Type(과 Qualifier) 을 좀 더 정확하게 인식 할 수 있도록 도와주는 기능이다. 잘 쓰면 TypeSafe 한 코드를 편하게 작성할 수 있다. 책에서 소게 된 예제를 하나 소개하면 val 의 선언과 초기화를 분리하는 경우를 들 수 있겠다

5장에서는 Java 와의 상호운용성 에 대하여 다룬다

JVM 의 제한 덕분에 Kotlin 이 얼마나 뒤틀려있는지와, 언어 설계자들의 고뇌를 구경 해 보자. 이런제약이 없었다면 훨씬 깔끔한 언어가 되었겠지만 반대로 JetBrains 이라는 작은 회사에서 나온 언어가 이렇게 금방 메이저 언어로 올라오지는 못했을거다. 언젠가 Kotlin 에 딱 맞는 VM 과 순수 Kotlin 코드만으로 프로젝트를 할 날을 기대 해 보자.

6장에서는 Kotlin MultiPlatform 에 대하여 다룬다, 7장은 Kotlin/JS 에 대하여 다룬다
둘 다 관심도 없고, 설명할 자신도 없어서 넘겼다. 일단 한번 읽기는 했는데 뭔 얘기를 해야할지도 모르겠다.

8장에서는 Reflection 에 대하여 다룬다

물론 Kotlin 도 결국 컴파일하면 JVM ByteCode 이므로 Java 에서 제공하는 Reflection 을 사용 해도 되겠지만… 내가 경험한 환경 중 Java Reflection Api 는 정말 최악의 Api 라고 할 수 있었다. 그에 비하면 Kotlin 에서 추가로 제공하는 kotlin-reflect 패키지의 Api 는 아주 괜찮다고 볼 수 있다. 책에 나오는 사용 예제 같은 경우도 어렵지 않은 수준에서 쓸만한 것들을 제공하고 있다.

9장에서는 Annotation Processor 에 대하여 다룬다

9장과 10장에서는 Runtime 에 사용 하지 않는 CompileTime Annotation (RetentionPolicy.SOURCE) 에 대하여 다룬다고 생각하면 편하다.

9장에서 다루는 Annotation 은 Java 컴파일러에 의존하는 클래식한 Annotation 이다. 그래서 Kotlin 을 Java 로 변환하고, 다시 컴파일 하는 과정을 거쳐야 하기 떄문에 컴파일 시간이 굉장히 느려진다. 그리고 여기서 오류가 날 경우 이해하기 힘든 이상한 오류를 만들어 내는 경우가 많다. 특별한 내용은 없기 때문에 그냥 보고 넘기면 된다

10장에서는 Kotlin Symbol Processor 에 대하여 다룬다

Java 컴파일러에 의존하는 Annotation 처리가 느리기 떄문에 Kotlin 자체적으로 처리하는 Annotation 방식이다. 최신 혹은 계속 업데이트 되는 라이브러리들은 KSP 를 지원하는 경우가 많으므로, 만약 두가지를 다 제공하는 라이브러리라면 KSP 쪽을 사용하자. 책에서는 기본적인 사용 방법을 소개 해 주고 있다

11장에서는 Kotlin Compiler Plugin 에 대하여 다룬다

내 주변의 C++ 만 계속 써본 사람들이 (C++ 도 Clang/LLVM 같은 최신 툴킷은 가능하지만…) 굉장히 신기 해 하는 부분 두가지가, 보통 Compile 과정에 끼어들어서 동작을 바꾸는 부분이었다(나머지 하나는 Reflection). Compiler Plugin 을 자유자재로 다룰 수 있게 되면 Framework 에서 할 수 있는게 상당히 많아진다. 아마 이 글을 보는 대부분의 사람들이 all-open plugin 정도는 끼워서 사용 하고 있지 않을까 싶다.

12장에서는 정적분석기에 대하여 다룬다… 사실 좀 뜬금없었다. 이거 왜 넣은거지. 아마 친구의 프로젝트를 소개 하고 싶었나 보다 하고 넘어갔다.

이 책은 실제 내용만 300 페이지 정도의 적당한 분량을 가지고 있다. 해당 내용을 당장 프로젝트에 적용 해 보기 위해서는 충분한 설명과 예제를 가지고 있고, 이 책의 예제를 넘어선 기능이 필요할 정도의 실력이라면, 자유자재로 찾아내서 응용할 수 있는 능력자라고 볼 수 있으니 이정도면 괜찮다고 생각한다.

특히 이런 내용은 눈으로만 봐서는 이해하기 어렵고 실제로 작성하고 돌려봐야 와닿는 부분이 많은데 각 장의 기능을 연습 해 볼 수 있는 연습문제를 제공하는 것은 굉장히 바람직한 구성이라고 생각했다. 나 역시도 리뷰를 위해 어설프게만 알고 있는 기술의 연습문제를 풀어보았고, 이해에 큰 도움이 되었다. Kotlin 을 좀 더 잘 이해하고 싶다면 이 책을 꼭 한번 구매하여 읽어보자.

This post is licensed under CC BY 4.0 by the author.