728x90
반응형
kotlin에서의 null-safety
kotlin에서는 null-safety를 위해 ?를 사용한 문법을 사용한다.
?는 기본적으로 변수나 객체가 null을 허용할 수 있음을 나타낸다.
kotlin은 null-pointer exception을 예방하기 위해 null이 허용되는 타입과 허용되지 않는 타입을 구분하는데, 그 상황에 쓰일 수 있다.
?를 붙이면 해당 타입의 변수가 null을 가질 수 있음을,
붙이지 않으면 null을 할당할 수 없음을 나타낸다.
예를 들면, 다음과 같다.
var nullableString: String? = null // null 값을 허용
var nonNullableString: String = "Hello" // null 값 허용하지 않음
nullableString = "Hi" // 가능
nonNullableString = null // 컴파일 오류 발생
? operator의 종류
?를 붙여 나타낼 수 있는 연산자에는 safe call(?.), elvis operator(?:), non-null assertion(!!)이 있다.
ㅇ safe call ?.
안전하게 호출하기 위해 사용하는 연산자
객체가 null이면 호출을 무시하고 null을 반환하도록 한다.
val nullableString: String? = null
println(nullableString?.length) // 길이 대신 null 반환 (예외 발생x)
ㅇ elvis operator ?:
null이면 기본값을 제공하는 연산자
"a ?: b" 와 같이 사용할 수 있다.
만약 a가 널이면 b를 반환한다.
val nullableString: String? = null
val length = nullableString?.length ?: 0 // nullableString이 null이면 0 반환
println(length) // null이므로 0 출력
여기서 a의 역할은 nullableString?.length가 하고 있고, b의 역할은 0이 하고 있다.
(nullableString?.length) ?: (0)의 형태인 것
nullableString은 현재 null을 가지고 있으므로, elvis operator에 의해 기본값인 0을 리턴한다.
따라서 length는 0
ㅇ non-null assertion !!
강제로 null이 아님을 명시하는 연산자
변수나 객체가 null일 경우, 런타임에 NullPointerException이 발생한다.
val nullableString: String? = null
println(nullableString!!.length) // 런타임에서 NullPointerException 발생
런타임에 exception이 발생하기 때문에 가능한 사용을 피하는 것을 권고한다.
728x90
반응형
'CS > Kotlin' 카테고리의 다른 글
[Kotlin 문법] 11. 입출력 (2) - 파일 입출력 (1) | 2025.02.11 |
---|---|
[Kotlin 문법] 10. 입출력 (1) - 콘솔 입출력, 문자열 포맷팅(출력 형식 지정) (0) | 2025.02.11 |
[Kotlin 문법] 9. Null Safety (0) | 2024.06.13 |
[Kotlin 문법] 8. Class (1) | 2024.06.12 |
[Kotlin 문법] 7. Lambda expression (0) | 2024.06.12 |