Dart 언어 오답노트 : 13. named parameter

샤워실의 바보·2023년 10월 24일
0
post-thumbnail

코드에서 보여진 바와 같이 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 세 개의 매개변수를 가지고 있으며, 이들 모두 반드시 제공되어야 합니다.

기본값(Default Value)

선택적 매개변수에 기본값을 지정하면, 함수를 호출할 때 해당 매개변수를 생략할 수 있습니다. 매개변수를 생략하면 기본값이 사용됩니다.

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)

?를 사용하는 것에는 중요한 차이점이 있습니다. ?는 타입을 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 세 개의 매개변수를 받지만, agecountry는 nullable 타입입니다. 이는 이 매개변수들에 null 값을 할당할 수 있다는 것을 의미합니다. 하지만 name은 여전히 non-nullable 타입이며, 기본값을 가지고 있기 때문에 이 매개변수를 제공하지 않아도 됩니다.

두 예시에서 주요 차이점은 nullable 타입을 사용함으로써 함수를 호출할 때 null 값을 명시적으로 제공할 수 있다는 점입니다. 첫 번째 예시에서는 모든 매개변수가 non-nullable 타입이기 때문에 null 값을 할당할 수 없습니다.

profile
공부하는 개발자

0개의 댓글