일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 완전탐색
- 싱글톤
- Java
- 프로그래머스
- 거리알고리즘
- Android
- dart
- flutter
- 플러터
- 에러
- 플러터 동작
- 자바
- linebreak
- 비동기 처리
- 앱아이콘 변경
- 자료구조
- 재귀
- Kotlin
- Lazy
- IOS
- element tree
- 초기화
- zwj
- dfs
- 코틀린
- Render object tree
- 프리즈드
- Widget Tree
- Singleton
- Today
- Total
모바일 개발하는 자바리안의 메모장
Flutter - late 키워드 본문
Flutter에서 non-nullable 객체의 경우 선언과 동시에 값을 초기화해줘야 한다.
처음 flutter를 접하고 instance 변수들을 선언할 때 아래와 같은 에러를 많이 접할 수 있었다 :
그렇다면 나중에 초기화가 필요한 객체의 경우 어떻게 선언을 해줄까? 물론 nullable로 타입을 바꿔주면 문제를 쉽게 해결할 수 있다.
하지만 만약 해당 객체가 절대 null이 될 수 없는, 특정 시점에 무조건 초기화가 될 객체라면?
절대 null이 되지 않는 객체임에도 불구하고, 오랜 시간이 지난 후에 다시 보거나 다른 개발자가 봤을 때 nullable한 객체로 간주하게 될 우려가 있다..
또한, 공식 문서에 정리된 내용을 보면 control flow analysis가 인스턴스 변수, top-level 변수의 경우 실제 초기화를 마치고 사용할 수 있는 상태인지 정확히 파악하지 못하는 이슈가 있다고 하는데..
그래서 dart 팀은 초기화가 보장되는 non-nullable의 경우 late 키워드를 사용하길 권장한다.
late 로 선언된 변수의 경우 실제 사용될 때 선언부 코드가 실행된다.
아래 예제 코드의 경우 temperature 변수가 실제 사용되었을 때 readThermometer 함수가 실행되고, 만약 사용되지 않았다면 함수는 실행되지 않는다 :
late String temperature = readThermometer();
late 초기화의 치명적인 단점은 runtime에 error가 발생할 수 있기 때문에 확실히 초기화가 되는지 그리고 초기화되는 과정에서 문제가 발생하지 않은지 꼼꼼히 확인해줘야 할 필요가 있다.
'Flutter' 카테고리의 다른 글
Flutter - Single-threaded 환경에서 비동기 처리가 어떻게 가능할까 (0) | 2023.04.10 |
---|---|
Flutter - Freezed 을 이용한 Model 관리 (0) | 2022.11.16 |
Flutter - export 를 활용한 dart 파일 관리 (0) | 2022.11.07 |
Flutter - WidgetsFlutterBinding.ensureInitialized()을 이용한 Main함수 Binding (0) | 2022.11.06 |
Flutter - Factory 생성자 (0) | 2022.11.03 |