코틀린에는 Byte, Short, Int, Long, Float, Double, 부호없는 정수들이 존재한다.
기본적으로 많이 쓰이는 타입을 알아보자.
코틀린에서는 선언된 기본 값을 보고 타입을 추론한다.
val number1 = 3 // Int
val number2 = 3L // Long
val number3 = 3.0f // Float
val number4 = 3.0 // Double
예를들어 정수에 L 이 붙으면 8byte Long 으로 추론하고 그렇지않으면 4byte Int 로 추론한다. 정수가 아닐 때 f 가 붙으면 Float, 붙지않으면 Double 로 추론한다.
자바는 암시적, 코틀린은 명시적으로 이루어져야한다.
int number1 = 4;
long number2 = number1;
System.out.println(number1 + number2);
자바의 경우 큰 타입인 long 으로 자동변환된다.
val number1 = 4
val number2: Long = number1 // 에러 발생
코틀린에서는 타입 미스매치 에러를 발생시킨다.
이와 같이 암시적인 변경이 불가능하여 number1.toLong()
과 같이 .to~~~()
메서드를 이용하여 명시적으로 변환시켜주어야한다.
자바에는 instanceof
가 존재한다.
if (obj instanceof Person) {
Person person = (Person) obj;
}
코틀린에서는 instanceof 를 사용하지 않고
if (obj is Person) {
val person = obj as Person
}
위와 같이 is
로 표현하며 타입캐스팅시 (Type)
이 아닌 as Type
으로 캐스팅한다.
val person = obj as? Person
만약 obj 가 nullable 할 때 타입캐스팅을 한다면 as 뒤에 ?
를 붙여 처리하면 된다. 위의 경우 value 가 null 이거나 해당 타입이 아니면 null 을 리턴한다.
자바에 없는 Any, Unit, Nothing 이라는 타입이 존재한다.
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
실제로 별로 사용되지는 않는다.
Person person = new Person("종구", 30);
String log = String.format("이름은 %s이고 나이는 %s세 입니다", person.getName(), person.getAge());
StringBuilder builder = new StringBuilder();
builder.append("이름은 ");
builder.append(person.getName());
...
builder.append("세 입니다");
val person = Person("종구", 30)
val log = "이름은 ${person.name}이고 나이는 ${person.age}세 입니다"
복잡한 자바의 표현과 다르게 코틀린은 위와 같이 편하게 표현할 수 있다. 객체가 아닌 단순한 변수같은 경우는 중괄호를 빼고 $name
등으로 표현할 수 있다.
fun main() {
"""
ABC
EFG
""".trimIndent()
}
위와 같이 표현하면
ABC
EFG
여러줄에 걸친 문장을 작성할 때 위와 같이 쉽게 작성할수도 있다.
java 에서 String str = "ABC"
에서 B
라는 워딩을 가져오고싶다면 str.charAt(1)
으로 표현해야하지만 코틀린에서는 str[1]
로 간편하게 표현가능하다.