티스토리 뷰

728x90

 


Null Safety

• 코틀린이 가지고 있는 언어적 특징

• Null을 처리하기 위한 코틀린의 문법

 

1. 자료형

• non-null -> Int

• nullable -> Int?

 

2. !!

• null이 아님을 보장

• but 코틀린이 확실하게 null이 아님을 판단하는 것이 아닌, 개발자가 코틀린에게 null이 아니니깐 넘어가~하고 보장하는 느낌.

• 실제로 개발자가 예측 못 한 null이 나올 수 있다.

• 되도록 사용 X -> 정말 필요할 때, 정말 확실할 때만 사용.

 

3. ?. (safe call)

• 원래 AAA 객체의 BBB라는 메소드를 실행하기 위해서는 AAA.BBB를 해야 한다.

     - AAA가 null일 경우 null 내부를 접근하려고 하여 오류가 발생한다.

     - 이런 경우 안전하게 메소드를 호출할 수 있는 safe call 사용.

• AAA?.BBB

     - 객체 AAA가 null이 아닌 경우 메소드 BBB를 실행

     - AAA가 null이면 BBB를 실행하지 않고 null을 리턴

     -> 즉, AAA가 null이 아닌 경우에만 BBB 실행을 보장한다.

val TEXT_HI: String? = "Hi"
val TEXT_NULL: String? = null
//println(text.length) // 오류 발생 : TEXT_HI가 null이 아님을 보장해야 한다.
println(TEXT_HI?.length) // 2 출력 : TEXT_HI가 String이므로 length인 2 출력
println(TEXT_NULL?.length) // null 출력 : TEXT_NULL이 null이므로 null 출력

 

4. as? (safe casting)

• as만 사용하는 경우에는 캐스팅이 실패하면 예외가 발생한다.

• as?를 사용하면, 캐스팅이 실패한 경우 null을 리턴한다.

 

5. ?: (Elvis Operation, 엘비스 연산)

• A ?: B

• A가 null이 아니면 A를 리턴, A가 null이면 B를 리턴

• if 조건식보다 길이가 훨씬 짧다.

println(TEXT_HI?.length ?: -1) // 2 출력 : TEXT_HI?.length가 2이므로 2 출력
println(TEXT_NULL?.length ?: -1) // -1 출력 : TEXT_NULL?.length가 null이므로 -1 출력

println(if (TEXT_HI?.length != null) TEXT_HI.length else -1) // 2 출력 : if문을 사용하면 결과는 같지만 코드가 훨씬 길다.
println(if (TEXT_NULL?.length != null) TEXT_NULL.length else -1) // null 출력 : if문을 사용하면 결과는 같지만 코드가 훨씬 길다.

 

 

 

 

 

 

 

이 글은

패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online

강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.

 


728x90
댓글
공지사항