Byte
, Short
, Int
, Long
, Float
, Double
val number1 = 3 // Int
val number2 = 3L // Long
암시적
명시적
int
타입이 long
타입으로 암시적 변경이 가능하다.
int number1 = 4;
long number2 = number1;
System.out.println(number1 + number2);
to변환타입()
을 사용하여 명시적 타입 변경을 해야 한다.val number1 = 4
val number2: Long = number1 // 컴파일 에러!!
val number1 4
val number2: Long = number1.toLong() // 가능
// nullable 타입에서 명시적 타입 변환
val number3: Int? = 1
val number4: Long = number3?.toLng() ?: 0L
public static void printAgeIfPerson(Object obj) {
if (obj instanceof Person) {
Person person = (Person) obj;
System.out.println(person.getAge());
}
}
Object
타입 대신 Any
instanceof
대신 is
(Person)
대신 as Person
fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
val person = obj as Person // 타입 체크 없이 수행하면 예외가 발생
println(person.age)
}
}
is
키워드 사용 후에는 자동으로 형변환이 이루어지기에 as
키워드도 필요 없다.fun printAgeIfPerson(obj: Any) {
if (obj is Person) {
println(obj.age)
}
}
!is
를 사용할 수 있다.
if (obj !is Person)
obj
에 null
이 들어오는 경우
as
키워드에 Safe Call처럼 as?
를 사용할 수 있다.as?
를 쓰면 as
와 달리 타입이 불일치 하는 경우에 예외 발생이 아닌 전체가 null
이 된다.fun printAgeIfPerson(obj: Any?) {
val person = obj as? Person
println(person?.age)
}
Object
역할 (모든 객체의 최상위 타입)Any
Any
자체로는 null
을 표현할 수 없기에 Any?
사용Any
에 equals
, hasCode
, toString
존재Unit
은 Java의 void
와 동일한 역할void
와 다르게 Unit
은 그 자체로 타입 인자로 사용 가능Unit
은 단 하나의 인스턴스만 갖는 타입을 의미
fun fail(message: String): Nothing {
throw IllegalArgumentException(message)
}
${변수}
를 사용할 수 있다.val person = Person("이동규", 27)
val log = "이름은 ${person.name}이고 나이는 ${person.age}세 입니다."
{}
를 생략해도 된다.val name = "이동규"
val log = "이름 : $name"
val withoutIndent = """
ABC
123
456
""".trimIndent()
println(withoutIndent)
val str = "ABC"
println(str[0]) // A
println(str[1]) // B
println(str[2]) // C