일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- JPA
- HTTP
- ocp
- 정규화
- 비관적 락
- DB
- java
- 갱신 이상
- gatway
- null
- Dirty Checking
- well-know port
- 삽입 이상
- 페이지네이션
- 네트워크
- 3-way handshaking
- 데이터베이스
- 자료구조
- buildSrc
- Kafka
- 자바
- MSA
- Kotlin
- 삭제 이상
- Redis
- 캐시 오염
- 스레드 풀
- AWS
- Spring
- 낙관적 락
- Today
- Total
어 나 갱수.
[Kotlin] Kotlin에서 null처리는 어떻게 하나요? 🐶 본문
자바와 코틀린을 비교했을 때 장점 하나를 꼽아보라면 빠지지 않고 나오는 것이 null처리에 관한 내용이다.
자바에서는 주로 if와 &&, || 등의 연산자들을 통해 null이 아닌 경우에 처리할 로직을 작성했다.
이에 비에서 코틀린에서는 null를 아주 간단하게 처리할 수 있다.
코틀린은 null이 될 수 있는 타입을 지원해 NullPointException 오류를 컴파일 시점에 감지할 수 있습니다.
자바에서는 null 체크를 할때 주로 if문이나 equals 구문을 사용했지만,
코틀린에서는 Nullable 연산자로 좀더 쉽게 null 체크가 가능합니다.
Nullable types 선언
Null 객체를 선언할 때 변수 타입 옆에? 를 붙이면 Null 사용이 가능하도록 할당할 수 있고,? 가 붙지 않으면 Non-Nullable로 Null 사용이 불가능하다. Non-Nullable변수에 Null을 선언하게 된다면 컴파일되지 않으므로 NullPointException이 발생한다.
아래의 코드처럼 ?를 붙이지 않고 null값을 선언하게 된다면 컴파일에러가 발생한다.
var a: String = "abc" // Regular initialization means non-null by default
a = null // compilation error
타입뒤에?를 명시하면 null값을 선언해도 컴파일에러가 발생하지 않고 null값이 b라는 변수에 잘 들어가진다.
var b: String? = "abc" // can be set null
b = null // ok
print(b)
Null check
1. 조건문으로 null check
- Java와 같이 null 체크를 수행
val l = if (b != null) b.length else -1
val b: String? = "Kotlin"
if (b != null && b.length > 0) {
print("String of length ${b.length}")
} else {
print("Empty string")
}
2. Safe Calls 연산자
?.를 붙여서 참조 연산자를 실행하기 전에 먼저 객체가 Null인지 확인부터하고 객체가 null이라면 코드를 실행하지 않고 null을 반환하는 연산자 입니다.
자바에서는 if(a == null) 이렇게 null에 대한 검사를 했다면, 코틀린에서는 ?. 하나로 null에 대한 검사를 할 수 있습니다.
val a = "Kotlin"
val b: String? = null
println(b?.length)
println(a?.length) // Unnecessary safe call
- 위에서는 b가 null이 아니면 b.length를 반환하고, 그렇지 않으면 null를 반환한다.
- null이 아닌 값에 대해서만 특정 작업을 수행하려면 다음과 같이 safe call 연산자를 사용할 수 있다.
3. Elvis(엘비스) 연산자 :?
- ?:의 왼쪽에 있는 식이 null이 아니면 엘비스 연산자가 반환하고, 그렇지 않으면 오른쪽 결과를 반환한다. 왼쪽이 null인 경우에만 오른쪽 식으로 반환된다.
// if 조건문으로 처리한 경우
val l: Int = if (b != null) b.length else -1
// 동일한 코드를 ?: 연산자 사용 시
val l = b?.length ?: -1
4.!! 연산자
- 어떤 값이든 널이 될 수 없는 타입으로 (강제로) 변경
- 아래와 같이!! 연산자를 사용하면 값이 null인 경우 예외를 발생시킨다.
val l = b!!.length
Reference
'Java' 카테고리의 다른 글
[Kotlin] 리스트 정렬(sort, sortBy, sortWith) 😙 (0) | 2024.01.27 |
---|---|
[Java] JVM 이란 ? 🤠 (0) | 2024.01.07 |
[OOP] 객체지향 프로그래밍의 설계원칙 SOLID 에 대해 알아보자 !! 🤚 (2) | 2023.12.04 |
[Kotlin] ?(물음표)와 !!(느낌표 두개)의 사용 👃🏾 (0) | 2023.09.17 |
[Java] UUID 란? 🫢 (0) | 2023.09.07 |