코드에서 보여진 바와 같이 Dart에서는 함수 매개변수를 선택적으로 만들기 위해 이름 기반의 선택적 매개변수(named parameters)를 사용할 수 있습니다. 선택적 매개변수는 {}
안에 선언됩니다.
required
키워드required
키워드를 사용하면, 해당 매개변수가 선택적이지만 반드시 제공되어야 한다는 것을 의미합니다. 즉, 함수를 호출할 때 해당 매개변수의 값을 반드시 지정해야 합니다.
String sayHello({
required String name,
required int age,
required String country,
}) {
return "Hello $name, you are $age, and you came from $country";
}
sayHello
함수는 name
, age
, country
세 개의 매개변수를 가지고 있으며, 이들 모두 반드시 제공되어야 합니다.
선택적 매개변수에 기본값을 지정하면, 함수를 호출할 때 해당 매개변수를 생략할 수 있습니다. 매개변수를 생략하면 기본값이 사용됩니다.
String sayWow({
String name = 'nico',
int age = 35,
String country = 'Wakanda',
}) {
return "Hello $name, you are $age, and you came from $country";
}
sayWow
함수는 name
, age
, country
세 개의 매개변수를 가지고 있으며, 모두 기본값을 가지고 있습니다. 이 함수를 호출할 때 일부 또는 모든 매개변수를 생략할 수 있습니다.
void main() {
print(sayHello(
name: 'joe',
age: 30,
country: 'Korea',
)); // Hello joe, you are 30, and you came from Korea
print(sayWow(
// name: 'nico',
age: 30,
// country: 'Wakanda',
)); // Hello nico, you are 30, and you came from Wakanda
}
main
함수에서 sayHello
함수를 호출할 때 모든 매개변수의 값을 제공해야 합니다. sayWow
함수를 호출할 때는 age
만 지정하고 나머지는 기본값을 사용합니다.
매개변수의 값을 null
로 지정하고 싶다면, 매개변수의 타입을 nullable로 선언해야 합니다. 예를 들어, String? name
과 같이 선언할 수 있습니다. 하지만 이 경우 기본값이 null
이 아닌 경우에는 명시적으로 null
을 지정해야 합니다.
?
를 사용하는 것에는 중요한 차이점이 있습니다. ?
는 타입을 nullable로 만듭니다. 이것은 변수나 매개변수가 null
값을 가질 수 있다는 것을 의미합니다.
첫 번째 예시에서:
String sayWow({
String name = 'nico',
int age = 35,
String country = 'Wakanda',
}) {
return "Hello $name, you are $age, and you came from $country";
}
이 함수는 name
, age
, country
세 개의 매개변수를 받습니다. 모든 매개변수는 non-nullable 타입을 가지고 있으며, 기본값을 가집니다. 이것은 매개변수를 제공하지 않아도 되지만, 매개변수에 null
을 명시적으로 할당할 수는 없다는 것을 의미합니다.
두 번째 예시에서:
String sayWow({
String name = 'nico',
int? age = 35,
String? country = 'Wakanda',
}) {
return "Hello $name, you are $age, and you came from $country";
}
이 함수도 name
, age
, country
세 개의 매개변수를 받지만, age
와 country
는 nullable 타입입니다. 이는 이 매개변수들에 null
값을 할당할 수 있다는 것을 의미합니다. 하지만 name
은 여전히 non-nullable 타입이며, 기본값을 가지고 있기 때문에 이 매개변수를 제공하지 않아도 됩니다.
두 예시에서 주요 차이점은 nullable 타입을 사용함으로써 함수를 호출할 때 null
값을 명시적으로 제공할 수 있다는 점입니다. 첫 번째 예시에서는 모든 매개변수가 non-nullable 타입이기 때문에 null
값을 할당할 수 없습니다.