기본 문법
- 자바에서는 원시타입을 감싸는 특별한 박싱 타입이 있지만, 코틀린은 필요할 때 암시적으로 박싱을 수행한다.
//java
int primitiveInt = 10;
Integer boxedInt = Integer.valueOf(primitiveInt); // Boxing
// 사실 Integer boxedInt = 10 도 가능
int unboxedInt = boxedInt.intValue(); // Unboxing
//kotlin
val primitiveInt = 10 // 코틀린에서는 자동으로 Int로 처리, 박싱이 필요없음
타입
- 타입추론
- Array<Int>를 사용하는 배열은 제대로 작동하지만 모든 수를 박싱하기 때문에 그다지 실용적이지 못한 해법이다.
Null safety
var a: String = "abc" // Regular initialization means non-nullable by default
a = null // compilation error
var b: String? = "abc" // can be set to null
b = null // ok
print(b)
val l = b.length // error: variable 'b' can be null
//first
val b: String? = "Kotlin"
if (b != null && b.length > 0) {
print("String of length ${b.length}")
} else {
print("Empty string")
}
//second
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length) // Unnecessary safe call
//third (anti-pattern)
val l = b!!.length
- Unit = JAVA void 함수와 동일 (반환 없는 경우)
- Void = 자바의 Void 클래스