Kotlin - Casting Object(객체 타입 변환)

개인 공부 후 자료를 남기기 위한 목적임으로 내용 상에 큰 문제가 있을 수도 있습니다.
잘못된 내용이 있다면 언제든지 편하게 댓글 남겨주시면 감사하겠습니다.


Casting Object 이해하기

Type Conversion은 2가지 형태로 나눈다

  • Implicit Conversion
    • 암시적으로 컴파일러가 자동으로 데이터 유형을 변환한다.
  • Explicit Conversion
    • 변환 할 데이터 유형을 명시적으로 지정한다는 것을 의미한다.
    • 예) String.valueOf, Integer.parseInt… 등..

자료형 변환

  • Data Type Bigger(Safe Cast)
    • Byte > Short > Int > Long > Float > Double
    • 예) Int에서 Double로 변환
  • Data Type Smaller(Unsafe Cast)
    • Double > Float > Long > Int > Short > Byte
    • 데이터가 큰 저장 영역에서 작은 데이터 영역으로 이동할 때 데이터가 손실이 되기 때문에 안전하지 않다

Kotlin Casting Object 이해하기

Implicit Conversion을 지원하지 않는다.

  • Kotlin은 컴파일러가 의도를 추측하는 것을 극도로 싫어한다.
  • 숫자 형식 변환을 포함해서 언어의 모든 내용을 명시적으로 표현해야 한다.

Explicit Conversion Method(명시적 변환 메소드)

  • toByte(): Byte
  • toShort(): Short
  • toInt(): Int
  • toLong(): Long
  • toFloat(): Float
  • toDouble(): Double
  • toChar(): Char

String > Int로 변환

1
2
3
4
5
6
7
8
9
fun main(args: Array<String>) {
var a = "20"
var b = "30"

var result = a.toInt() + b.toInt()
print("${result}")
}

// result = 50

변수에 data type을 return

1
2
3
4
5
6
fun main(args: Array<String>) {
var a = 1000
print("a data type? ${a.javaClass.kotlin.qualifiedName}")
}

// a data type? kotlin.Int

Safe cast

1
2
3
4
5
6
7
fun main(args: Array<String>) {
var a = 100
var b: Long = a.toLong()
print("b data type? ${b.javaClass.kotlin.qualifiedName}")
}

// b data type? kotlin.Long

  • 데이터 손실이 없다.

Unsafe cast

1
2
3
4
5
6
7
8
9
fun main(args: Array<String>) {
var a: Float = 100.2f
var b: Int = a.toInt()
print("b data type? ${b.javaClass.kotlin.qualifiedName}")
print("b: ${b}")
}

// b data type? kotlin.Int
// b: 100

  • 0.2에 데이터 손실이 생겼다(아까워라 T_T).
Share