코틀린에서 null을 다루는 방법
2023. 6. 5. 00:42ㆍkotlin/문법
참고
- 해당 내용은 인프런에 자바 개발자를 위한 코틀린 입문 강의영상을 보고 정리한 문서입니다.
목차
- Kotlin에서의 null 체크
- Safe Call과 Elvis 연산자
- 널 아님 단언!!
- 플랫폼 타입
Java에서의 null 체크
public boolean startsWithA1(String str) {
if (str == null) {
throw new IllegalArgumentException("null이 들어왔습니다");
}
return str.startsWith("A");
}
public Boolean startsWithA2(String str) {
if (str == null) {
return null;
}
return str.startsWith("A");
}
public boolean startsWithA3(String str) {
if (str == null) {
return false;
}
return str.startsWith("A");
}
Kotlin에서의 null 체크
public startWithA1(str: String?): Boolean {
if (str == null) {
throw new IllegalArgumentException("null이 들어왔습니다")
}
return str.startsWith("A")
}
public startsWithA2(str: String?): Boolean? {
if (str == null) {
return null
}
return str.startsWith("A")
}
public startsWithA3(str: String?): Boolean {
if (str == null) {
return false
}
return str.startsWith("A")
}
- Kotlin에서는 null이 가능한 타입을 완전히 다른게 취급한다.!
- null이 가능한 타입만을 위한 기능은 없을까?! → save call, elvis
Save Call과 Elvis연산자
val str: String? = "ABC"
println(str?.length)
- 결과는 ABC가 나오겠지만, 만약 "ABC"가 아니라 null이 들어가게 되면 결과값으로 null이 그대로 출력된다. → Safe Call
val str: String? = null
println(str?.lenght ?: 0)
- str 변수에 null이 들어갔으니 결과값이 null이어야 하지만 Elvis 연산자(?:) 로 인하여 0이 된다.
널 아님 단언!!
fun startsWith(str: String?): Boolean {
return str!!.startsWith("A")
}
- 혹시나 null이 들어오면 NPE가 나오기 때문에 정말 null이 아닌게 확실한 경우에만 널 아님 단언!! 을 사용해야 함
플랫폼 타입
- Kotlin에서 Java 코드를 가져다 사용할 때 어떻게 처리될까?!
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
@Nullable
public String getName() {
return name;
}
}
fun main() {
val person = Person("공부하는 개발자")
startsWithA(person.name) //에러 발생함. 왜? 위 코드를 보면 getName
//메서드에서 @nullable이기 때문에
//만약 @notnull 이면 에러발생 x
}
fun startsWithA(str: String): Boolean {
return str.startsWith("A")
}
인식, 이해할 수 있는 패키지
- javax.annotation
- android.support.annotation
- org.jetbrains.annotation
만약 자바 Person 객체에서 @Nullable이 없다면?
- Kotlin에서는 이 값이 nullable인지 ? non-nullable인지? 알 수 없음.
- 그래서 플랫폼 타입 ㄷㄷㄷㅈ
- 코틀린이 null 관련 정보를 알 수 없는 타입 Runtime 시 exception이 날 수 있다.
'kotlin > 문법' 카테고리의 다른 글
8장 코틀린에서 함수를 다루는 방법 (2) | 2024.01.14 |
---|---|
7장 코틀린에서 예외를 다루는 방법 (0) | 2024.01.14 |
5장. 코틀린에서 제어문을 다루는 방법 (0) | 2023.09.07 |
코틀린에서 변수를 다루는 방법 (0) | 2023.06.05 |