기본 타입
# JAVA
int num1 = 3;
long num2 = 4L;
num1 + num2 // 자바에서는 가능
# Kotlin
val num1: Int = 1
val num2: Long = 2
num1 + num2 // 컴파일 에러 발생
[자바] 기본 타입간의 변환은 암시적으로 이루어질 수 있다.
[코틀린] 기본 타입간의 변환은 명시적으로 이루어져야 한다.
타입 캐스팅
# JAVA
public static void printAgeIfPerson(Object obj) {
if(obj instanceof Person) {
Person person = (Person) obj;
System.out.println(person.getAge());
}
}
# Kotlin
fun printAgeIfPerson(obj: Any?) {
if(obj is Person) {
val person = obj as? Person
println(person?.age);
}
}
코틀린의 특이한 타입 3가지
Any
Java의 Object 역할. (모든 객체의 최상위 타입)
모든 Primitive Type의 최상의 타입도 Any이다.
Any 자체로는 null을 포함할 수 없어 null을 포함하고 싶다면, Any?로 표현.
Any 에 equals / hashCode / toString 존재
Unit
Unit은 Java의 void와 동일한 역할.
void와 다르게 Unit은 그 자체로 타입 인자로 사용 가능하다.
함수형 프로그래밍에서 Unit 은 단 하나의 인스턴스만 갖는 타입을 의미. 즉, 코틀린의 Unit은 실제 존재하는 타입이라는 것을 표현
Nothing
Nothing은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할
무조건 예외를 반환하는 함수 / 무한 루프 함수 등
String interpolation / String indexing
val person = Person("김수혁", 27)
val log = "사람의 이름은 ${person.name}이고 나이는 ${person.age}"
val withoutIndent =
"""
123
456
ABC
""".trimIndent()
println(withoutIndent)
총정리
코틀린의 변수는 초기값을 보고 타입을 추론하며, 기본 타입들 간의 변환은 명시적으로 이루어진다.
코틀린에서는 is, !is, as, as? 를 이용해 타입을 확인하고 캐스팅한다.
코틀린의 Any는 Java의 Object와 같은 최상위 타입이다.
코틀린의 Unit은 Java의 void와 동일하다.
코틀린에 있는 Nothing은 정상적으로 끝나지 않는 함수의 반환을 의미한다