| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
- Spring
- 연습문제
- 이진트리
- Unity
- jdk
- Kafka
- 삽입
- 코딩테스트
- 아키텍처
- redis
- stack
- docker
- jre
- 플러스 백엔드
- 오블완
- 프로그래머스
- code blocks
- 트리
- event
- JPA
- 알고리즘
- 백준
- 티스토리챌린지
- MSA
- Kotlin
- bean
- 탐색
- Gradle
- EDA
- Java
- Today
- Total
Repository
[Kotlin 입문] Kotlin이란 어떤 언어인가? 본문
본격적인 학습을 하기 전, 코틀린이 어떤 언어인지 간단하게 알아보도록 하겠다.
1. Kotlin이란?
Kotlin은 JetBrains에서 개발한 오픈 소스 프로그래밍 언어로, JVM 기반 언어이다.
2011년 처음 공개되었으며, 2016년 정식 버전 1.0이 출시되었다. 이후 2017년 Google이 Android 공식 개발 언어로 채택하면서 빠르게 성장했다.
Kotlin은 기본적으로 JVM 위에서 동작하지만, Kotlin/Native를 사용하면 JVM 없이 기계어로 직접 컴파일할 수 있다. 이 덕분에 임베디드 시스템과 같이 JVM을 사용할 수 없는 환경에서도 활용이 가능하다.
2. 주요 특징
- JVM 기반: Java Virtual Machine 위에서 동작하며, Java와 100% 상호 운용이 가능하다.
- 간결한 문법: 보일러플레이트 코드를 줄여 더 적은 코드로 동일한 기능을 구현할 수 있다.
- 안전성: Null 안전성(Null Safety)을 언어 차원에서 지원하여 NullPointerException을 방지한다.
- 다목적: 안드로이드 앱 개발, 서버 백엔드, 웹 프론트엔드, 네이티브 앱 등 다양한 플랫폼을 지원한다.
3. Java와의 관계
3-1. 슈퍼셋인가?
Kotlin은 Java의 슈퍼셋이 아니다.
슈퍼셋이란 기존 언어의 문법을 모두 포함하면서 기능을 확장한 언어를 의미한다. TypeScript가 JavaScript의 슈퍼셋인 것이 대표적인 예다. 슈퍼셋 언어는 기존 코드를 그대로 가져와도 동작한다.
Kotlin은 Java 문법을 그대로 사용할 수 없으며, Java 코드를 Kotlin 파일에 붙여 넣어도 컴파일되지 않는다. 즉, Kotlin은 Java와는 별개의 독립적인 언어다.
3-2. 상호 운용성
슈퍼셋은 아니지만, Kotlin은 Java와 높은 상호 운용성(Interoperability) 을 제공한다.
- Kotlin 코드에서 Java 라이브러리 및 클래스를 호출할 수 있다.
- 반대로 Java 코드에서 Kotlin 코드를 호출하는 것도 가능하다.
이것이 가능한 이유는 두 언어 모두 동일한 JVM 바이트코드로 컴파일되기 때문이다. 이러한 높은 호환성 덕분에 기존 Java 프로젝트를 유지하면서 Kotlin을 점진적으로 도입할 수 있어, 실무 환경에서도 유연하게 적용할 수 있다.
4. Kotlin의 설계 철학
Kotlin은 "프로그래머를 위한 실용적인 도구"를 목표로 설계되었다.
학문적으로 이상적인 언어를 추구하기보다, 현실의 개발 문제를 해결하는 데 집중한다. JetBrains가 자사 IDE(IntelliJ IDEA 등)를 직접 Kotlin으로 개발하면서 대규모 실무 환경의 피드백을 반영한 것이 이 철학의 근거다.
이 실용적 철학은 크게 네 가지 핵심 가치로 표현된다.
| 가치 | 설명 |
|---|---|
| 가독성 (Readability) | 간결하면서도 이해하기 쉬운 코드를 지향한다. |
| 안전성 (Safety) | 컴파일 타임에 버그를 잡아 런타임 오류를 줄인다. |
| 실용주의 (Pragmatism) | 이론보다 현장에서의 실제 유용성을 최우선으로 한다. |
| 상호 운용성 (Interoperability) | 기존 Java 생태계를 그대로 활용할 수 있다. |
5. Kotlin Evolution Principles
Kotlin은 언어가 시간이 지나도 실용적인 도구로 남을 수 있도록, 언어의 진화 방식에 대한 명확한 원칙을 갖고 있다.
5-1. Keep the Language Modern
시간이 지남에 따라 시스템에는 레거시가 쌓이게 된다. 한때 최신이었던 기능도 점차 구식이 될 수 있다.
Kotlin은 새로운 기능을 지속적으로 추가하는 것뿐만 아니라, 더 이상 권장되지 않는 레거시 기능을 단계적으로 제거하는 방식으로 언어를 관리한다. 이를 통해 언어가 항상 현재의 개발 환경과 사용자의 기대에 부합하도록 유지한다.
5-2. Feedback Loop
새로운 기능을 설계할 때 섣불리 확정 짓지 않는다. 실제 현실에서 테스트해 보는 것이 설계를 검증하는 가장 좋은 방법이라고 판단하기 때문이다.
이를 위해 Kotlin은 새로운 기능을 곧바로 안정(Stable) 상태로 출시하지 않고, 아래 단계를 거쳐 점진적으로 공개한다.
Experimental → Alpha → Beta → Stable
사용자들은 각 단계에서 명시적으로 opt-in하여 해당 기능을 사용해 볼 수 있으며, 이 과정에서 수집된 피드백을 바탕으로 설계를 개선하고 최종적으로 안정화한다. 이 과정을 통해 불필요한 호환성 변경을 최소화할 수 있다.
5-3. Comfortable Updates
버전 업그레이드 시 마이그레이션을 진행하는 것은 여러 어려움을 초래할 수 있다.
Kotlin은 이를 최소화하기 위해 다음을 원칙으로 한다.
- 변경 사항은 항상 사전에 공지한다.
- 제거될 기능은 미리 deprecated로 표시하여 개발자가 준비할 시간을 제공한다.
- 변경이 적용되기 전, 자동화된 마이그레이션 도구를 함께 제공한다.
이상적인 마이그레이션 흐름은 다음과 같다.
- 버전 A로 업데이트 → deprecated 경고 확인 및 마이그레이션 도구로 코드 수정
- 버전 B로 업데이트 → 아무런 문제 없이 완료
이처럼 Kotlin은 언어가 발전하는 과정에서도 개발자가 불편함을 최소한으로 느낄 수 있도록 설계되어 있다.
'Server' 카테고리의 다른 글
| [Kotlin 입문] 아토믹 코틀린 1챕터 — 기본 문법 정리 (0) | 2026.03.02 |
|---|---|
| Routemate: 5%의 복잡도로 80%의 기능을 구현한 경량 DB 라우터 개발기 (1) | 2025.12.22 |
| [gradle] generateMetadataFileForMavenPublication FAILED 오류 해결 가이드 (0) | 2025.12.11 |
| Platform MSA 분산 트랜잭션, 왜 어렵고 어떻게 풀까 (0) | 2025.12.11 |
| MSA 환경에서의 알림 서비스 설계와 구현 (2) | 2025.07.13 |