본문 바로가기
C++ 200제/코딩 IT 정보

안드로이드 코틀린 Nullable, Unsafe cast 예제

by vicddory 2019. 7. 9.

■ Optional (Nullable)


null과 null이 아닌 것으로 구분됩니다. null 유뮤를 검사하며, 일반적으로 이런 기능을 제공하는 것에 대해 Optional이라고 합니다. Kotlin에서는 Nullable이라고 합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
fun getLengthOfString(str: String): Int {
    return str.length()    
}
 
fun getLengthOfStringOpt(str: String?): Int {
    if (str != null) {
        return getLengthOfString(str)
    } else {
        return 0
    }
}
 
fun main(args: Array<String>) {
    val a = getLengthOfString("hello")
    val b = getLengthOfStringOpt("world")
    val c = getLengthOfStringOpt(null)
    println("$a, $b, $c")   
}
cs



안드로이드 코틀린 Nullable 형식은 오른쪽에 "?"를 붙여 표기합니다. Swift의 Optional형과 사용 방법이 같아 기분 좋네요.


Java에는 언어 기능으로서의 Optional은 없습니다.


자바 표준 라이브러리는 언어 기능에 포함하지 않는다고 생각합니다.

Java 표준 라이브러리의 Optional은 null 안전성을 제공하는 기능으로는 부족하다고 생각합니다.

■ Unsafe cast


Nullable 결과가 null인 경우에 발생하는 상황이 있습니다.



1
2
3
4
5
fun hoge(a: Int?, b: Animal?) {
    val c: Int = a!! // null이라면 예외
    val d: Cat? = b as? Cat // Cat이 없으면 null
    val e: Cat = b as Cat // Cat이 없으면 예외
}
cs



Switft로는 아래처럼 구성할 수 있ㅅ브니다.



1
2
3
4
5
func hoge(a: Int?, b: Animal?) {
    let c: Int = a! // null이라면 예외
    let d: Cat? = b as? Cat // Cat이 없으면 null
    let e: Cat = b as! Cat // Cat이 없으면 예외
cs



Kotlin은 !를 두개 사용하지만, Swift는 한개입니다. (! = 느낌표 연산자)

Swift as에 붙은 !를 보고 깜짝 놀라는 경우도 있습니다. (? = 물음표 연산자)

안드로이드 코틀린에는 as 뒤에 !가 붙지 않습니다.



안드로이드 코틀린 Nullable, Unsafe cast 예제Android Kotlin 예제 소개 끝~




관련 글

2019/07/07 - 안드로이드 코틀린 Smart casts 소스, Swift Java 비교

2019/07/06 - 안드로이드 코틀린 장점, 쉬운 도입과 자바 연계성

2017/06/09 - C# 코드 최적화 7가지 (작업 속도와 효율성 향상)



ⓒ written by vicddory

댓글