본문 바로가기

# 02/코틀린

[Kotlin] Null 처리 방법

반응형

java


- null을 허용한다.

- Android Annotation을 이용하여 @NonNull과 @Nullable을 지정할 수 있다.



Null 처리 메소드 - java


public void set(@NonNull String a, @Nullable String b) {

if(a == null) throw new NullPointerException("a is null");   // a가 null일 시 NullPointerException을 발생시킬 수 있다.

System.out.println("a " + a + ", b " +b);

}


-> Annotation을 사용할 수 있지만 다음 코드를 사용할 수 있다.

set(null, null);

// 빌드시 에러 안생김.



kotlin


- 기본적으로 null을 허용하지 않는다.

- null을 명시적으로 나타내기 위해서 ?을 추가해야 한다.

- java 디컴파일시 Exception이 발생하도록 내부 처리를 하고 있다.

- IDE에서 null을 사용할 수 없음을 즉시 알려준다.



Null 처리 메소드 - kotlin


fun set  (a : String, b : String?) {

// Do noting

}


-> null을 허용하지 않은 변수에 null을 대입하면 즉시 오류가 발생한다.

set(null, null)                                                                                     // 에러 발생 a가 null 이면 안됨





java to kotlin - NonNull


@NonNull String a = ""; -> var/val a : String = ""

-> java에서는 워닝이 발생하지만, kotlin은 오류가 발생한다.

@NonNull String a = null; -> var/val a : String = null


@Nullable String b = null; -> var/val b : String? = null

-> java/kotlin 모두 null 또는 초기화를 가질 수 있다.

@Nullable String b = ""; -> var/val b : String? = ""





if/else로 null 체크하기


-> java

String temp = null;

int size = 0;

if (temp != null) {

size = temp.length();

}


String temp = null;

int size = 0;

if (!TextUtils.isEmpty(temp)) {

size = temp.length();

}


-> kotlin

var temp : String? = null

var size = 0

if (temp != null) {

size = temp.length

}



-> java 에서 3항 식

String temp = null;

int size = temp != null? temp.length() : 0;



-> kotlin은 3항 식을 제공하지는 않는다.

var temp : String? = null

val size = if (temp != null) temp.length else 0




if/else 대신 safe Calls


safe Calls


// null을 포함할 수 있는 temp var 변수이며, null로 초기화 한다.

var temp : String? = null


// 물음표(?.)를 다시 한번 포함

val size = temp?.length



safe Calls의 장점은?


// 다음고 같이 초기화되었을 경우

// AAA aaa = new AAA(new BBB((CCC) null));


-> java

if (aaa != null && aaa.bbb != null && aaa.bbb.ccc != null) {

return aaa.bbb.ccc.name;

}

return null;



-> kotlin

return aaa?.bbb?.ccc?.name





fun test() {

val aaa : AAA? = AAA(BBB(null))

val name = aaa?.bbb?.ccc?.name

println("name $name")

}


data class AAA(val bbb : BBB?)

data class BBB(val ccc : CCC?)

data class CCC(val name : String?)



반응형

'# 02 > 코틀린' 카테고리의 다른 글

[Kotlin] Null 예외처리 - etc  (0) 2019.07.11
[Kotlin] Null 예외처리  (0) 2019.07.11
[Kotlin] return and jumps and This-expressions  (0) 2019.07.11
[Kotlin] Lambda  (0) 2019.07.11
[Kotlin] Control Flow - if/when/loops  (0) 2019.07.11