Kotlin 시리즈 목차: 기초 문법부터 코루틴, 컬렉션, Android, Spring, 테스트까지 10편
이 글의 핵심
Kotlin을 Android용으로 배울지 서버용으로 배울지에 따라 먼저 읽어야 할 글이 달라집니다. 각 편의 난이도와 선행 관계를 정리해 목표에 맞는 경로를 고를 수 있게 하고, Java와의 차이, 코루틴과 스레드, Kotlin Multiplatform 같은 자주 묻는 질문에도 짧게 답합니다.
시리즈 소개
Kotlin은 JetBrains가 개발한 JVM 기반 언어로, 2017년 Google I/O에서 Android 공식 지원 언어로 발표되었고 2019년에는 Google이 “Kotlin 우선(Kotlin-first)“을 선언했습니다. 이 시리즈는 Kotlin 기초 문법부터 코루틴, Android 개발, Spring Boot 서버 개발까지 순서대로 다룹니다. null 안전성, 확장 함수, 고차 함수, 코루틴처럼 Kotlin을 Java와 다르게 만드는 기능과 Java와의 상호 운용이 중심입니다.
Kotlin을 처음 배울 때 막히는 지점은 대개 문법 자체보다 Java와 다르게 동작하는 기본값입니다. 클래스와 메서드가 기본적으로 final이라 상속하려면 open을 붙여야 하고(그래서 Spring 프로젝트에는 kotlin-spring 컴파일러 플러그인이 필요합니다), ==는 Java의 equals()에 해당하며 참조 비교는 ===로 따로 씁니다. 또 null 안전성은 Kotlin 코드 안에서만 완전하게 보장되고, Java 라이브러리가 돌려준 값은 플랫폼 타입(String!)이라 컴파일러가 null 검사를 강제하지 않습니다. Kotlin으로 옮겼는데도 NullPointerException이 나는 경우는 대부분 이 경계에서 생기므로, #02와 #04를 읽을 때 이 부분을 특히 눈여겨보면 좋습니다.
전체 목차
기초
#01 Kotlin 시작하기
난이도: 초급. Kotlin이 등장한 배경과 Android 공식 언어가 된 과정, IntelliJ IDEA와 Android Studio 설정, Hello World와 기본 문법, Kotlin 코드가 JVM 바이트코드로 컴파일되는 방식과 Java와의 차이를 다룹니다.
#02 변수와 타입
난이도: 초급. val과 var의 차이, 타입 추론, null 안전성 연산자(?., !!, ?:), 스마트 캐스트와 when 표현식을 다룹니다.
#03 함수
난이도: 중급. 함수 선언과 단일 표현식 함수, 기본 매개변수와 이름 있는 인자, 확장 함수와 중위 함수, 고차 함수와 람다(it)를 다룹니다.
#04 클래스
난이도: 중급. 주 생성자와 부 생성자, 프로퍼티와 getter/setter, 데이터 클래스와 sealed 클래스, 상속과 인터페이스, 추상 클래스를 다룹니다.
컬렉션과 비동기
#05 컬렉션
난이도: 중급. 읽기 전용과 가변 List, Set, Map, map/filter/reduce/fold 같은 컬렉션 연산, 지연 평가를 하는 Sequence를 다룹니다.
#06 코루틴
난이도: 고급. launch, async/await, suspend 함수와 CoroutineScope, Dispatcher(IO, Main, Default), 비동기 스트림인 Flow를 다룹니다.
실전 개발
#07 Android 개발
난이도: 중급. Android Studio와 Gradle, Activity·Fragment·ViewModel, Jetpack Compose 기초, Android 생명주기에 맞춘 코루틴 사용을 다룹니다.
#08 테스트
난이도: 중급. JUnit, Kotest, MockK로 단위 테스트와 통합 테스트를 작성하고, runTest로 코루틴 코드를 테스트하는 방법을 다룹니다.
#09 Spring
난이도: 중급. Spring Boot와 Kotlin으로 REST API를 만들고 JPA와 트랜잭션을 다루며, 코루틴과 Spring WebFlux를 함께 쓰는 방법을 설명합니다.
#10 고급 기능
난이도: 고급. 제네릭과 변성, 리플렉션과 애노테이션, DSL 작성, 인라인 함수와 reified 타입 파라미터를 다룹니다.
학습 경로
목표에 따라 다음 순서를 권합니다.
- Kotlin 입문(약 2주): #01 → #02 → #03 → #04. 기본 문법을 익혀 간단한 콘솔 프로그램을 작성할 수 있는 수준이 목표입니다.
- Android 앱 개발(약 4주): #01~#04 → #05 → #06 → #07. ViewModel과 Compose를 써서 간단한 앱을 만드는 것이 목표입니다.
- 서버 개발(약 4주): #01~#05 → #06 → #08 → #09. Spring Boot로 DB와 연동되는 REST API 서버를 만드는 것이 목표입니다.
- 심화(약 6주): 시리즈 전체와 #10. Android 앱과 Spring Boot 서버를 연동하거나 직접 라이브러리를 설계할 때 필요한 내용까지 다룹니다.
기간은 하루 한두 시간을 기준으로 잡은 대략적인 값입니다. 경로를 고를 때 중요한 것은 기간보다 순서입니다. 코루틴(#06)은 난이도가 높아 건너뛰고 싶어지지만, Android의 ViewModel, Room, Retrofit과 Spring WebFlux가 모두 suspend 함수와 Flow를 전제로 설계되어 있어서 #06 없이 #07이나 #09로 가면 “왜 이 함수는 코루틴 안에서만 호출되는가” 같은 질문에서 막히게 됩니다. 반대로 #10의 제네릭 변성(in/out)과 reified는 라이브러리를 직접 만들 때 비로소 필요해지므로, 앱을 만드는 것이 목표라면 나중에 봐도 됩니다. Java 경험이 있다면 #01~#03은 빠르게 훑고, null 안전성과 데이터 클래스, when 표현식처럼 Java에 없는 부분에 시간을 쓰는 편이 효율적입니다.
관련 시리즈
- Java 시리즈: Kotlin과 같은 JVM 위의 언어로, 기존 Android/Java 코드를 읽을 때 도움이 됩니다.
- Swift 시리즈: iOS 개발용 언어로, Kotlin과 문법 설계가 비슷한 부분이 많습니다.
자주 묻는 질문
Kotlin과 Java의 차이는?
Kotlin은 null 가능성을 타입에 담고(String과 String?), 데이터 클래스, 확장 함수, when 표현식으로 반복 코드를 줄이며, 코루틴으로 비동기 코드를 순차적으로 쓸 수 있게 합니다. 같은 프로젝트 안에서 Java 클래스와 Kotlin 클래스를 섞어 쓸 수 있을 만큼 상호 운용성이 높지만, Java 쪽에서 Kotlin의 기본 인자나 companion object 멤버를 자연스럽게 쓰려면 @JvmOverloads, @JvmStatic 같은 애노테이션이 필요한 경우가 있습니다.
Android 개발은 Kotlin만 가능한가요?
Java로도 가능하지만, Google은 Kotlin을 권장하고 새 Jetpack 라이브러리와 문서도 Kotlin을 기준으로 합니다. 특히 Jetpack Compose는 Kotlin 컴파일러 플러그인으로 동작하므로 Compose UI 코드는 Kotlin으로만 작성할 수 있습니다.
서버 개발에도 Kotlin을 쓸 수 있나요?
네, Spring Boot가 Kotlin을 공식 지원하고 Ktor처럼 Kotlin 전용 서버 프레임워크도 있습니다. 다만 JPA 엔티티는 인자 없는 생성자와 상속 가능한(open) 클래스를 요구하므로 kotlin-jpa(no-arg)와 kotlin-spring(all-open) 플러그인 설정이 필요하고, 엔티티를 data class로 만들면 지연 로딩과 equals/hashCode에서 문제가 생기기 쉽다는 점을 #09에서 다룹니다.
코루틴은 스레드와 다른가요?
코루틴은 스레드 위에서 실행되는 일시 중단 가능한 작업 단위입니다. suspend 함수가 I/O를 기다리는 동안 스레드를 붙잡지 않고 양보하므로 적은 스레드로 많은 작업을 동시에 처리할 수 있습니다. 하지만 코루틴 안에서 Thread.sleep()이나 블로킹 I/O를 호출하면 그 스레드가 그대로 멈추므로, 블로킹 코드는 withContext(Dispatchers.IO)로 옮겨야 합니다.
Kotlin Multiplatform(KMP)은 뭔가요?
비즈니스 로직을 Kotlin으로 한 번 작성해 Android, iOS, 데스크톱, 서버 등에서 공유하는 기술입니다(모바일만 다루던 시절의 이름은 KMM). UI까지 공유하려면 Compose Multiplatform을 함께 씁니다. 플랫폼별 API는 expect/actual로 나눠 구현해야 하므로, 이 시리즈의 기초와 코루틴을 익힌 뒤 별도로 학습하는 것을 권합니다.
추천 학습 자료
- Kotlinlang.org: 공식 문서
- Android Developers - Kotlin: Android Kotlin 가이드
- IntelliJ IDEA, Android Studio: 개발 환경
- Kotlin in Action, Effective Kotlin: 책
Kotlin 시작하기 (#01)부터 읽기 시작하면 됩니다.