[Effective Kotlin] 아이템 3. 최대한 플랫폼 타입을 사용하지 말라

Jimin Lim·2023년 7월 16일
0

Effective Kotlin

목록 보기
3/39
post-thumbnail

아이템3

최대한 플랫폼 타입을 사용하지 말라

✅ 플랫폼 타입

플랫폼 타입: 다른 프로그래밍 언어에서 전달되어서 nullable인지 아닌지 알 수 없는 타입, String!처럼 이름 뒤에 !을 붙여 표기한다.

public class UserRepo{
	public User getUser() {
    
    }
}
val repo = UserRepo()
val user1 = repo.user //User!
val user2: User = repo.user //User
val user3: User? = repo.user //User?

user를 가져올 수 있는 type은 위와 같이 3가지가 있다.
user1처럼 들고 온다면, 코틀린에서 null에 대해 처리(!!, filterNotNull())를 해줘야하므로 타입을 지정해준 user2, user3이 이상적이다.

만약, 자바 코드를 건드릴 수 있다면 아래와 같이 어노테이션을 사용해 플랫폼타입을 사용하지 않도록 하는것이 좋다.

  • @Nullable: String?
  • @NotNull: String

✅ 플랫폼 타입의 문제점

public String getValue() {
    return null;
}

// 코틀린
fun statedType() {
    val value: String = JavaClass().value   // NPE
    // ...
    println(value.length)
}

fun platformType() {
    val value = JavaClass().value
    // ...
    println(value.lenghth)  // 값을 사용할 때 NPE
}

값을 사용할 때 NPE가 터진다면 오류를 찾는데 상대적으로 오랜 시간이 걸릴 수 있다.

또한 interface에서 null에 대한 명시를 하지 않았다가 구체 클래스에서 nullable하게 구현한다면, runtime에서 예외가 터질 수도 있다.

✅ 정리

  • nullable 여부를 알 수 없는 플랫폼 타입을 사용하지 말자!
  • 연결되어있는 자바에 nullable여부를 지정하자
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

2개의 댓글

comment-user-thumbnail
2023년 7월 16일

잘봤습니다.

답글 달기
comment-user-thumbnail
2023년 7월 17일

저도 개발자인데 같이 교류 많이 해봐요 ㅎㅎ! 서로 화이팅합시다!

답글 달기