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

+ Recent posts