mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-04-15 09:21:38

Kotlin


파일:나무위키+유도.png  
코틀린은(는) 여기로 연결됩니다.
이 단어의 다른 뜻에 대한 내용은 코틀린(동음이의어) 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.
프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-block; margin: 0 0 -5px; min-width: 25%"
{{{#!folding ⠀[ IEEE Spectrum 2023 ]⠀
{{{#!wiki style="margin:-6px -1px -10px"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 C++ 3 Java
4 C 4 JavaScript
5 JavaScript 5 C++
6 C# 6 C#
7 SQL 7 C
8 Go 8 HTML
9 TypeScript 9 Shell
10 HTML 10 SAS
}}}}}}}}}
⠀[ Stack Overflow 2023 ]⠀
⠀[ TIOBE 2024 ]⠀
||<tablewidth=100%><width=2000><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 2월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Fortran
2 C 12 Delphi / Object Pascal
3 C++ 13 MATLAB
4 Java 14 Assembly language
5 C# 15 Scratch
6 JavaScript 16 Swift
7 SQL 17 Kotlin
8 Go 18 Rust
9 Visual Basic 19 COBOL
10 PHP 20 Ruby
{{{#!wiki style="margin:0 -10px -5px; min-height: 26px"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -6px -1px -10px"
21 R 36 Transact-SQL
22 SAS 37 VBScript
23 Classic Visual Basic 38 Haskell
24 Prolog 39 TypeScript
25 Ada 40 Logo
26 Perl 41 Bash
27 (Visual) FoxPro 42 Scheme
28 Dart 43 Solidity
29 D 44 ABAP
30 F# 45 ML
31 Scala 46 X++
32 Objective-C 47 PL/SQL
33 Lua 48 GAMS
34 Julia 49 PowerShell
35 LISP 50 RPG
}}}}}}}}} ||
⠀[ PYPL 2024 ]⠀
}}} ||
프로그래밍 언어 목록 · 분류 · 문법
코틀린
Kotlin
파일:Kotlin 로고.svg 파일:Kotlin 로고 화이트.svg
파일:홈페이지 아이콘.svg |
파일:X Corp 아이콘(블랙).svg | 파일:유튜브 아이콘.svg | | 파일:레딧 아이콘.svg

1. 개요2. 문법3. 특징
3.1. 간결한 문법3.2. 안전성3.3. 그 외
4. 통합 개발 환경5. 기타6. 관련 문서7. 외부 링크

[clearfix]
#!syntax kotlin
fun main() {
    println("Hello, World")
}

1. 개요

IntelliJ IDEA의 개발사 JetBrains에서 2011년에 공개한 오픈 소스 프로그래밍 언어. JVM 기반의 언어이며, Java와 유사하지만 더 간결한 문법과 다양한 기능을 추가하였다. Java와의 상호 운용이 100% 지원된다.[1] JVM 바이트코드가 기본이지만, Kotlin/Native 컴파일러를 사용하여 기계어로 컴파일할 수 있다. 안드로이드, 스프링 프레임워크, Tomcat[2], JavaScript, Java EE, HTML5, iOS, 라즈베리 파이 등을 개발할 때 사용할 수 있다.

2017년에 구글 안드로이드의 공식 언어로 Kotlin을 추가하였다. 이는 오라클과의 Java API 저작권 분쟁의 여파로 보는 시각이 많다. 2018년 카카오 카카오톡 메시징 서버에 Kotlin을 사용해 본 결과, 코드량이 비약적으로 감소하고 생산성이 대폭 향상되었다고 한다. # 2019년 1월부터는 구글 내부의 안드로이드 프로젝트에서도 Java 대신 Kotlin을 사용한다. # 안드로이드 공식 문서의 샘플 코드도 Java보다 Kotlin으로 작성된 예제가 먼저 나온다. 예시

이름은 Kotlin 개발 당시 JetBrains의 R&D 센터가 위치했던 상트페테르부르크 근처의 코틀린(Ко́тлин) 섬에서 따왔다. Andrey Breslav(Андрей Бреслав)의 발표 참고 Java가 인도네시아의 섬이라는 것을 생각해보면 다분히 Java를 의식한 듯한 이름.

2. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 Kotlin/문법 문서
번 문단을
부분을
참고하십시오.

3. 특징

3.1. 간결한 문법

data class Customer(var name: String, var email: String, var company: String)
}}} object ThisIsASingleton {
val companyName: String = "JetBrains"
}
}}} if (i in 1..10) { // equivalent of 1
println(i)
}

for (i in 0..12 step 3) print("$i ") // 0 3 6 9 12 출력
for (i in 12 downTo 0 step 2) print("$i ") // 12 10 8 6 4 2 0 출력
}}} when (x) {
0, 1 -> print("boolean")
2 -> print("콩\n콩")
!in 1..9 step 2 -> print("홀수 아님")
in 0..9 -> print("한자릿수")
else -> print("otherwise")
}
}}} npcContainer.forEach { npc ->
if (npc is Visible) npc.drawBody(gc, g) // npc가 Visible형으로 자동 변환되었다.
if (npc is Glowing) npc.drawGlow(gc, g) // npc가 Glowing형으로 자동 변환되었다.
}

when (expr) {
is Num -> expr.value // expr이 Num형으로 자동 변환되었다.
is Sum -> eval(expr.left) + eval(expr.right) // expr이 Sum형으로 자동 변환되었다.
else -> throw IllegalArgumentException("퉤에엣")
}
}}} val max = if (a > b) {
print("Choose a")
a}else {
print("Choose b")
b}
}}}

3.2. 안전성

return b?.length //b가 null이면 null 리턴
}}} /*
null이거나 null은 아니지만 대상 타입으로 형변환될 수 없는 경우와 같은
형변환이 실패하는 모든 경우에 대해 안전하게 null을 반환해준다.
*/
null as? String // null
"string" as? File // null

/*
반면 as는 경우에 따라 kotlin.TypeCastException이나
java.lang.ClassCastException 예외를 발생시킬 수 있다
*/
null as File // kotlin.TypeCastException 예외 발생
null as File? // null
"string" as File // java.lang.ClassCastException 예외 발생
"string" as File? // java.lang.ClassCastException 예외 발생
}}}

3.3. 그 외

val name: String = "Wikineet"
val greet_en: String = "Hello, $name!"
val greet_ko: String = "${name}님 안녕하세요!"
println(greet_en) // 출력: Hello, Wikineet!
println(greet_ko) // 출력: Wikineet님 안녕하세요!
}}} var a: String = "abc"
a = null // 컴파일 에러
}}} var b: String? = "abc"
b = null // ok
}}} val testee_hometown: String? = null // 여기에 적절한 값을 넣으면 '' 대신 넣은 값이 표시된다.
val hometown_display = testee_hometown ?: "" // testee_hometown이 null인지 검사한다. null이면 연산자의 우변에 있는 값이 대신 대입된다.
println("이 장치는 ${hometown_display}에 사는 모든 사람의 소득 금액을 합친 것보다 더 비쌉니다.")
}}}

4. 통합 개발 환경

JetBrains에서 개발하고 구글이 밀어주는 언어인 만큼 이쪽에 특화된 통합 개발 환경에서 주로 지원된다. 대표적인 것이 IntelliJ IDEA 안드로이드 스튜디오. 이클립스에서도 Kotlin 플러그인을 설치해 사용할 수 있다.

5. 기타

6. 관련 문서

7. 외부 링크


[1] Kotlin에서 Java 기능을 끌어다 쓸 때는 좋은데 반대로 Kotlin의 기능을 Java에서 쓰기는 어려울 때가 있긴 하다... [2] JVM 환경에서도 돌아간다. [3] 이는 Java가 C언어의 객체 시스템이라고 할 수 있는 구조체 라이브러리를 기저기반으로 제작된 언어이기 때문이다. 물론 초기에나 그랬지 지금은 그 시절의 흔적을 크게 찾아볼 순 없지만... 문법에 그 흔적들이 아직 많이 남아있어 장황했던 것. [4] 실제로는 새 infix 함수를 생성하는 것으로 작동한다. 사칙연산 또한 infix 함수로 구현되어 'a * 3'으로도, 'a.times(3)'으로도 쓸 수 있다. 연산자와 연산자 오버로딩도 이 infix 함수로 돌아간다. [5] https://stackoverflow.com/questions/63339605/what-is-the-correct-way-to-do-bigdecimal-comparison [6] Kotlin에서 Java 코드 사용 시에는 그냥 사용할 수 있지만, Java에서 Kotlin 코드 사용 시에는 @Jvm* 계열의 annotation 사용이 필요한 경우도 있다. [7] getter/setter 메서드와 public 필드 접근은 JVM이 동일한 바이트코드로 변환해주기 때문에 전혀 성능적인 차이가 없다.(물론, IDE에서 만들어주는 일반적인 getter/setter 가 아닌 추가적인 로직이 들어간 경우는 예외다.) [8] 넣어도 오류는 나지 않는다. [9] ?는 편리한 기능임과 동시에 타입시스템 상의 논리적인 오류이기 때문에 타입 안정성에 극도로 공을 들이는 Scala 같은 언어에서 도입할 가능성은 없다. Scala 2에서 null에 대처하는 일반적인 방법은 단순한 빌트인 타입 중 하나일 뿐인 Option 타입이고, 언어 자체에 null 안정성과 관련된 기능은 없다. 하지만 Scala 3에서는 `-Yexplicit-nulls` 컴파일러 옵션으로 타입 위계를 완전히 바꾸어서 레퍼런스 타입이라도 기본적으로 nullable하지 않게 할 수 있다. 이 경우, Null이 가능하게 하려면 `String|Null` 로 타입을 지정해야 한다. 타입시스템에 논리적 오류를 도입하지 않으면서도 null 안정성을 얻은 연구 성과이다. [10] JetBrains에서 제작했다. [11] 이 기능은 IntelliJ IDEA를 기반으로 만들어진 IDE인 Android Studio에도 존재한다.