코틀린은 자바를 기반으로 만들어졌기 때문에 자바로 만든 코드들은 코틀린에서도 사용할 수 있게 됩니다. 그러다 보니 그 과정에서 어노테이션으로 nullable이 지정되지 않은 타입 즉 플랫폼 타입들을 쓰게 될 경우 코틀린에서는 매번 널 관련된 검사를 해야 합니다. 그렇지 않는다면 해당 부분을 사용할 때 NPE가 발생할 수도 있는 위험을 감수해야 합니다. 그렇기 때문에 이 책에서는 이러한 nullable이 지정되지 않은 플랫폼 타입을 사용을 자제하라고 말합니다.
// 자바
public class UserRepo{
public List<User> getUsers() {
//...
}
}
위처럼 자바의 경우 NotNull 이필수가아닙니다. 자바에는 여러 자료형이 있고 어떤 자료형에서는 null을 허용하기도 하고 막기도 합니다. 그래서 nullable로 가정하고 다루어야 합니다. 만약 NotNull 일경우 !!를 사용하여 null이 아님을 단정 지어야 합니다.
// 자바
public class UserRepo {
public User getUser() {
//...
}
}
// 코틀린
val repo = UserRepo()
val user1 = repo.user // user1의 타입은 User!
val user2: User = repo.user // user2의 타입은 User,null 일결우 NPE 발생
val user3: User? = repo.user // user3의 타입은 User?
val users: List<User> = UserRepo().users //null 일결우 NPE 발생
val users: List<List<User>> = UserRepo().groupedUsers //null 일결우 NPE 발생
이처럼 자료형을 설정한다면 값을 단정 지어 해당 변수를 상용할 때 널 체크를 피할 수는 있지만 해당값을 정의할 때 그 값이 null이라면 위와 같이 NPE가 발생합니다.
// 자바
import org.jetbrains.annotations.NotNull;
public class UserRepo {
public @NotNull User getUser() {
//...
}
}
만약 자바파일을 설정할수있다면 위처럼 어노테이션을 지정해 주는 것이 좋습니다.
'코틀린 > Effective Kotlin' 카테고리의 다른 글
[Effective Kotlin] 5. 안정성 - 예외를 활용해 코드에 제한을 걸어라 (0) | 2023.07.19 |
---|---|
[Effective Kotlin] 4. 안정성 - inferred 타입으로 리턴하지 말라 (0) | 2023.07.17 |
[Effective Kotlin] 2. 안정성 - 변수의 스코프를 최소화 하라 (0) | 2023.07.11 |
[Effective Kotlin] 1. 안전성 - 가변성을 제한하라 (0) | 2023.06.28 |
[Effectiv Kotlin] 책소개및 클린코드의 정의 (0) | 2023.06.12 |