late
키워드일반적으로, Dart는 모든 변수가 초기화되어야 합니다. 그래야만 null safety를 보장할 수 있습니다. 그러나 때로는 변수를 선언하고 초기화하는 시점을 나누고 싶을 때가 있습니다. 이 때 late
키워드를 사용하게 됩니다.
아래는 late
키워드 사용 예시입니다:
class SomeClass {
late String name;
void setName(String newName) {
name = newName;
}
String greet() {
return "Hello, $name";
}
}
위의 SomeClass
는 name
이라는 String
타입의 멤버 변수를 가지고 있습니다. 이 변수에 late
키워드를 붙임으로써, 이 변수가 나중에 초기화될 것임을 Dart에게 알려줍니다.
setName(String newName)
메서드를 통해 name
변수를 초기화할 수 있습니다. 그리고 greet()
메서드는 name
변수를 사용하여 문자열을 반환합니다.
이제 SomeClass
의 인스턴스를 만들고, setName()
메서드를 호출하여 name
변수를 초기화한 후, greet()
메서드를 호출해봅시다.
void main() {
SomeClass someObject = SomeClass();
someObject.setName("Alice");
print(someObject.greet()); // "Hello, Alice"
}
이 코드를 실행하면 "Hello, Alice"라는 문자열이 출력됩니다.
그러나 setName()
메서드를 호출하지 않고 바로 greet()
메서드를 호출하려고 하면 어떻게 될까요?
void main() {
SomeClass someObject = SomeClass();
print(someObject.greet()); // Error: LateInitializationError
}
이 경우에는 LateInitializationError
가 발생합니다. 왜냐하면 name
변수가 아직 초기화되지 않았기 때문입니다.
따라서 late
키워드는 변수의 초기화를 지연할 수 있게 해주지만, 해당 변수를 사용하기 전에 반드시 초기화되어야 합니다.