반응형
null을 다루는 방법
null 체크
Java
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
fun startsWithA1(str: String?): Boolean {
if (str == null) {
throw IllegalArgumentException("null이 들어왔습니다.")
}
return str.startsWith("A")
}
fun startsWithA2(str: String?): Boolean? {
if (str == null) {
return null
}
return str.startsWith("A")
}
fun startsWithA3(str: String?): Boolean {
if (str == null) {
return false
}
return str.startsWith("A")
}
fun startsWithA4(str: String): Boolean {
return str.startsWith("A")
}
- 코틀린에서 null이 들어갈 수 있는 타입은 완전히 다르게 간주된다.
- 한번 null 검사를 하면 non-null임을 컴파일러가 알 수 있다.
SafeCall과 Elvis 연산자
Kotlin
fun startsWithA1(str: String?): Boolean {
return str?.startsWith("A")
?: throw IllegalArgumentException("null이 들어왔습니다.")
}
fun startsWithA2(str: String?): Boolean? {
return str?.startsWith("A")
}
fun startsWithA3(str: String?): Boolean {
return str?.startsWith("A") ?: false
}
- Safe Call:
str?.length
형태로 사용한다.- null이 아니면 실행하고, null이면 실행하지 않고 null을 반환한다.
- Elvis 연산자:
str?.length ?: 0
형태로 사용한다.- 앞의 연산 결과가 null이면 뒤의 값을 사용한다.
- Elvis연산은
early return
에도 사용할 수 있다.
null 아님 단언
Kotlin
fun startsWith(str: String?): Boolean {
return str!!.startsWith("A")
}
str!!.length
형태로 사용한다.- nullable type이지만, 아무리 생각해도 null이 될 수 없는 경우에 사용한다.
- 혹시나 null이 들엉오면
NullPointException
이 발생하기 때문에 정말 null이 아닌게 확실한 경우에만 널 아님 단언을 사용해야 한다.
널 아님 단언을 사용했지만 null이 사용된 경우
fun main() {
println(startsWith(null))
}
플랫폼 타입
Java
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
@NotNull
public String getName() {
return name;
}
}
Kotlin
fun main() {
var person = Person("heekng")
// @Nullable 일 때에는 가능
// @NotNull 일 때에는 불가능
startsWithA(person.name)
}
fun startsWithA(str: String): Boolean {
return str.startsWith("A")
}
플랫폼 타입
: 코틀린이 null 관련 정보를 알 수 없는 타입- 코틀린에서 자바 코드를 가져와 사용할 때 어떻게 처리되는가?
- 만약 Java 코드에
@Nullable
어노테이션이 붙어있을 경우에는 불가능하다.
- 하지만
@NotNull
어노테이션이 붙어있을 경우에는 가능하다.
- Java코드를 통해 null 가능성을 확인하지 못할 때에는?
- 사용은 가능하지만 null이 입력되었을 때 에러가 발생한다.
- 결국 Kotlin에서 Java코드를 가져다 사용할 때에는 Java코드를 읽으며 null 가능성을 확인하거나, Kotlin으로 wrapping 해야 한다.
반응형
'Java & Kotlin > Kotlin' 카테고리의 다른 글
[Kotlin] 예외를 다루는 방법 (0) | 2022.07.06 |
---|---|
[Kotlin] 반복문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 조건문을 다루는 방법 (0) | 2022.07.06 |
[Kotlin] 연산자를 다루는 방법 (0) | 2022.07.05 |
[Kotlin] Type을 다루는 방법 (0) | 2022.07.05 |
[Kotlin] 코틀린에서의 변수 (0) | 2022.07.05 |