반응형
질문
코틀린에서는 아래와 같이 'late' 타입 변수가 초기화되었는지 확인할 수 있습니다.
lateinit var file: File
if (this::file.isInitialized) { ... }
다트에서도 이와 유사한 작업을 할 수 있을까요..?
답변
아쉽게도 이는 불가능합니다.
문서에서는 다음과 같이 설명하고 있습니다:
초기화 여부를 확인해야 하는 경우 늦은 변수를 피하십시오.
Dart는 늦은 변수가 초기화되었는지 또는 할당되었는지를 확인할 수 있는 방법이 없습니다. 변수에 액세스하면, 초기화기(있는 경우)를 즉시 실행하거나 예외를 throw합니다. 때로는 늦게 초기화되는 일부 상태가 있을 수 있으며, 이 경우 늦은 변수가 적합할 수 있지만, 초기화가 이미 발생했는지 확인할 수 있어야 합니다.
물론, 상태를 늦은 변수에 저장하고 변수가 설정되었는지를 추적하는 별도의 부울 필드를 가지고 초기화를 감지할 수 있지만, Dart는 늦은 변수의 초기화 상태를 내부적으로 유지하기 때문에 이는 중복된 작업입니다. 대신, 변수를 늦은 변수가 아닌 Nullable로 만드는 것이 일반적으로 더 명확합니다. 그러면 null을 확인하여 변수가 초기화되었는지 확인할 수 있습니다.
물론, 변수에 대한 null이 유효한 초기화 값인 경우, 별도의 부울 필드를 가지는 것이 의미가 있을 수 있습니다.
반응형
댓글