-
💡 [안드로이드/코틀린] lateinit var 초기화(할당) 여부 확인법| 프로그래밍 분야/Kotlin 2021. 6. 28. 09:02
"::변수명.isInitialized"로 확인이 가능합니다.
(예시)
private lateinit var sample:String fun main() { for (i in 1..2) { if (::sample.isInitialized) { sample = "이미 할당되었다면 이 문구로 재할당됨" } else { sample = "할당된 적이 없다면 이 문구로 할당됨" } println(sample) } }
(출력 화면)
더블 콜론(::)은 리플렉션(reflection)을 위해 사용되며, 보통 "클래스명::class"로 사용되고, 액티비티를 넘겨주어 단말에서 사용할 필요가 있을 때에는 "클래스명::class.java"로 사용합니다. 참조
다만 변수 앞에 쓰인 더블 콜론(::)은 변수를 객체로 액세스하여 변수의 속성값을 코드에서 조회할 수 있도록 하는 키워드입니다.
대학에서 c++을 배울때 교수님께 이런 질문을 한 적이 있습니다.
"교수님, 변수에 담긴 문자열(string) 데이터에 다른 변수의 이름을 넣어서 간접 참조를 할 수는 없을까요?"
교수님의 대답은 No였지만... 놀랍게도 코틀린에서는 이것이 가능합니다.
var a:Int = 2 var b:Int = 3 fun main() { println(::a.name) println(::a.get()) val c:String = "a" if (c == ::a.name) { println("true") } }
파이썬에서 eval과 input을 동시에 사용하면 굉장히 편리하지만 유저가 프로그램을 임의로 spoil할 수 있게 됩니다.
이와 마찬가지로, 코틀린에서 리플렉션과 readline을 동시에 사용하면... 굉장한 일이 일어날 수도 있을 것 같으니 주의.