몰?.루();
왜 lateinit var에 원시 타입은 못 넣을까 본문
lateinit var a: String // 가능
lateinit var b: Int // 불가능
lateinit var c: Integer // 가능
왜냐하면 코틀린 코드를 자바로 변환했을 때 lateinit을 구현하는 방법 자체가 변수를 일단 null로 해놓고, getter를 호출하는 시점에 변수가 아직 null이면 Exception을 throw하는 방식이기 때문입니다.
그렇기 때문에 String 같은 non-primitive type들은 처음에 null을 일단 선언해놓을 수 있는데
int 같은 primitive type들은 처음에 null로 선언할 수가 없기 때문에 (자바에서 int형에 null을 넣을 수 없습니다. 멤버 변수 선언할 때 그냥 int a; 이렇게 선언만 해놓는 것도 결국엔 int a = 0;으로 처리됩니다. 절대 null이 못 들어갑니다.)
그렇기에 코틀린에서 lateinit var를 Int형에는 사용할 수 없는 것입니다.
대신 Integer형은 원시 타입이 아니라 참조형 타입이기 때문에 null을 참조할 수 있어서 lateinit이 가능합니다.
물론 Int형을 lateinit으로 하겠다고 억지로 Integer형으로 선언하는 것은 안 좋은 코딩 방법입니다. 차라리 그냥 var c = 0; 이런 식으로 하는 게 맞습니다.
참고: https://velog.io/@no1msh1217/Kotlin-lateinit-var%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC
'프로그래밍 > 안드로이드, 코틀린' 카테고리의 다른 글
안드로이드 광고성 푸쉬 알림 구현 (0) | 2024.01.13 |
---|---|
코틀린 퀵 소트(퀵 정렬) 소스코드 (0) | 2023.10.12 |
옵저버 패턴으로 직접 LiveData 만들어보기 (0) | 2023.07.06 |
안드로이드 모서리가 둥근 버튼을 만드는 아주 쉬운 방법 (Rounded Button) (0) | 2023.03.01 |
안드로이드 scrollView scrollY 제대로 안 먹힐 때 (doOnLayout) (0) | 2023.02.27 |
Comments