널 가능성
- 널이 될 수 있는지 여부를 타입 시스템에 추가함으로써 컴파일 시 미리 감지함.
- 타입 이름 뒤에 물음표를 명시해야 함.'
- 어떤 타입이든 타입 이름 뒤에 물음표를 부티면 그 타입의 변수나 프로퍼티에 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")
}
}
'안드로이드' 카테고리의 다른 글
[안드로이드] Jetpack (0) | 2022.09.30 |
---|---|
[코틀린] 이미지 로딩 라이브러리 Glide vs Picasso (0) | 2022.09.29 |
[코틀린] 코틀린 - 코루틴, Scope function (0) | 2022.09.27 |
[코틀린] 코틀린 기초 - 3 (0) | 2022.09.26 |
[코틀린] 코틀린 기초 - 2 (0) | 2022.09.25 |