https://nomadcoders.co/dart-for-beginners/lectures/4098
All Courses – 노마드 코더 Nomad Coders
초급부터 고급까지! 니꼬쌤과 함께 풀스택으로 성장하세요!
nomadcoders.co
int test(int num){
print(num);
return num;
}
void main(){
final str = test(1);
late final str2 = test(2);
//print(str2);
}
late는 나중에 변수를 사용한다는 의미로 str2는 test함수를 실행시키지 않는다.
그러나 실제 사용 시 그때 서야 test함수가 실행이 되며
만일 주석처리 된 print(str2)를 해제 할 경우, num값인 2가 2번 출력된다.
late 의 핵심은 "초기화를 나중으로 미루는 것"
late 없이는 선언과 동시에 초기화 강제
dart
class Example {
String name; // ❌ 컴파일 에러!
// Non-nullable이므로 반드시 선언 시 초기화해야 함
}
late가 진짜 유용한 경우
① 생성자 밖에서 초기화해야 할 때
dart
class UserProfile {
late String bio; // 나중에 서버에서 받아올 데이터
void loadFromServer() {
bio = "서버에서 받아온 소개글"; // 나중에 초기화
}
}
② 초기화 비용이 클 때 (lazy initialization)
dart
class HeavyClass {
// expensiveValue를 처음 사용할 때만 계산됨 (미리 계산 X)
late String expensiveValue = _heavyCalculation();
String _heavyCalculation() {
print("무거운 연산 실행!");
return "결과";
}
}
③ late를 초기화 전에 쓰면 → 런타임 에러
dart
class Example {
late String name;
}
void main() {
final e = Example();
print(e.name); // ❌ 런타임 에러: LateInitializationError
// 초기화 안 했는데 사용!
}
한눈에 비교
| String name | late String name | |
| 선언 시 초기화 | 필수 | 생략 가능 |
| 초기화 전 사용 | 컴파일 에러 | 런타임 에러 |
| null 허용 | ❌ | ❌ |
| 언제 씀 | 값이 바로 있을 때 | 값이 나중에 생길 때 |
핵심: late는 "내가 책임지고 나중에 초기화할게" 라고 컴파일러와 약속하는 것입니다. 약속을 어기면(초기화 전 사용) 런타임 에러가 납니다.
late는 C#의 지연초기화 (Lazy<T> 타입) 와 유사한 문법.
class HeavyClass {
private Lazy<string> expensiveValue = new Lazy<string>(() => HeavyCalculation());
// expensiveValue.Value를 처음 사용할 때만 계산됨
static string HeavyCalculation() {
Console.WriteLine("무거운 연산 실행!");
return "결과";
}
}
'DART&Flutter' 카테고리의 다른 글
| Dart) 오버라이딩 (0) | 2026.05.19 |
|---|---|
| Dart) Cascade operator (0) | 2026.05.19 |
| Dart) 이름있는 생성자(Named Constructors) (0) | 2026.05.19 |
| Dart) 클래스 생성자 및 Named Parameters (0) | 2026.05.18 |
| Dart) final vs const (2) | 2026.05.15 |
