어떤 타입의 값을 다른 타입으로 변환하는 것으로 타입 캐스팅이라고도 한다
- 기본타입 형변환
. to타입명()으로 사용한다
var variable
variable.toInt() // Int 타입으로 타입 캐스트
variable.toStirng() // String 타입으로 타입 캐스트
variable.toBoolean() // Boolean 타입으로 타입 캐스트
variable.toChar() // Char 타입으로 타입 캐스트
variable.toLong() // Long 타입으로 타입 캐스트
variable.toDouble() // Double 타입으로 타입 캐스트
- 스마트 캐스트
조건문을 통해 타입을 검사해서 안전하게 형변환하는 방법
val value: Any = "Hello"
if (value is String) {
// value가 String 타입으로 스마트 캐스트되어 여기서는 String으로 사용할 수 있다
println(value.length) // 이제 length 속성에 접근할 수 있다
println(value.toUpperCase()) // 이제 String 메서드를 사용할 수 있다
} else if (value is Int) {
// value가 Int 타입으로 스마트 캐스트되어 여기서는 Int로 사용할 수 있다
println(value * 2) // 이제 Int 연산을 수행할 수 있다
} else if (value is Double) {
// value가 Double 타입으로 스마트 캐스트되어 여기서는 Double로 사용할 수 있다
println(value / 2) // 이제 Double 연산을 수행할 수 있다
}
- 명시적 형변환 as
변수나 표현식의 타입을 개발자가 직접 지정하여 변경하는 것
변수명 as 타입명의 형태로 개발자가 직접 변수의 타입을 지정한다
fun printLength(value: Any) {
value as String
println(value.length)
}
변환에 실패할 경우 'ClassCastException'이 발생할 수 있다
이전 글(코틀린에서의 Null 값 처리)에서도 나온 as?(Safety Call)-안전한 형변환을 사용하면 캐스트 후 값이 null 이 아닐 경우만 캐스트를 실행하여 안전하게 형변환 할 수 있다
- 자동 형변환
코틀린에서 부모 클래스에서 자식 클래스로의 형변환은 자동으로 이루어진다 (Up Casting)
open class Animal { // 부모 클래스
fun makeSound() {
println("Animal makes a sound")
}
}
class Dog : Animal() { // 자식 클래스
fun bark() {
println("Dog barks")
}
}
fun main() {
val animal: Animal = Dog() // 업캐스팅: Dog 클래스의 인스턴스가 Animal 타입으로 자동 형변환
animal.makeSound() // Animal 클래스의 메서드를 호출할 수 있다
animal.bark() // 컴파일 에러: Animal 타입으로 자동 형변환된 변수는 Dog 클래스의 메서드를 호출할 수 없다
}
'Kotlin' 카테고리의 다른 글
클래스 조합 (0) | 2024.04.23 |
---|---|
람다식을 이용해서 고차함수 쉽게 표현 (2) | 2024.04.22 |
스코프 함수 (0) | 2024.04.22 |
lateinit, lazy (0) | 2024.04.19 |
코틀린에서의 Null 값 처리 (0) | 2024.04.18 |