(공부필요)Kotlin lateinit 에 대하여

timothy jeong·2021년 10월 23일
0

코틀린

목록 보기
5/20

lateinit 은 Byte, Short, Int, Long, Double, Float, Char, Boolean 자료형에는 사용할 수 없다. 그 이유는 JVM이 해당 자료형을 다루는 방식에 있다고 한다. 그런데 이상하다 이 자료형들은 Java 가 Primitive Type 으로 분류한 것들이다.

lateinit 은 변수를 어떻게 다루기에 Primitive Type 들과 호환이 되지 않는 걸까? lateinit 이 변수를 다루는 방식과 Primitive Type 이 JVM 에서 처리되는 방식에서 어떤 부분에서 문제가 발생하는 걸까?

코틀린 언어에 관한 문서 에는 자세한 내용이 없다. 내가 못찾은 걸 수도 있다.
stackoverflow (2016) 에 비슷한 질문이 올라와 있다. 가장 좋아요를 많이 받은 답변은 다음과 같다.

non-nullable 객체에 대해서 코틀린은 null 값을 이용해서 해당 value 가 아니 초기화 되지 않았음을 마킹을 해둔다.
primitive tpye 에 대해서는 null 을 표시할 값이 없다. 따라서 해당 value 가 초기화 되었는지 안되었는지 마킹해둘 방법이 없다. 그러므로 lateinit 은 object type 에만 지원된다.

이 답변을 보고 두 가지 의문이 생겼다.
(1) non-nullable 객체에 어떻게 null 을 마킹해둔다는 건지, 만약 내부적으로 그렇게 처리할 방법이 있다면
(2) kotlin 의 모든 변수들은 객체형인데, java 의 primitive type 이라고 내부적으로 null 을 표시 못할건 또 뭔지.

나와 같은 의문을 가진 사람들이 댓글을 달면서 이야기를 이어갔다. 아직도 이해가 안간다.

profile
개발자

0개의 댓글