본문 바로가기
Kotlin

형변환

by 코드닭 2024. 4. 22.

어떤 타입의 값을 다른 타입으로 변환하는 것으로 타입 캐스팅이라고도 한다


  • 기본타입 형변환

. 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