Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
Tags
- Flutter
- JQ
- abap
- java
- lifecycle
- react
- println
- scss
- 단축키
- nodejs
- java 콘솔 출력 차이
- UI/UX
- npm
- 배포
- riverpod
- java 출력
- LLM
- 자바 포맷 출력
- printf
- 엡
- ListView
- develop
- Clean Architecture
- 자바 출력 방식
- unity
- firebase
- 앱심사
- DART
- 자바스크립트
- JS
Archives
- Today
- Total
guricode
late 본문
late란?
Dart에서 late는 "변수를 나중에 초기화하겠다고 컴파일러에게 알려주는 키워드"입니다.
null을 허용하지 않으면서도, 선언 시 바로 초기화할 수 없는 상황에서 유용합니다.
- 생성자 이후에 값을 초기화할 때
- 의존성 주입처럼 순환 참조 또는 나중 할당이 필요한 경우
- final과 함께 쓰면 한 번만 나중에 초기화하는 변수로 만들 수 있음
late String name;
void main() {
name = "Alice";
print(name); // 출력: Alice
}
아래 코드는 Dart null safety 기준에서 오류입니다:
String name;
이렇게 선언하면 "non-nullable 변수인데 초기화가 안 되어 있다"는 오류가 발생합니다.
이때 late를 쓰면:
late String name;
이제 컴파일러가 "얘는 나중에 초기화될 거야"라고 이해하게 됩니다.
초기화 전에 접근하면?
late String message;
void main() {
print(message); // ❌ 에러: LateInitializationError
}
값을 대입하기 전에 접근하면 런타임 에러가 납니다.
✅ late는 컴파일 시 null 허용 검사를 우회하지만,
값 없이 사용하면 런타임에서 터진다!
late final이란?
late final int userId;
- final: 값을 딱 한 번만 할당 가능
- late: 그 한 번을 나중에 하겠다
즉, **"딱 한 번만 나중에 초기화 가능한 변수"**입니다.
late final int x;
void main() {
x = 42;
print(x); // 42
// x = 99; // ❌ Error: 'x' is final and already assigned.
}
클래스 필드에 유용
class User {
late String nickname;
void setNickname(String value) {
nickname = value;
}
}
생성자 외의 타이밍에 초기화할 때 late를 써서 null safety와 초기화 시점을 분리합니다.
late vs nullable ? 차이
구분 late ?
| null 허용 | ❌ | ✅ |
| 초기화 시점 | 나중에 꼭 해야 함 | 생략 가능 |
| 사용 전 검증 필요? | ❗필요 (안 하면 에러) | ✅null 체크하면 됨 |
예시:
late String a;
String? b;
print(a); // ❌ 런타임 에러 (초기화 안됨)
print(b); // null 출력됨
late 남용 주의
- 필수 초기화를 까먹으면 런타임 에러
- 테스트 코드에서 꼬이기 쉬움
- 무분별한 사용은 코드 흐름 파악을 어렵게 함
❗ 가능하면 final, ?, 기본값을 먼저 고려하고
불가피할 때만 late를 사용하세요.
정리
- late: 나중에 반드시 초기화할 비-null 변수
- late final: 나중에 딱 한 번 초기화
- 사용 전 꼭 값을 넣어야 함 (안 그러면 런타임 에러)
- null이 필요한 상황이라면 ? nullable 타입이 더 나음
추천 연습
class Config {
late final String apiUrl;
Config({required bool isProd}) {
apiUrl = isProd ? 'https://prod.api.com' : 'https://dev.api.com';
}
}
다음 주제로는 const vs final vs late 비교도 괜찮고,
테스트 코드에서 late를 어떻게 다루는지도 다뤄볼 수 있어요.
더 심화되거나 카드뉴스/마크다운 버전도 원하시면 말씀해주세요!
'앱 > Flutter&Dart' 카테고리의 다른 글
| Flutter + Riverpod MVVM 기본 통신 예제 (2) | 2025.07.29 |
|---|---|
| Dart에서 JSON 직렬화/역직렬화 완벽 정리 - toJson & fromJson 메서드 활용법 (1) | 2025.07.28 |
| Singleton Pattern(싱글톤 패턴) (0) | 2025.07.22 |
| Flutter에서 MediaQuery.of(context)의 쓰임새와 Organize Imports 활용법 (1) | 2025.07.16 |
| 좌석 선택 기능 트러블 슈팅 (1) | 2025.07.16 |