안드로이드

[코틀린] 코틀린 - 타입 시스템

이손안나 2022. 9. 28. 23:26

널 가능성

 

  • 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일 시 미리 감지함.
  • 타입 이름 뒤에 물음표를 명시해야 함.'
  • 어떤 타입이든 타입 이름 뒤에 물음표를 부티면 그 타입의 변수나 프로퍼티에 Null 참조를 저장할 수 있음.
// error

fun strLenSafe(s: String?) = s.lenth()

// ok

fun strLenSafe(s: String?)Int = 
	if (s != null) s.lenth else 0

안전한 호출 연산자 : ?.

  • ?.은 null검사와 메소드 호출을 한 번의 연산으로 수행.
  • 호출하려는 값이 null이 아니라면 ?.은 일반 메소드 호출처럼 작동하고 null이면 이 호출은 무시되고 null이 결과 값이 된다.
s?.toUpperCase() 와 if(s !=null) s.toUpperCase() else null 이 같다.

엘비스 연산자 ?:

  • 코틀린은 null 대신 사용할 디폴트 값을 지정할 때 편리하게 사용할 수 있는 연산자를 제공.
fun foo(s: String?) {
	val t: String = s ?: ""
}

throw 와 엘비스 연산자 함께 사용하기

fun printShippingLabel (person: Person) {
	val address = person.company?.address
    ?: throw IllegalArgumentException("No address")
    
    with(adddress) {
    	println(streetAddress)
        println("$zipCode $city, $country")
    }
}