[Kotlin] lateinit 변수의 값이 세팅 되었는지 확인하기
Kotlin과 늦은 초기화 전략
kotlin
언어에서는 변수에 null
이 들어오지 않았으면 하지만, 값을 초기에 설정할 수 없는 경우를 대비해 두 가지 '늦은 초기화' 방식을 제공한다. 그 중 하나는 lateinit
, 그리고 나머지 하나는 lazy
이다. 여기서는 lateinit
변수에 값이 세팅 되었는지 확인하는 방법에 대해 다루어보도록 하겠다.
이 변수, 값이 들어오긴 했나?
객체에 속성 값을 담을 때, global
영역에 전역변수를 많이 사용한다. 초기에는 당연히 값이 없기 때문에, lateinit
을 사용한 전역변수를 자주 볼 수 있다. 이 변수들은 보통 생성자 코드 블록에서 값이 자동으로 세팅되는 경우가 많지만, 가끔 개발자가 메소드를 통해 직접 값을 주입해주어야 하는 경우가 생길 수 있다. 객체가 생성될 때 강제로 실행되는 생성자 코드 블록과는 다르게, 개발자가 직접 메소드를 통해 값을 주입해야하는 경우에는 해당 변수에 항상 값이 있을 것이라는 보장이 없다.
당연한 소리긴 하지만, 초기화 되지 않은 객체에 접근하려고 하면 예외가 발생하게 된다. 이런 불상사를 막기 위해서는, kotlin
에서 제공하는 표준 라이브러리 함수인 isInitialized
를 사용하면 된다. 이 함수는 다음과 같이 사용하면 된다.
private lateinit var name: String
fun functionNm() {
if (::name.isInitialized) {
println("초기화되어 있음")
}
}
이 때, 주의할 점으로는 해당 함수를 사용하기 위해서는 값이 아닌 참조를 전달해야 하므로 변수명 앞에 ::
혹은 this::
를 적어야 하며, 이런 이유 때문에 전역변수에만 사용할 수 있는 방법이라는 점을 명심해야 한다.
정리하며
Kotlin
을 배우면서, 애매한 전역변수들은 어떻게 처리하고 검증하는지 막막 했었는데 인터넷을 찾다보니 나같은 고민을 한 사람이 한둘이 아니라는 것을 알게 되었다. 그래서 나도 마찬가지로 이 글이 누군가에게 도움이 되길 바라며 적어보았다.