null 가능성을 편리하게 처리할 수 있는 다양한 연산자
오늘 학습할 아톰은 지난 아톰에서 null일 경우 역참조가 불가능하다는 부분에 대해서 처리할 수 있는 연산자에 대한 아톰으로 추정된다.
과연 어떻게 처리를 했을지 알아보도록 하자.
[ 안전한 호출 ]
안전한 호출
: 일반 호출에 사용하는 점(.)을 물음표와 점(?.)으로 표현한 연산자
: null이 될 수 있는 타입의 멤버에 접근하면서 예외가 발생하지 않도록 함
: 객체가 null이 아닐 때에만 연산을 수행하며, null일 경우 null을 결과로 출력
: if를 통해 null을 처리하는 것 대신 사용하여 더 간략하게 표현 가능
: 안전한 호출을 사용해 여러 멤버에 접근을 연쇄시키는 경우 중간에 null이 나온다면 결과로 null을 출력
import atomictest.eq
fun checkLength(s: String?, expected: Int?) {
val lengthl =
if (s != null) s.length else null // null 처리를 위한 if문
val length2 = s?.length // 안전한 호출을 이용한 null 처리
length1 eq expected
length2 eq expected
)
fun main() {
checkLength("abc", 3)
checkLength(null, null)
}
[ 엘비스 연산자 ]
엘비스 연산자
: ?. 결과로 null일 때 null 이상의 일이 필요한 경우 사용
: 물음표 뒤에 콜론(?:)을 붙인 연산자
: ?: 왼쪽 식이 null이 아니라면 왼쪽 식이 값으로, null이라면 오른쪽 식이 값으로 출력
import atomictest.eq
fun checkLength(s: String?, expected: Int) {
val lengthl =
if (s != null) s.length else 0 // if-else를 통해 null 여부에 따른 결과 출력
val length2 = s?.length ?: 0 // 엘비스 연산자 사용
length1 eq expected
length2 eq expected
}
fun main() {
val s1: String? = "abc"
(s1 ?: "一") eq "abc"
val s2: String? = null
(s2 ?: "—") eq "—"
checkLength("abc", 3)
checkLength(null, 0)
)
[ 오늘의 학습 소감 ]
오늘은 이전 아톰에서 null일 경우 참조를 위해 if문으로 null이 되는 경우를 차단하여 참조하는 방식을 보았는데, 오늘 아톰에서는 안전한 호출을 통해 이를 간단하게 표현할 수 있는 방법에 대해서 보았다. 또한 if-else 대신에 사용할 수 있는 엘비스 연산자도 학습하였는데, null이 중요하고 자주 다루는 만큼 오늘의 아톰 내용은 반드시 알아 두어야 겠다는 생각이 들었다. 또한, 위의 블로깅에서 언급하지는 않았지만, 널 아닌 단언(!!.) 호출도 있는데 이는 다음 아톰에서 설명하는 것으로 보이기에 다음 아톰시간에 어떻게 사용되는지 학습할 예정이다. 40 아톰까지 null에 대해 다루는 만큼 확실하게 알아두면 좋을 것 같다.
'공부 자료 > 코틀린[Kotlin]' 카테고리의 다른 글
[Atomic 40] 확장 함수와 널이 될 수 있는 타입(라이브러리 함수) (0) | 2024.02.20 |
---|---|
[Atomic 39] 널 아님 단언 (0) | 2024.02.20 |
[Atomic 37] 널이 될 수 있는 타입 (0) | 2024.02.13 |
[Atomic 36] 구조 분해 선언 (1) | 2024.02.08 |
[Atomic 35 ] 데이터 클래스 (feat. data class 클래스명) (0) | 2024.02.07 |