본문 바로가기

공부 자료/코틀린[Kotlin]

[Atomic 40] 확장 함수와 널이 될 수 있는 타입(라이브러리 함수)

보이는 것과 실체가 다를 수 있다?

 

 

오늘의 아톰은 코틀린 표준 라이브러리에서 제공하는 널과 관련된 함수에 대해서 알아볼 예정이다.

 


 

isNullOrEmpty()

: 수신 String이 null이거나 빈 문자열인지 검사

 

isNullOrBlank()

: isNullOrEmpty()와 같은 검사를 수행

: 온전히 공백 문자(공백 뿐 아니라 탭(/t)과 새줄 문자(/n)도 포함)로만 구성되어 있는지 검사

 

import atomictest.eq

fun main(){
	val s1:String? = null
    s1.isNullOrEmpty() eq true
    s1.isNullOrBlank() eq vtrue
    
    val s2 = ""
    s2.isNullOrEmpty() eq true
    s2.isNullOrBlank() eq true
    
    val s3 = " \t\n"
    s3.isNullOrEmpty() eq false
    s3.isNullOrBlank() eq true
}

 


 

[ isNullOrEmpty() 비확장 함수로 작성 ]

 

위의 isNullOrEmpty()를 널이 될 수 있는 String? s를 파라미터로 받는 비확장 함수로 다시 작성이 가능하며,

확장 함수가 더 읽기 간편함

 

import atomictest.eq

fun isNullOrEmpty(s: String?): Boolean = 
	s == null || s.isEmpty()

// fun String?.isNullOrEmpty(s: String?): Boolean = 
//	s == null || s.isEmpty()
    
fun main() {
	isNullOrEmpty(null) eq true
	isNullOrEmpty("") eq true
    // "".isNullOrEmpty() eq true
}

 

: 확장 함수는 this를 사용해 수신 객체(확장 대상 타입에 속하는 객체)를 표현

: 널이 될 수 있는 타입으로 지정하기 위해서는 확장 대상 타입 뒤에 ?를 붙이면 됨

 

* 쇼트 서킷 : || 에서 첫 번째 식이 true이면 두 번째 식을 검증하지 않아도 true로 결과가 결정됨