코틀린에서 Null Safety 의미
Null을 안전하게 처리한다는 것은 Null이 생기지 않도록 숨기거나 없애는 것이 아닌, 오히려 Null을 명시적으로 드러내고 처리 로직을 준비하겠다는 것을 의미한다. 이렇게 하는 이유는, Kotlin은 기본적으로 null 값을 가질 수 있도록 설계가 되었기 때문에 컴파일러 입장에서 runtime시에 준비없이 Null을 만나지 않고, compile시에 Null을 만나도록 하여 사전에 미리 처리할 수 있는 로직들을 준비해두도록 하기 때문이다.
1. Null Safety를 위한 프로세스
- 명시적으로 null 값이 존재한다고 선언을 해주어야 한다.
- null 값인지? 아닌지? 체크를 해야 한다.
- null 변수나 함수를 호출할때에는 null을 처리할 수 있는 로직을 준비하고 호출해야한다.
- null이 발견되었다면 관련된 action을 명시적으로 어떻게 해야할지 선언해야 한다.
이러한 프로세스를 외우지 말고 처음에는 일부러 null compile 에러가 나도록 예제를 만든 후, null safety 로직을 추가해가면서 clean한 Null Safety 코드를 만들어 보는 연습을 해보면 좋다.
2. Nullable Type
? 표시를 사용해 Null 이 될 수도 있음을 미리 컴파일러에게 알려준다. ?를 표시할때에는 Type을 선언한뒤 Type? 형태로 사용한다.
일반 변수에 Null을 대입할 수 없음
에러없이 null 대입 가능
3. Null check
null이 될 수 있는 변수임에도 체크를 하지 않으면 컴파일 에러가 발생한다.
fun nullCheckTest(name: String?) {
println("length is ${name.length}")
}
fun main() {
nullCheckTest(null)
}
--
C:\Users\happy\IdeaProjects\HelloWorld\src\main.kt:227:30
Kotlin: Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type 'kotlin.String?'.
하지만, Null을 체크하는 로직을 넣으면 컴파일시에도 문제 없이 사용이 가능하다.
fun nullCheckTest(name: String?) {
if (name.isNullOrEmpty()) {
println("Please input name.")
} else {
println("$name length is ${name.length}")
}
}
fun main() {
nullCheckTest(null)
nullCheckTest("Michael")
}
--
Please input name.
Michael length is 7
4. Elvis Operator (엘비스 오퍼레이터) 설명
Elvis Operator란 ?: 엘비스 프레슬리의 헤어스타일과 비슷해 보인다고 하여 붙여진 이름으로써 왼쪽에 Null을 체크하고 오른쪽에는 Null이 탐지되었을때 던져줄 값을 정의해주는 것이다. 매우 유용하니 꼭 기억해두기 바란다.
var userName: String?
userName = null
val loginUser1 = userName ?: "Please, login first."
println(loginUser1)
userName = "Elvis Presley"
val loginUser2 = userName ?: "Please, login first."
println("Hi, $loginUser2")
Ok! 오늘 강의까지 코틀린을 알아보았다. 이 정도만 이해하고 있어도 앞으로 코틀린을 사용해나가는데에는 큰 어려움이 없을 것이다. 이제, 본격적으로 코틀린을 Spring Boot에 적용해보자!
'Kotlin' 카테고리의 다른 글
[Kotlin 강의] 데이터 저장에 매우 편리한 Kotlin Data Class (0) | 2025.01.22 |
---|---|
[Kotlin 강의] Class 쉬운 설명 (0) | 2025.01.22 |
[Kotlin 강의] Lambda 함수 Return Type 표현 방법 (0) | 2025.01.22 |
[Kotlin 강의] 함수 표현식 총정리 fun, lambda (0) | 2025.01.22 |
[Kotlin 강의] Range 사용법 (0) | 2025.01.22 |
댓글