~songbly/blog
Published on

Dart의 required 키워드

Authors

required 키워드

필요한 매개 변수를 전달하도록 강제 할 수 있는 키워드 이다.
매개변수에 required 가 붙으면 lint 에러를 통해 필수값을 알 수 있다.
Dart의 정적 분석이 실행되는 것은 아니다.

아래의 코드를 dartpad를 통해 실행시키면 에러가 발생한다.\

int addTreeValues({
  int first,
  int second,
  int third,
}) {
  return first + second + third;
}

void main() {
  final sum = addTreeValues(
    first: 2,
    second: 5,
    third: 3,
  );

  print(sum);
}

에러를 살펴 보면

Error: The parameter 'first' can't have a value of 'null' because of its type 'int'

first 라는 매개변수가 int 타입으로 지정되어 있어, null 값이 허용될 수 없다는 에러가 발생하고 있다. 위의 에러를 해결하려면, 아래와 같이 addTreeValues 함수의 파라미터들에게 required 를 입력해 주면 된다.

int addTreeValues({
  required int first,
  required int second,
  required int third,
}) {
  return first + second + third;
}

이렇게 required 키워드를 입력하면, 이 함수를 사용하는 측에서 필요한 매개변수를 제공하지 않으면 Dart는 코드가 컴파일 되기도 전에 문제가 발생할 것을 알수 있게 된다. 애초에 나는 이 코드를 컴파일 하지 않을 것이다! 하고 린트 에러를 발생시킨다.

int addTreeValues({
  required int first,
  required int second,
  required int third,
}) {
  return first + second + third;
}

void main() {
  final sum = addTreeValues(
//    first: 2,
    second: 5,
    third: 3,
  );

  print(sum);
}
-> Error: Required named parameter 'first' must be provided.

위의 방법 처럼, required 를 입력하지 않고도 매개변수에 기본값을 사용하여, 값이 명시 되어 있는지 확인 할 수 있다.

int addTreeValues({
  required int first,
  required int second,
  int third = 0,
}) {
  return first + second + third;
}

void main() {
  final sum = addTreeValues(
    first: 2,
    second: 5,
    // third: 3,
  );

  print(sum);
}

위의 코드를 실행하면, 에러가 발생되지 않고 정상 동작한다. 세번째 인자는 필수 항목을 표시 하지 않았지만, 사용하는 측에서 값이 없다고 해도 함수 자체에서 기본적으로 0을 사용하면 된다고 Dart에게 알려주기 때문에, 에러를 발생시키지 않는다. 이것은 Dart가 null이 아닌 값으로 해당 매개변수를 초기화할 수 있기 때문에 에러를 발생시키지 않는 것이다.

정리

required 키워드를 사용하면, 선택적으로 명명된 매개변수를 필수로 명명된 매개변수로 전환할 수 있고, 해당 매개변수에 null을 허용하지 않는 유형으로 사용할 수도 있다.