코틀린은 단순히 문법이 짧은 언어가 아니다. 자바 생태계 위에서 더 안전하고, 더 간결하며, 더 실용적인 코드를 쓰기 위해 만들어진 언어다.
코틀린을 제대로 배우려면 먼저 세 가지를 알아야 한다.
코틀린은 어떤 문제를 해결하려고 등장했는가
코틀린 코드는 어디에서 실행되는가
코틀린 프로젝트는 어떤 구조로 구성되는가
문법은 그다음이다. 언어가 해결하려는 문제를 이해하면 이후에 배우는 변수, 함수, 클래스, 널 안전성, 코루틴이 왜 그런 모양을 갖게 되었는지 훨씬 쉽게 받아들일 수 있다.

코틀린은 왜 만들어졌을까
자바는 오랫동안 서버, 안드로이드, 기업용 시스템에서 널리 사용되어 왔다. 안정적이고 생태계가 크다는 장점이 있다. 하지만 실제 개발에서는 다음과 같은 불편함도 자주 나타난다.
같은 의미의 코드를 작성하는 데 필요한 문장이 길다.
null때문에 실행 중 오류가 발생하기 쉽다.데이터만 담는 클래스를 만들 때 반복 코드가 많다.
함수형 프로그래밍 스타일을 자연스럽게 쓰기 어렵다.
오래된 문법과 새 문법이 섞이면서 코드가 장황해지기 쉽다.
코틀린은 이런 문제를 줄이기 위해 만들어졌다. 목표는 자바를 완전히 대체하는 것이 아니라, 자바와 함께 사용할 수 있으면서도 더 현대적인 방식으로 코드를 작성하게 하는 것이다.
예를 들어 자바에서는 단순한 사용자 정보를 담기 위해 필드, 생성자, getter, toString, equals, hashCode 같은 코드를 직접 작성해야 하는 경우가 많다. 코틀린에서는 data class 하나로 대부분을 해결할 수 있다.
data class User(
val name: String,
val age: Int
)짧기만 한 것이 중요한 것은 아니다. 이 코드는 의도도 분명하다. "이 클래스는 데이터를 담는 용도다"라는 사실이 문법 자체에 드러난다.
자바와 공존하는 언어
코틀린의 중요한 특징은 자바와 함께 사용할 수 있다는 점이다. 이를 보통 상호 운용성이라고 한다. 쉽게 말해 코틀린 코드에서 자바 클래스를 사용할 수 있고, 자바 코드에서도 코틀린 코드를 호출할 수 있다는 뜻이다.
이 장점은 매우 크다. 이미 자바로 만들어진 프로젝트를 한 번에 전부 코틀린으로 바꾸지 않아도 된다. 필요한 부분부터 코틀린으로 작성할 수 있다.
예를 들어 기존 자바 프로젝트에 다음과 같은 방식으로 코틀린을 도입할 수 있다.
새로 작성하는 기능만 코틀린으로 만든다.
반복 코드가 많은 데이터 클래스를 코틀린으로 바꾼다.
테스트 코드를 코틀린으로 작성해 본다.
안드로이드 화면 일부를 코틀린으로 구현한다.
즉, 코틀린은 "새 프로젝트에서만 쓰는 언어"가 아니다. 기존 자바 생태계 안으로 자연스럽게 들어갈 수 있도록 설계된 언어다.
코틀린이 지향하는 코드
코틀린 코드는 보통 다음 세 가지 방향을 지향한다.
첫째, 간결함이다. 불필요한 반복을 줄이고 핵심 로직이 잘 보이게 한다. 타입을 컴파일러가 추론할 수 있으면 직접 쓰지 않아도 된다.
val message = "Hello, Kotlin"위 코드에서 message가 문자열이라는 사실은 오른쪽 값만 봐도 알 수 있다. 그래서 String을 명시하지 않아도 된다.
둘째, 안전함이다. 특히 코틀린은 null 문제를 언어 차원에서 다룬다. 자바에서는 null이 들어올 수 있는지 아닌지를 코드만 보고 판단하기 어려운 경우가 많다. 코틀린은 타입에 ?를 붙여 null 가능성을 표현한다.
var name: String = "Kotlin"
var nickname: String? = nullString은 null이 될 수 없고, String?은 null이 될 수 있다. 이 차이가 코드에 명확히 드러난다.
셋째, 실용성이다. 코틀린은 순수하게 새로운 이론을 보여주기 위한 언어가 아니다. 실제 프로젝트에서 자주 겪는 문제를 줄이는 데 초점을 둔다. 자바 라이브러리를 그대로 사용할 수 있고, Gradle 같은 익숙한 빌드 도구와도 잘 어울린다.
코틀린 코드는 어디에서 실행될까
코틀린은 하나의 언어지만 여러 환경에서 사용할 수 있다. 대표적인 실행 환경은 JVM, Android, Kotlin Multiplatform이다.
JVM에서 실행되는 코틀린
가장 기본적인 코틀린 실행 환경은 JVM이다. JVM은 Java Virtual Machine의 약자로, 자바 바이트코드를 실행하는 가상 머신이다.
코틀린 코드는 바로 컴퓨터가 실행하는 기계어로 바뀌는 것이 아니다. 일반적으로 다음 과정을 거친다.
Kotlin 코드 → 컴파일 → JVM 바이트코드 → JVM에서 실행이 구조 덕분에 코틀린은 자바와 같은 실행 환경을 공유한다. 자바 라이브러리를 사용할 수 있고, 기존 JVM 서버 프로젝트에도 자연스럽게 들어갈 수 있다.
서버 개발에서 코틀린은 Spring, Ktor 같은 프레임워크와 함께 자주 사용된다. Spring은 자바 생태계에서 오래 사용된 웹 프레임워크이고, Ktor는 코틀린다운 방식으로 서버와 클라이언트 애플리케이션을 만들 수 있는 프레임워크다.
Android에서 사용되는 코틀린
코틀린은 안드로이드 개발에서도 중요한 언어다. 안드로이드 앱은 오랫동안 자바로 많이 개발되었지만, 코틀린은 더 간결한 문법과 널 안전성 덕분에 안드로이드 코드와 잘 맞는다.
안드로이드 앱에서는 화면, 사용자 입력, 네트워크 요청, 데이터 저장 등 여러 작업이 동시에 얽힌다. 이때 코드가 길고 복잡하면 오류를 찾기 어렵다. 코틀린은 반복 코드를 줄이고, null 처리를 명확하게 하며, 코루틴을 통해 비동기 작업을 더 읽기 쉽게 표현할 수 있다.
예를 들어 네트워크에서 데이터를 받아오는 작업은 시간이 걸린다. 앱 화면이 멈추지 않게 하려면 비동기 처리가 필요하다. 코틀린의 코루틴은 이런 작업을 순서대로 읽히는 코드처럼 작성할 수 있게 도와준다. 코루틴은 뒤의 장에서 자세히 다룬다.
Kotlin Multiplatform에서 사용되는 코틀린
Kotlin Multiplatform은 하나의 코틀린 코드베이스를 여러 플랫폼에서 공유하기 위한 기술이다.
예를 들어 모바일 앱을 만든다고 하자. Android와 iOS 앱은 화면을 그리는 방식은 다르지만, 로그인 규칙, 데이터 검증, 네트워크 요청, 비즈니스 로직은 비슷한 경우가 많다. Kotlin Multiplatform을 사용하면 이런 공통 로직을 코틀린으로 작성하고, Android와 iOS에서 함께 사용할 수 있다.
단, 모든 코드를 한 번에 공유하는 방식은 아니다. 플랫폼마다 다른 부분은 따로 작성하고, 공통으로 사용할 수 있는 부분을 코틀린으로 묶는 방식에 가깝다.
공통 코드: 로그인 규칙, 데이터 모델, API 호출 로직
Android 전용 코드: Android 화면, 권한 처리, 시스템 기능
iOS 전용 코드: iOS 화면, Apple 플랫폼 기능Kotlin Multiplatform의 핵심은 "한 번 작성하면 모든 것이 자동으로 해결된다"가 아니다. 핵심은 "중복될 필요가 없는 코드를 공유한다"이다.
개발 환경 준비하기
코틀린을 배우기 위해 처음부터 복잡한 환경을 만들 필요는 없다. 먼저 온라인에서 코드를 실행해 보고, 그다음 로컬 개발 환경을 준비하면 된다.
준비할 도구는 크게 세 가지다.
Kotlin Playground
IntelliJ IDEA
JDK
Gradle은 프로젝트를 만들 때 함께 다룬다.
Kotlin Playground로 바로 실행하기
가장 빠른 방법은 Kotlin Playground를 사용하는 것이다. 웹 브라우저에서 코틀린 코드를 작성하고 바로 실행할 수 있다.
아래 코드를 입력해 보자.
fun main() {
println("Hello, Kotlin")
}실행 결과는 다음과 같다.
Hello, Kotlin이 코드는 세 부분으로 나눌 수 있다.
fun main() {
println("Hello, Kotlin")
}fun은 함수를 선언할 때 사용하는 키워드다.main은 프로그램이 시작되는 함수 이름이다.println은 값을 출력한 뒤 줄바꿈하는 함수다.
처음에는 이 정도만 이해하면 충분하다. 함수의 자세한 문법은 뒤에서 다시 다룬다.
IntelliJ IDEA 설치하기
실제 프로젝트를 만들려면 개발 도구가 필요하다. 코틀린을 처음 배울 때는 IntelliJ IDEA Community Edition을 추천한다. 무료로 사용할 수 있고, 코틀린 지원이 잘 되어 있다.
기본 흐름은 다음과 같다.
IntelliJ IDEA Community Edition을 설치한다.
새 프로젝트를 만든다.
언어로 Kotlin을 선택한다.
빌드 시스템으로 Gradle을 선택한다.
JDK를 선택하거나 설치한다.
main함수를 작성하고 실행한다.
여기서 JDK는 Java Development Kit의 약자다. JVM에서 실행되는 프로그램을 개발하고 실행하는 데 필요한 도구 모음이다. 코틀린이 JVM 위에서 실행될 때도 JDK가 필요하다.
이미 JDK가 설치되어 있지 않다면 IntelliJ IDEA에서 프로젝트 생성 중에 설치할 수 있다. 처음 학습할 때는 IDE가 권장하는 안정 버전을 선택하면 된다.
첫 번째 로컬 코틀린 코드
IntelliJ IDEA에서 Kotlin/JVM 프로젝트를 만들었다면 src/main/kotlin 아래에 Main.kt 파일을 만들고 다음 코드를 작성한다.
fun main() {
val language = "Kotlin"
println("Hello, $language")
}실행 결과는 다음과 같다.
Hello, Kotlin여기서 새로 등장한 코드는 val과 $language다.
val은 한 번 값을 넣으면 다시 바꿀 수 없는 변수를 만들 때 사용한다.
val language = "Kotlin"$language는 문자열 안에 변수 값을 넣는 문법이다. 이를 문자열 템플릿이라고 한다.
println("Hello, $language")자바에서는 문자열을 이어 붙이기 위해 +를 자주 사용하지만, 코틀린에서는 문자열 템플릿을 사용하면 더 읽기 쉽다.
Gradle은 무엇을 하는 도구일까
프로젝트를 만들면 build.gradle.kts라는 파일을 보게 된다. 처음에는 낯설지만 역할은 단순하다. Gradle은 프로젝트를 빌드하는 도구다.
빌드란 소스 코드를 실제로 실행하거나 배포할 수 있는 형태로 준비하는 과정이다. 이 과정에는 여러 작업이 포함된다.
필요한 라이브러리 내려받기
코틀린 코드 컴파일하기
테스트 실행하기
실행 가능한 파일 만들기
프로젝트 설정 관리하기
build.gradle.kts 파일은 이런 작업을 어떻게 할지 적어 두는 설정 파일이다. 확장자 .kts는 Kotlin Script를 의미한다. 즉, Gradle 설정을 코틀린 문법에 가까운 방식으로 작성한다.
예를 들어 Kotlin/JVM 프로젝트의 Gradle 설정은 다음과 비슷한 형태를 가진다.
plugins {
kotlin("jvm") version "사용할_코틀린_버전"
application
}
repositories {
mavenCentral()
}
dependencies {
testImplementation(kotlin("test"))
}
application {
mainClass.set("MainKt")
}각 부분의 역할은 다음과 같다.
plugins: 프로젝트에서 사용할 기능을 선언한다.kotlin("jvm"): 코틀린 코드를 JVM에서 실행되도록 컴파일한다.repositories: 라이브러리를 어디에서 받을지 정한다.dependencies: 프로젝트가 사용할 외부 라이브러리를 선언한다.application: 애플리케이션 실행과 관련된 설정을 한다.
처음부터 Gradle 문법을 모두 외울 필요는 없다. 지금은 build.gradle.kts가 "프로젝트의 빌드 설정 파일"이라는 점만 기억하면 된다.
기본 프로젝트 구조 이해하기
Kotlin/JVM 프로젝트를 만들면 보통 다음과 비슷한 구조를 가진다.
my-kotlin-project/
├── build.gradle.kts
├── settings.gradle.kts
└── src/
├── main/
│ └── kotlin/
│ └── Main.kt
└── test/
└── kotlin/각 항목의 역할을 하나씩 살펴보자.
src 디렉터리
src는 source의 줄임말이다. 소스 코드가 들어가는 위치다. 실제로 우리가 작성하는 코틀린 파일은 대부분 이 안에 둔다.
src/main/kotlin은 애플리케이션의 실제 코드가 들어가는 곳이다.
src/main/kotlinsrc/test/kotlin은 테스트 코드가 들어가는 곳이다.
src/test/kotlin테스트 코드는 프로그램이 의도대로 동작하는지 확인하는 코드다. 처음에는 낯설 수 있지만, 뒤의 실전 프로젝트에서는 매우 중요하게 다룬다.
build.gradle.kts
build.gradle.kts는 현재 프로젝트를 어떻게 빌드할지 정의한다.
예를 들어 프로젝트가 코틀린을 사용하는지, 어떤 라이브러리가 필요한지, 어떤 테스트 도구를 사용할지 등을 이 파일에 적는다.
새로운 라이브러리를 추가할 때도 보통 이 파일을 수정한다.
dependencies {
implementation("라이브러리_그룹:라이브러리_이름:버전")
}지금은 구체적인 라이브러리 표기법을 외우지 않아도 된다. 중요한 것은 외부 기능을 가져와 쓸 때 dependencies에 의존성을 추가한다는 점이다.
settings.gradle.kts
settings.gradle.kts는 Gradle 프로젝트의 이름과 포함할 모듈을 설정하는 파일이다.
단순한 프로젝트에서는 다음처럼 프로젝트 이름만 들어 있는 경우가 많다.
rootProject.name = "my-kotlin-project"큰 프로젝트에서는 여러 모듈을 나누어 관리하기도 한다. 예를 들어 서버 코드, 공통 코드, 테스트 도구를 각각 다른 모듈로 둘 수 있다. 하지만 처음 학습할 때는 단일 프로젝트 구조만 이해해도 충분하다.
main 함수의 역할
코틀린 프로그램은 보통 main 함수에서 시작한다.
fun main() {
println("Start")
}프로그램을 실행하면 JVM은 시작 지점을 찾는다. 코틀린에서는 그 시작 지점으로 main 함수를 사용할 수 있다.
main 함수는 파일의 가장 바깥에 작성할 수 있다. 자바처럼 반드시 클래스를 먼저 만들 필요가 없다.
fun main() {
println("클래스 없이도 시작할 수 있습니다")
}이것은 코틀린의 실용적인 특징 중 하나다. 간단한 프로그램을 만들 때 불필요한 구조를 줄일 수 있다.
패키지는 코드를 분류하는 이름표다
코틀린 파일 맨 위에는 package 선언이 올 수 있다.
package basic
fun main() {
println("Hello")
}패키지는 코드를 분류하기 위한 이름표다. 프로젝트가 커지면 파일이 많아진다. 이때 관련 있는 코드를 패키지로 묶으면 찾기 쉽고 관리하기 쉽다.
예를 들어 다음처럼 나눌 수 있다.
com.example.user
com.example.order
com.example.payment처음에는 패키지를 깊게 나누지 않아도 된다. 다만 프로젝트가 커질수록 패키지는 코드를 정리하는 중요한 기준이 된다.
코틀린 파일의 확장자
코틀린 소스 파일은 .kt 확장자를 사용한다.
Main.kt
User.kt
Calculator.ktGradle 설정처럼 코틀린 스크립트로 실행되는 파일은 .kts 확장자를 사용한다.
build.gradle.kts
settings.gradle.kts정리하면 다음과 같다.
| 확장자 | 용도 |
|---|---|
.kt | 일반 코틀린 소스 코드 |
.kts | 코틀린 스크립트 |
코틀린을 배울 때의 순서
코틀린을 처음 배울 때 모든 기능을 한꺼번에 이해하려고 하면 어렵다. 다음 순서로 접근하는 것이 좋다.
값을 저장하는 방법을 배운다.
조건과 반복으로 흐름을 제어한다.
함수를 사용해 코드를 나눈다.
null을 안전하게 다루는 방법을 익힌다.
클래스와 객체로 데이터를 구조화한다.
컬렉션으로 여러 데이터를 다룬다.
람다와 고차 함수로 표현력을 높인다.
코루틴으로 비동기 코드를 다룬다.
테스트와 리팩터링으로 코드를 개선한다.
이 책의 흐름도 이 순서를 따른다. 앞에서 배운 개념이 뒤의 개념을 이해하는 바탕이 된다.
직접 해 볼 것
다음 코드를 Kotlin Playground나 IntelliJ IDEA에서 실행해 보자.
fun main() {
val name = "Kotlin"
val year = 2026
println("I am learning $name in $year")
}그다음 문자열을 바꿔 보자.
fun main() {
val name = "Kotlin"
val reason = "safe and concise"
println("I like $name because it is $reason")
}아직 모든 문법을 이해하지 못해도 괜찮다. 중요한 것은 코드를 실행해 보고, 값을 바꾸면 결과도 바뀐다는 감각을 얻는 것이다.
정리
코틀린은 자바 생태계와 함께 사용하면서도 더 간결하고 안전한 코드를 작성하기 위해 만들어진 언어다. JVM 위에서 실행될 수 있고, 안드로이드 개발에 널리 사용되며, Kotlin Multiplatform을 통해 여러 플랫폼에서 공통 코드를 공유할 수도 있다.
처음에는 Kotlin Playground로 간단히 실행해 보고, 이후 IntelliJ IDEA와 Gradle 기반 프로젝트로 넘어가면 된다. 프로젝트에서는 src/main/kotlin에 실제 코드를 두고, build.gradle.kts에서 빌드 설정과 의존성을 관리한다. 프로그램의 시작점은 보통 main 함수다.
이제 코틀린을 실행할 준비가 끝났다. 다음 장에서는 변수, 타입, 연산자를 통해 코틀린 문법의 기초를 익힌다.
이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.