1. 플러터에서 변수란?
플러터(Flutter)는 Dart 언어를 기반으로 동작하며, Dart에서도 변수는 데이터를 저장하고 관리하기 위한 기본 요소입니다. Dart의 변수는 프로그램 내에서 값들을 저장하고 이를 조작하는 데 사용됩니다. Flutter를 사용한 UI 구성이나 상태 관리에서도 변수는 필수적입니다.
2. 변수 선언과 초기화
Dart에서 변수를 선언하려면 var, final, 또는 const 키워드를 주로 사용합니다. 또한, 변수의 자료형을 명시적으로 선언할 수도 있습니다.
1. var 키워드
- Dart는 변수에 저장된 값에 따라 자료형을 자동으로 추론합니다.
- 한 번 값이 할당되면 같은 자료형의 값만 저장 가능합니다.
void main() {
var name = "가디사는 개발자 주녘"; // Dart가 자료형을 String으로 추론
print(name); // 출력: 가디사는 개발자 주녘
}
2. 자료형 명시
- 변수의 자료형을 명확히 정의할 수도 있습니다.
void main() {
String name = "Dart"; // 명시적으로 자료형 선언
int age = 25; // 정수 자료형
double height = 5.9; // 실수 자료형
bool isFlutterDev = true; // 불리언 자료형
print("$name, $age, $height, $isFlutterDev");
}
3. final과 const
- final: 런타임에 값이 결정되며, 이후 변경 불가능.
- const: 컴파일 타임에 값이 결정되며, 상수로 사용.
void main() {
final String appName = "MyApp"; // 실행 중 할당된 값은 변경 불가능
const String framework = "Flutter"; // 컴파일 시점에 값이 고정
print("$appName uses $framework.");
}
3. 변수 사용 시 주의점
- 변수의 범위(Scope) 이해하기
- 변수가 선언된 위치에 따라 접근 가능한 범위가 달라집니다.
- 예를 들어, 함수 내에서 선언된 변수는 함수 외부에서 접근할 수 없습니다.
- 변수 이름은 명확하게
- 변수 이름은 역할을 명확히 나타내야 가독성이 높아집니다.
- 예: counter는 "카운트" 용도로 사용되는 변수임을 바로 알 수 있습니다.
- 불필요한 변수 선언 피하기
- 너무 많은 변수를 선언하면 코드가 복잡해질 수 있으니 꼭 필요한 변수만 선언해야합니다.
4. 플러터에서 변수의 중요성
플러터에서 변수는 다음과 같은 다양한 곳에서 사용됩니다:
- UI 상태 관리 (Stateful Widget과 State 클래스)
- 사용자 입력값 저장
- API 호출 결과 데이터 저장
- 애니메이션 상태 추적
5. Dart의 Null Safety란?
Null Safety는 Dart 언어의 중요한 기능으로, 개발자가 **null 값으로 인해 발생할 수 있는 오류(null reference errors)**를 방지할 수 있도록 돕는 메커니즘입니다. Null Safety는 Dart 2.12 버전부터 기본적으로 활성화되었으며, 플러터 앱 개발에서도 핵심적인 역할을 합니다.
6. 왜 Null Safety가 필요한가?
null 값은 변수에 아무 값도 저장되지 않은 상태를 나타냅니다. 하지만 null 값에 접근하거나 조작하려 하면 프로그램이 오류를 일으킵니다. 이를 Null Pointer Exception이라고 부르며, 많은 프로그래밍 언어에서 흔히 발생하는 문제입니다.
예를 들어:
String? name; // name은 null일 수 있음
print(name.length); // NullPointerException 발생
Dart의 Null Safety는 null이 될 수 있는 변수와 null이 될 수 없는 변수를 명확히 구분함으로써 이런 문제를 방지합니다.
7. Null Safety의 주요 개념
1. null이 될 수 없는 변수
기본적으로 Dart에서 선언된 변수는 null 값을 가질 수 없습니다. 이를 non-nullable 변수라고 합니다.
void main() {
String name = "Flutter"; // null이 될 수 없음
print(name); // 정상 출력: Flutter
name = null; // 컴파일 오류 발생
}
2. null이 될 수 있는 변수
변수 뒤에 ?를 붙이면 해당 변수는 nullable이 되어 null 값을 가질 수 있습니다.
void main() {
String? name; // null이 될 수 있음
print(name); // 출력: null
name = "Dart";
print(name); // 출력: Dart
}
8. Null Safety를 사용하는 방법
1. null 값 확인
null이 될 수 있는 변수에 접근할 때는 반드시 null 여부를 확인해야 합니다.
예: null 체크
void main() {
String? name;
if (name != null) {
print(name.length); // name이 null이 아닐 때만 length 접근
}
}
예: null 병합 연산자 ??
?? 연산자는 null일 경우 대체 값을 반환합니다.
void main() {
String? name;
print(name ?? "No Name"); // 출력: No Name
}
2. null 값 사용 강제
! 연산자를 사용하면 null 값을 사용할 수 있다고 Dart에 강제로 알릴 수 있습니다. 이는 개발자가 null이 아님을 확신할 때만 사용해야 합니다.
⚠️ 잘못 사용하면 런타임 오류를 발생시킬 수 있으니 주의가 필요합니다.
void main() {
String? name;
name = "Flutter";
print(name!.length); // name이 null이 아님을 보장
}
3. late 키워드
late 키워드는 변수를 나중에 초기화하겠다는 것을 Dart에 명시적으로 알립니다. null이 아닌 값을 보장해야 할 때 유용합니다.
void main() {
late String name; // 초기값 없이 선언
name = "Dart"; // 나중에 초기화
print(name); // 출력: Dart
}
4. nullable 리스트
리스트에도 null safety가 적용됩니다. 예를 들어:
- List<String>: null 값을 포함하지 않는 문자열 리스트
- List<String?>: null 값을 포함할 수 있는 문자열 리스트
void main() {
List<String> names = ["Alice", "Bob"];
List<String?> nullableNames = ["Alice", null, "Bob"];
print(names); // 출력: [Alice, Bob]
print(nullableNames); // 출력: [Alice, null, Bob]
}
Null Safety가 Flutter에서 중요한 이유
플러터 앱 개발에서는 상태 관리, 사용자 입력 처리, 비동기 작업 등에서 null이 자주 발생할 수 있습니다. Null Safety는 다음과 같은 문제를 예방합니다:
- Widget 초기화 오류 방지
위젯이나 상태(State)를 초기화할 때 null 값이 의도치 않게 사용되는 경우를 방지합니다. - 비동기 작업에서 null 값 처리
API 호출이나 데이터베이스에서 데이터를 가져올 때 null 값이 반환될 가능성을 처리할 수 있습니다. - 안정성과 유지보수성 향상
null로 인해 발생하는 오류를 컴파일 시점에서 잡아주므로 앱의 안정성이 향상됩니다.
요약: Null Safety의 장점
- 컴파일 시점에서 null 관련 오류 탐지
앱 실행 전에 null로 인해 발생할 수 있는 문제를 예방합니다. - 코드 안정성과 신뢰성 향상
명확한 nullable 및 non-nullable 구분으로 오류를 줄입니다. - 가독성과 유지보수성 향상
변수의 null 가능성을 코드에서 쉽게 확인할 수 있습니다.
'Flutter' 카테고리의 다른 글
다트 이해하기 - (3) 위젯이란? (0) | 2024.12.01 |
---|---|
다트 이해하기 - (2) 내장 변수타입 (0) | 2024.12.01 |
플러터 기본위젯 (0) | 2024.03.30 |
typedef와 함수 (0) | 2024.03.30 |
dart 이론 (0) | 2024.03.30 |