본문 바로가기

IT/kotlin언어

[Kotlin] 코틀린 자료/ 자료형의 확인 및 변환 (==, ===, is, as, 스마트 캐스트)


 안녕하세요 YTS 입니다. 


자료 또는 자료형의 확인 및 변환


 자료의 동일성확인 ==,=== 연산자


 자바에서는 자료의 동일성을 확인할때에 == 연산자를 사용하기도 합니다.

하지만 일반객체에서는 값뿐 만 아니라 객체 자체가 동일한지 여부도 따지기 때문에 equals() 메서드를 사용하여 객체의 값을 확인합니다.


 코틀린에서는 비교 대상이 객체, 객체 값의 동일성을 확인 하기 위해 구분할 필요 없이 모두 == 연산자를 사용하면 됩니다. 또한 ==연산자는  Null 여부도 함께 확인하기 때문에 자바처럼 널 포인트 오류를 방지 하실 필요가 없습니다.


class Equlas {
val a: String = "equlas"
val b = a
val c: String = "equlas"

val aEqualsB: Boolean = a == b //a와 b 의 값은 동일 하기 때문에 true
val aEqualsC: Boolean = a == c //a와 c 의 값은 동일 하기 때문에 true
val aB: Boolean = a === b //a와 b 의 값은 동일한 객체기 때문에 true
val aC: Boolean = a === c //a와 c의 값은 동일한 객체가 아니기 때문에 true
}


자료형 확인 is 연산자

 

 자바에서는 자료형의 일치를 instanceOf 연산자를 사용하지만 코틀린에서는 is 연산자를 사용합니다. 또한 코틀린에서는 특정 타입이 아닌경우를 확인하려면 !is로 표현 할 수 있습니다.


class Is {


fun isTypeName(obj: Any) {
if (obj is Int) {
Log.e("Type", "Type = Integer")
} else if (obj is Float) {
Log.e("Type", "Type = Float")
} else if (obj is String) {
Log.e("Type", "Type = String")
}
}

fun notIsTypeName(obj: Any) {
if (obj !is Int) {
Log.e("Type", "Not Type = Integer")
} else if (obj !is Float) {
Log.e("Type", "Not Type = Float")
} else if (obj !is String) {
Log.e("Type", "Not Type = String")
}
}
}


 자료형 변환 as 연산자

  

 코틀린에서는 특정 변수를 자신이 원하는 자료형으로 변환하기 위해서 as 연산자를 사용합니다. 자바는 (원하는 자료형)으로 사용되었지만 그에 비해 코틀린은 보다 간결해졌네요


class As {
fun asInt(number: Number) {
val int: Int = number as Int
}
}


 스마트 캐스트

 

 자바에서 instanceOf 연산자를 사용하여 객체의 자료형을 확인하더라도 이를 변환하기 위해서는 확인했던 자료형으로 다시 캐스팅 한 후에 사용이 가능합니다.

 

 코틀린에서는 이러한 불편함과 간결함을 위해 추론이 가능한 경우 캐스팅 없이 해당하는 자료형으로 객체가 변환되도록 스마트 캐스트 기능을 지원합니다. *var는 언제든지 값이 변할 수 있는 변수기 때문에 스마트 캐스트가 지원되지 않습니다.


class SmartCast {
fun smartCast(number: Number) {
if (number is Int) {
val a: Int = number //스마트 캐스트가 지원되어서 as 연산자를 거치지 않고 사용할 수 있습니다.
}
}
}