Dart required 키워드란?
Dart 언어에서 required 키워드는 생성자나 함수의 매개변수(parameter)를 필수로 지정할 때 사용됩니다.
특히, named parameter(이름이 있는 매개변수)와 함께 사용되며, 특정 매개변수가 반드시 전달되도록 강제할 수 있습니다.
required 키워드가 필요한 이유
Dart는 named parameter를 기본적으로 선택 사항(optional)으로 처리합니다. 즉, named parameter를 사용하면 값을 전달하지 않아도 오류가 발생하지 않습니다. 하지만 어떤 경우에는 반드시 값을 받아야 하는 매개변수가 필요할 수 있습니다. 이를 강제하기 위해 required 키워드를 사용합니다.
생성자에서 required 키워드 사용하기
class User {
String name;
int age;
User({required this.name, required this.age});
}
void main() {
// 올바른 사용 예시
User user = User(name: '홍길동', age: 25);
print(user.name);
// 아래 코드는 오류 발생 (name과 age가 필수값이므로 생략할 수 없음)
// User user = User(name: '홍길동'); // age가 없음
}
위 코드에서 User 클래스의 생성자는 required 키워드를 사용하여 name과 age를 필수 매개변수로 지정했습니다. 따라서 해당 값을 제공하지 않으면 컴파일 오류가 발생합니다.
함수에서 required 키워드 사용하기
required 키워드는 생성자뿐만 아니라 일반 함수에서도 사용할 수 있습니다.
void greet({required String name}) {
print('안녕하세요, $name님!');
}
void main() {
greet(name: '홍길동'); // 정상 동작
// 아래 코드는 오류 발생 (name이 필수 매개변수인데 전달되지 않음)
// greet();
}
required 키워드와 null-safety
Dart 2.12부터 Null Safety가 도입되면서 required 키워드와 ? (nullable type) 사용이 증가했습니다. required 키워드를 nullable 타입과 함께 사용하면 null 값을 허용하면서도 매개변수를 필수로 지정할 수 있습니다.
class Product {
String name;
int? price; // null 허용
Product({required this.name, this.price});
}
void main() {
Product product = Product(name: '홍길동');
print(product.price); //출력: null
}
위 코드에서 price는 필수가 아니지만, name은 required로 지정되어 반드시 값을 전달해야 합니다.
required 키워드 사용 시 주의할 점
- required 키워드는 named parameter에서만 사용 가능합니다.
- positional parameter(위치 기반 매개변수)에서는 사용할 수 없습니다.
- Null Safety를 고려하여 required와 nullable 타입을 함께 사용할 수 있습니다.