Dart는 현대적인 프로그래밍 언어로, 특히 Flutter 개발에서 널리 사용됩니다.
Dart의 최신 버전에서는 Null Safety라는 중요한 기능이 도입되었습니다.
이 기능은 코드의 안정성을 크게 향상시키고, 런타임에서 발생할 수 있는 많은 오류를 방지합니다.
이 블로그에서는 Dart의 Null Safety와 Sound Null Safety 개념을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.
1. Null Safety란?
Null Safety는 변수가 null 값을 가질 수 있는지 여부를 명확히 정의하는 기능입니다.
변수가 null 값을 가질 수 있다면, 코드에서 그 변수에 접근할 때 항상 null 체크를 해야 합니다.
Null Safety는 이러한 문제를 방지하여 코드의 안정성과 예측 가능성을 높여줍니다.
2. Null Safety의 기본 개념
2.1 Null을 허용하는 변수
기본적으로, Dart에서 모든 변수는 null 값을 가질 수 있습니다.
예를 들어, 다음 코드에서는 name 변수에 null 값을 할당할 수 있습니다.
String name = null; // Null 값을 허용하는 변수
이렇게 되면, name을 사용하기 전에 항상 null인지 확인해야 합니다. 만약 null 값을 체크하지 않고 사용하면, 런타임 오류가 발생할 수 있습니다.
2.2 Null을 허용하지 않는 변수
Null Safety를 사용하면 변수에 null 값을 허용할지 여부를 명확히 설정할 수 있습니다. 변수의 타입 뒤에 ?를 붙이면 null 값을 허용하게 됩니다. 기본적으로는 null 값을 허용하지 않습니다.
예제
String name; // Null을 허용하지 않는 변수
String? optionalName; // Null을 허용하는 변수
- String name: name 변수는 null 값을 가질 수 없습니다.
- String? optionalName: optionalName 변수는 null 값을 가질 수 있습니다.
3. Sound Null Safety란?
Sound Null Safety는 Dart의 Null Safety 기능이 컴파일 타임에 완벽하게 동작하는 것을 의미합니다. 이는 프로그램이 런타임에 null 관련 오류를 발생시키지 않도록 보장합니다. Sound Null Safety는 변수, 함수, 클래스 등 코드의 모든 부분에서 null 관련 오류를 방지합니다.
3.1 Null Safety의 원리
- Null-NonNull 규칙: Null Safety를 적용하면, null 값을 허용하는 변수와 허용하지 않는 변수를 명확히 구분할 수 있습니다. 타입 시스템은 컴파일 타임에 이 규칙을 검사합니다.
- 런타임 안전성 보장: 프로그램이 실행되기 전에 모든 null 가능성 문제를 해결하여 런타임 오류를 방지합니다.
예제
void printName(String name) {
print(name);
}
void main() {
String? maybeName = 'Dart'; // Null을 허용하는 변수
if (maybeName != null) {
printName(maybeName); // `maybeName`이 null이 아닌 경우만 `printName` 호출
}
}
- String? maybeName: maybeName 변수는 null 값을 가질 수 있습니다.
- if (maybeName != null): maybeName이 null이 아닌 경우만 printName 함수가 호출됩니다.
4. Null Safety 적용하기
4.1 Null Safety를 활성화하는 방법
Dart의 Null Safety를 사용하려면, 프로젝트의 Dart SDK 버전을 2.12 이상으로 설정해야 합니다.
pubspec.yaml 파일의 environment 섹션을 다음과 같이 설정합니다.
environment:
sdk: ">=2.12.0 <3.0.0"
4.2 Null Safety 적용 예제
Null Safety를 적용한 코드의 예제는 다음과 같습니다.
void greetUser(String name) {
print('Hello, $name!');
}
void main() {
String? userName = 'Alice'; // Null을 허용하는 변수
if (userName != null) {
greetUser(userName); // `userName`이 null이 아닌 경우만 `greetUser` 호출
}
}
- String? userName: userName은 null 값을 가질 수 있습니다.
- if (userName != null): userName이 null이 아닌 경우에만 greetUser 함수를 호출합니다.
5. Null Safety 도구와 플러그인
Dart와 Flutter의 IDE에서는 Null Safety를 지원하는 도구와 플러그인이 제공됩니다.
Visual Studio Code와 IntelliJ IDEA는 Null Safety 오류를 코드 작성 시 실시간으로 표시하고, 코드 수정 시 도움을 줍니다.
Dart의 Null Safety와 Sound Null Safety는 코드의 안정성을 높이고, 런타임 오류를 방지하는 데 큰 도움이 됩니다.
Null Safety를 이해하고 적용하면 코드의 예측 가능성을 높이고, 더 안전한 애플리케이션을 개발할 수 있습니다.
이 블로그가 Null Safety와 Sound Null Safety를 이해하는 데 도움이 되었기를 바랍니다.
추가적인 질문이나 도움이 필요하시면 언제든지 말씀해 주세요!
구독!! 공감과 댓글은 저에게 큰 힘이 됩니다.
Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.
'Dart > Dart Programming language' 카테고리의 다른 글
[고급] Dart 고급 주제 및 최신 트렌드/ 패키지 관리 및 의존성 주입 (2) | 2024.09.12 |
---|---|
[고급] Dart 고급 주제 및 최신 트렌드/ Dart 최신 버전의 주요 변경 사항 (5) | 2024.09.11 |
[고급] Dart고급 객체지향 프로그래밍/ DI(Dependency Injection)와 서비스 로케이터 패턴 (0) | 2024.09.10 |
[고급] Dart고급 객체지향 프로그래밍/다중 상속과 인터페이스 구현 (0) | 2024.09.10 |
[고급] Dart고급 객체지향 프로그래밍/디자인 패턴(싱글톤, 팩토리, 옵저버 등) 적용 (0) | 2024.09.10 |