반응형
코틀린을 조금 더 코틀린스럽게 사용하기 위해 자료형 변환을 정리하고자 한다.
인터페이스를 추상화하여 사용했을 때 코틀린의 as, as? 를 통해 간편하게 자료형 확인과 변환이 가능해서 편리했다.
자바와 비교해 보며 어떠한 차이가 있는지 학습했다.
as
- is used fo type casts
- specifies an alias for an import
Kotlin에서 as는 타입 캐스팅으로 사용할 수 있다.
Unsafe cast operator
val x: String = y as String
- If the cast isn’t possible, the compiler throws an exception.
- as로 타입 캐스트를 하는데 불가능한 타입이면 예외가 발생하는 문제가 생긴다.
- 또한, y가 null 인 경우에도 Exception이 발생하여 타입을 안전하게 캐스팅해주어야 합니다.
val y = null
val x: String = y as String // 오류 발생
---
val y = null
val x: String? = y as String?
println(x)
// output
// null
Safe cast operator
val x: String? = y as? String
- use the case operator as? , which returns null on failure
- as? 를 사용하는 경우 캐스팅 실패 시 null을 반환합니다. 반환형의 String?을 통해 안전하게 캐스팅할 수 있습니다.
is
- checks that a value has a certain type
- is used in when expressions for the same purpose
@Test
fun test() {
val people = People("gyeom", 12)
if (people is People) {
println(true)
} else{
println(false)
}
}
// 출력
// true
When & is
val x = 2
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> print("x is neither 1 nor 2")
}
// x == 2
- when is a conditional expression that runs code based on multiple possible values or conditions.
- Java의 Switch와 유사하다.
Java와 비교
// JAVA
if(o instanceof UserVo) {
UserVo userVo = (UserVo) o;
System.out.println(userVo.getUserName());
}
if(o instanceof AdminVo) {
AdminVo adminVo = (AdminVo) o;
System.out.println(adminVo.getAmdinName());
}
if(o instanceof AnonymousVo) {
AnonymousVo anonymousVo = (AnonymousVo) o;
System.out.println(anonymousVo.getAnonymousName());
}
// Kotlin 1
if(o is UserVo) {
println(o.userName);
}
if(o is AdminVo) {
println(o.adminName);
}
if(o is AnonymousVo) {
println(o.anonymousName);
}
코틀린에서는 Smart Cast 기능을 제공해, 타입 체크를 하면 기존 변수를 타입 캐스팅 없이 그대로 사용할 수 있습니다.
is를 통해 값을 확인한 후 바로 조건문에서 사용할 수 있습니다.
조건문에서 사용할 수 있다면, 코틀린 공식문서에서 when 또한 conditional expression로 사용되기에 when을 통해 더 간단하게 처리할 수도 있습니다.
// Kotlin 2
println(
when (o) {
is UserVo -> o.userName
is AdminVo -> o.adminName
is AnonymousVo -> o.anonymousName
else -> "Unknown"
}
)
반응형
'Kotlin' 카테고리의 다른 글
Kotlin 클래스 상속 알아보기 - inheritance (0) | 2025.01.05 |
---|---|
Kotlin 안전한 Null 처리 방법 : ?., ?:, !! 활용 및 SQL, 메모리 최적화 전략 (0) | 2024.12.16 |
Kotlin init(생성자), constructor(보조 생성자), get, set 이해하기 (0) | 2024.12.15 |