매개 변수

A tour of the Dart language 페이지를 공부하면서 정리한 내용입니다.

함수는 필요한 만큼의 위치 매개변수(Positional parameters)를 가질 수 있으며, 그 뒤에는 명명된 매개변수(Named parameters) 또는 선택적 위치 매개변수(Optional positional parameters)가 올 수 있습니다. Flutter의 위젯 생성자 같은 API의 경우 필수 매개변수의 경우에도 명명된 매개변수만 사용합니다.

함수에 인수를 전달하거나 함수 매개변수를 정의할 때 후행 쉼표를 사용할 수 있습니다. Dart 언어에서 기본으로 제공하는 dart format 커멘드라인 도구를 사용하면 후행 쉼표 유무에 따라 줄바꿈 처리가 다르게 적용됩니다.

명명된 매개변수 (Named parameters)

함수를 호출할 때 paramName: value 형태로 명명된 매개변수명을 지정할 수 있습니다. 명명된 매개변수는 required로 선언하지 않는한 선택적으로 사용할 수 있습니다. 함수를 정의할 때 {param1, param2, …}의 형태로 명명된 매개변수를 정의합니다.

void enableFlags({bool? bold, bool? hidden}) {
  ...
}

enableFlags(bold: true, hidden: false);

명명된 매개변수는 일종의 선택적 매개변수이지만 required로 선언하여 필수 매개변수 임을 나타낼 수 있습니다. 사용자는 반드시 매개변수의 값을 제공해야하며, 그렇지 않을 시 컴파일러는 오류를 발생시킵니다.

const Scrollbar({Key? key, required Widget child})

선택적 위치 매개변수 (Optional positional parameters)

함수 선언 시 매개변수를 []로 감싸면 선택적 위치 매개변수로 정의됩니다. 예제에서 세번째 파라미터는 device를 사용할지는 사용자의 몫입니다.

void main() {
  print(say('Bob', 'Howdy'));
  print(say('Bob', 'Howdy', 'smoke signal'));
}

String say(String from, String msg, [String? device]) {
  var result = '$from says $msg';
  if (device != null) {
    result = '$result with a $device';
  }
  return result;
}

기본 매개변수 값 (Default parameter values)

함수는 =를 사용하여 명명된 매개변수와 선택적 위치 매개변수 모두에 대한 선택적 매개변수의 기본값을 정의할 수 있습니다. 기본값은 반드시 컴파일 타임 상수여야 합니다. 기본값이 제공되지 않을 경우 기본값은 null입니다. 다음은 명명된 매개변수의 기본값을 설정하는 예제입니다.

void enableFlags({bool bold = false, bool hidden = false}) {
  ...
}

enableFlags(bold: true);

이제 선택적 매개변수에 값을 넘기지 않았을 경우 기본값을 사용하도록 처리할 수 있습니다. 뿐만아니라 Non-Nullable 타입을 사용할 수 있게되어 번거로운 null 검사를 피할 수 있게 되었습니다. 선택적 위치 매개변수에 기본값을 설정하는 예제입니다.

void main() {
  print(say('Bob', 'Howdy'));
}

String say(String from, String msg, [String device = 'carrier pigeon']) {
  var result = '$from says $msg with a $device';
  return result;
}

기본값으로 리스트나 맵 리터럴을 전달하는 것도 가능합니다.

void main() {
  doStuff();
}

void doStuff(
    {List<int> list = const [1, 2, 3],
    Map<String, String> gifts = const {
      'first': 'paper',
      'second': 'cotton',
      'third': 'leather'
    }}) {
  print('list:  $list');
  print('gifts: $gifts');
}

Last updated