Dart와 같은 현대 프로그래밍 언어는 안정성과 개발 효율성을 높이기 위해 지속적으로 업데이트되고 있습니다. 실제 앱 개발할 때 흔히 문제가 되는 에러는 변수에 값이 할당되지 않은 null 에러라고 합니다. Dart 는 이러한 null 에러를 방지하기 위해 Dart는 null safety 기능을 도입했습니다.
Null safety 기능은 Dart 코드에서 null이 될 수 있는 변수를 사전에 처리하여, 런타임에 null로 인한 에러가 발생하는 것을 방지합니다. 이는 크게 두 가지 주요 기능을 통해 이루어집니다.
Null이 입력되지 못하도록 방지: 변수나 객체가 null 값을 가질 수 없도록 기본적으로 설정합니다. 이는 변수를 선언할 때 null이 허용되지 않음을 명시함으로써, 개발자가 미리 에러를 예방할 수 있게 합니다.
Null이 필요할 때 정확하게 표현: 특정 변수가 null 값을 가질 수 있음을 명확히 표현할 수 있습니다. 이를 위해 Dart는 nullable 키워드와 late 키워드를 제공합니다.
예를 들어 아래 사진처럼 String name, int age 가 null 값이라면 print() 할 때 에러가 뜨게 됩니다. 사용전에 초기화를 해야한다는 뜻입니다.
변수가 null 값을 가질 수 있도록 허용하기 위해서는 변수 타입 뒤에 ?를 붙입니다. 이는 해당 변수가 null 값을 가질 수 있음을 명시적으로 표현하는 것으로, Dart 컴파일러가 이를 인식하고 처리합니다.
예를 들어, String이나 int 타입의 변수가 null 값을 가질 수 있다면 다음과 같이 선언합니다.
String? name;
int? age;
이 방식을 사용함으로써, 변수가 초기화되지 않은 상태에서도 에러 없이 컴파일될 수 있습니다.
late 키워드는 변수가 선언된 시점에는 초기화되지 않지만, 실제 사용되기 전에 반드시 non-null 값으로 초기화될 것임을 Dart 컴파일러에 알립니다. 이는 "나중에 초기화될 변수"에 유용하며, 개발자가 변수의 사용 의도를 더 명확하게 표현할 수 있게 해줍니다.
예를 들어, 어떤 클래스의 객체가 생성될 때 바로 초기화되지 않지만, 사용 전에는 반드시 값이 할당될 변수가 있다면 late 키워드를 사용하여 선언할 수 있습니다.
late String userName;
Dart의 null safety 기능은 앱 개발 시 발생할 수 있는 많은 런타임 오류를 사전에 방지할 수 있도록 돕습니다. Nullable 키워드와 late 키워드를 통해 개발자는 변수의 null 가능성을 명확하게 표현할 수 있으며, 이는 코드의 안정성과 가독성을 모두 향상시키는 데 기여합니다. 따라서 에러 발생을 피하려면 처음에 초기화를 시키거나, Nullable 키워드나 late 키워드를 사용하면 됩니다.