Kotlin Primitive Type Casting (기본 타입의 형 변환)
Primitive Type Casting (기본 타입의 형 변환)
- Kotlin 에서는 기본 타입을 관리하는 객체의 타입을 변경하는 메서드를 제공한다.
- 참조 변수의 타입이 변경되는 것이 아닌 새로운 객체가 생성되어 반환된다.
- toByte(), toShort(), toInt(), toLong(), toFloat(), toDouble(), toChar()
소개
코틀린에서 데이터 타입은 기본 타입과 참조 타입으로 분류됩니다. 기본 타입에는 Byte, Short, Int, Long, Float, Double, Char 등이 포함되며, 참조 타입은 클래스와 인터페이스를 포함합니다. 기본 타입을 다룰 때는 서로 다른 타입 사이에서 변환하거나 형변환하는 방법을 이해하는 것이 중요합니다. 코틀린은 이러한 변환을 위한 다양한 메서드를 제공합니다.
기본 타입(Primitive Type)
Byte, Short, Int, Long, Float, Double, Char, Boolean 등 기본적인 데이터 타입으로, Java와 비슷하게 동작합니다. 기본 타입은 자바의 원시 타입과 유사하지만, 코틀린에서는 모든 것이 객체이므로 기본 타입도 내부적으로 객체로 취급됩니다.
참조 타입(Reference Type)
클래스, 인터페이스 등과 같이 사용자가 직접 정의한 타입으로, 기본 타입이 아닌 모든 타입을 참조 타입으로 간주합니다.
메모리 할당
- 기본 타입은 값(value) 자체를 저장하기 위해 스택(stack) 메모리에 직접 할당됩니다. 따라서 빠르고 메모리 사용이 효율적입니다.
- 참조 타입은 객체를 표현하는 참조(reference)를 스택 메모리에 할당하고, 실제 객체는 힙(heap) 메모리에 저장됩니다. 이로 인해 객체의 크기가 크거나 복잡한 구조를 가질 때 더 많은 메모리를 차지하고, 메모리 할당 및 해제에 일정한 오버헤드가 발생할 수 있습니다.
기본 타입 형변환 예제
fun main() {
val intValue: Int = 42
val longValue: Long = intValue.toLong() // Int를 Long으로 변환
val doubleValue: Double = 3.14
val intValueFromDouble: Int = doubleValue.toInt() // Double을 Int로 변환
}
fun main() {
var number1: Int = 100
var number2: Long = number1.toLong()
println("number2 : $number2")
val str1:String = "100"
val number3:Int = str1.toInt()
val str2:String = "안녕하세요"
val numbe3:Int = str2.toInt() // 오류 발생 함.
}
Exception in thread "main" java.lang.NumberFormatException: For input string: "안녕하세요"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at MainKt.main(Main.kt:10)
at MainKt.main(Main.kt)
위 코드에서 str2 가 "안녕하세요" 문자열을 가지고 있는데, 이를 toInt() 로 Integer 타입으로 형변환 할려고 하자, "안녕하세요" 문자열은 정수형으로 변환 할 수 없기 때문에, Exception 이 발생한다.
str2.toInt()에서 NumberFormatException이 발생합니다. 이는 toInt() 메서드가 문자열을 숫자로 변환할 수 없는 경우에 발생하는 예외입니다. 이유는 "안녕하세요"와 같이 숫자가 아닌 문자가 포함된 문자열을 toInt()으로 변환하려고 하기 때문입니다.
toInt() 메서드는 숫자로만 이루어진 문자열을 숫자로 변환하는 데 사용되며, 숫자 이외의 문자가 포함되어 있으면 변환할 수 없어 예외가 발생합니다.
해당 예외를 처리하려면 try-catch 블록을 사용하여 예외를 잡아낼 수 있습니다.
수정 코드
fun main() {
var number1: Int = 100
var number2: Long = number1.toLong()
println("number2: $number2")
val str1: String = "100"
val number3: Int = str1.toInt()
val str2: String = "안녕하세요"
val number4: Int? = str2.toIntOrNull()
if (number4 != null) {
println("number4: $number4")
} else {
println("숫자로 변환할 수 없습니다.")
}
또는 위와 같이 toIntOrNull() 으로 대체할 수 있습니다. toIntOrNull() 메서드를 사용하여 변환이 실패하면 null을 반환하도록 변경할 수 있습니다.
toIntOrNull() 메서드를 사용하면 변환이 실패하더라도 예외가 발생하지 않고 null이 반환됩니다. 이후 number4가 null이 아닌 경우에만 해당 숫자를 출력하고, null인 경우에는 오류 메시지를 출력하도록 처리하였습니다. 이렇게 하면 프로그램이 비정상적으로 종료되지 않고 예외 상황에 대응할 수 있습니다.
댓글
댓글 쓰기