코틀린을 공부하다 보면 문법보다 먼저
그래서 Kotlin은 왜 만들어졌을까?
라는 질문이 들게 됩니다.
단순히 “문법이 예쁘다”는 이유만으로 오래 살아남는 언어는 드뭅니다.
어떤 문제를 해결하려고 등장했는지, 왜 지금도 여러 플랫폼에서 쓰이는지를 알고 나면 Kotlin을 보는 시야도 훨씬 넓어집니다.
이번 글에서는 Kotlin의 탄생 배경과 목적, 그리고 어떤 철학을 가진 언어인지 가볍게 정리해보려고 합니다.
“concise, multiplatform, and interoperable”
— Kotlin Getting Started
Kotlin은 JetBrains가 개발한 현대적인 프로그래밍 언어입니다.
서버 개발에서 자주 쓰는 Kotlin/JVM뿐 아니라 Android, JavaScript, Wasm, Native까지 지원하는 멀티플랫폼 언어이기 때문에, 단순히 “Java 대체 언어”라고만 보기에는 범위가 더 넓습니다.
또 Kotlin은 JVM을 대상으로 할 때 Java와 잘 맞물리도록 설계되어 있습니다.
그래서 기존 Java 프로젝트, 라이브러리, 프레임워크와 함께 쓰기 쉽고, 완전히 새로운 생태계를 강요하기보다 Java 생태계 안으로 자연스럽게 들어갈 수 있는 언어라고 볼 수 있습니다.
“officially supported by Google”
— Android Developers: Kotlin overview
Kotlin이 크게 주목받은 이유 중 하나는 Android입니다.
Google이 Kotlin을 Android 개발의 공식 지원 언어로 밀기 시작하면서, Kotlin은 단순히 “새롭고 멋진 언어”를 넘어서 실제 모바일 개발 현장에서 선택할 수 있는 현실적인 언어가 되었습니다.
이후 Android Studio와 공식 문서 전반에서 Kotlin 지원이 강화되면서 Kotlin은 서버뿐 아니라 모바일 개발에서도 빠르게 입지를 넓혔습니다.
즉 Kotlin의 성장은 단순한 유행이라기보다, 공식 도구와 생태계의 지원 위에서 이루어진 흐름이라고 보는 편이 맞습니다.
“100% interoperable”
— Kotlin FAQ
Kotlin의 목적을 한 문장으로 정리하면,
기존 Java 생태계와 함께 사용할 수 있으면서도 더 간결하고 안전한 개발 경험을 제공하는 것입니다.
Kotlin은 기존 자산을 버리고 새로 시작하라고 요구하는 언어가 아니라, 이미 널리 쓰이던 Java 기반 프로젝트에 점진적으로 스며들 수 있게 설계되었습니다.
이 점은 실제 도입 장벽을 크게 낮춰 줍니다.
필요한 부분부터 Kotlin으로 옮길 수 있고, Java 코드와 Kotlin 코드를 같은 프로젝트 안에서 함께 운용할 수 있기 때문입니다.
Kotlin은 정적 타입 언어입니다.
즉 실행 중에 타입을 대충 맞춰보는 방식이 아니라, 컴파일 단계에서 타입 관련 오류를 많이 걸러내는 언어입니다. 그래서 프로그램을 실행하기 전에 더 많은 실수를 발견할 수 있습니다.
또 Kotlin 컴파일러는 타입 추론도 지원합니다.
그래서 모든 변수 타입을 일일이 적지 않아도 문맥을 보고 적절한 타입을 추론해주고, 덕분에 코드가 짧아지면서도 타입 안정성을 유지할 수 있습니다.
val name = "Kotlin"
val age = 10
“object-oriented and functional constructs”
— Kotlin FAQ
Kotlin은 객체지향 언어이면서도 함수형 스타일을 자연스럽게 지원합니다.
그래서 클래스 중심으로 설계할 수도 있고, 컬렉션 처리나 간단한 변환 로직은 함수형 스타일로 짧게 작성할 수도 있습니다.
중요한 건 Kotlin이 함수형 프로그래밍만 강제하지는 않는다는 점입니다.
필요하면 명령형 방식으로 써도 되고, 더 적합한 부분에서만 람다나 고차 함수를 활용할 수 있습니다. 즉 Kotlin은 특정 패러다임을 강요하기보다 여러 방식을 실용적으로 섞어 쓰게 해주는 언어에 가깝습니다.
val numbers = listOf(1, 2, 3, 4, 5)
val result = numbers.filter { it % 2 == 0 }
println(result)
Kotlin은 무료로 사용할 수 있는 오픈소스 언어입니다.
개인 학습부터 기업 개발까지 폭넓게 활용할 수 있고, 특정 회사 제품 안에만 갇혀 있는 언어가 아니라는 점도 큰 장점입니다.
“more concise”
— Kotlin FAQ
Kotlin의 대표적인 장점은 간결함입니다.
자바에서는 여러 줄에 걸쳐 작성하던 getter, setter, 생성자, 데이터 보관용 클래스 같은 코드들을 훨씬 짧게 표현할 수 있습니다.
즉 Kotlin은 단순히 “짧게 쓰기 위한 언어”라기보다,
의미 없는 반복 코드를 줄이고 핵심 로직에 집중하게 만드는 언어라고 이해하는 편이 더 정확합니다.
data class User(
val name: String,
val age: Int
)
“null safety”
— Kotlin Null Safety
Kotlin이 안전하다고 자주 말하는 이유는 대표적으로 null safety 때문입니다.
nullable 타입과 non-null 타입을 구분해서, null이 들어올 수 있는 값과 그렇지 않은 값을 타입 시스템 차원에서 구별합니다.
그래서 Java에서 자주 보이던 NullPointerException을 완전히 없애지는 못하더라도, 적어도 더 이른 시점에 더 많이 막을 수 있습니다.
이 점은 실무에서도 꽤 체감되는 장점입니다.
val s: String? = null // null 가능
var s2: String = "" // null 불가능
“called from Kotlin in a natural way”
— Calling Java from Kotlin
상호운용성은 Kotlin의 가장 현실적인 강점입니다.
기존 Java 라이브러리를 그대로 사용할 수 있고, 반대로 Kotlin 코드도 Java 프로젝트 안으로 자연스럽게 들어갈 수 있습니다.
또 IDE에는 Java 코드를 Kotlin으로 바꾸는 자동 변환 도구도 포함되어 있습니다.
즉 Kotlin은 “기존 자산을 버리고 갈아타는 언어”가 아니라, 기존 자산을 최대한 살리면서 옮겨갈 수 있게 도와주는 언어입니다.
Kotlin은 단순히 문법이 예쁜 언어가 아닙니다.
Java 생태계와 함께 사용하기 쉽고, 코드 양을 줄이며, 타입 안정성과 null safety 같은 장점을 제공하기 위해 만들어진 실용적인 언어입니다.
그래서 Kotlin을 공부할 때는 문법만 외우기보다
왜 이런 문법이 생겼는가, 무엇을 더 안전하고 편하게 만들려고 했는가를 함께 이해하는 것이 훨씬 중요합니다.
그 흐름을 알고 나면 Kotlin이 왜 지금도 꾸준히 선택받는지 더 잘 보이게 됩니다.