본문 바로가기
개발/플러터

[Flutter] required 키워드, ?? 연산자, ?. 연산자

by 데브시나 2022. 5. 30.

목차

  1. required 키워드
  2. ?? 연산자
  3. ?. 연산자

 

1. required 키워드

  • 생성자는 class를 생성할 때 한번만 호출이 가능한 메소드이며 특징은 return type을 암시하지 않습니다. 당연히 해당 class의 객체를 생성하니 굳이 써줄 필요가 없습니다.
  • Named Arguement를 사용하여 인자를 콕 찝어서 값을 할당하려면 { } 을 활용하면 됩니다. 생성자에서 인자들을 {} (중괄호)로 감싸면 됩니다. 그러면 생성자를 호출할 때, 생성자(인자: 값, 인자: 값) 형태로 호출하면 됩니다.
  • dart언어에서 null-safety를 적용을 했다면 클래스의 인자에 null을 적용할 지를 지정할 수 있습니다.
  • ? 연산자를 이용하면 클래스의 인자에 null을 적용할 수 있습니다.

 

class Fruit {
    String name;
    String kind;
    int count;

    Fruit({
        this.name,
        this.kind,
        this.count
    });
}

 

null-safety를 적용한 프로젝트에서 클래스에서 생성자를 지정하면 아래와 같은 에러메시지를 볼 수 있습니다.

 

 

‘kind’ 매개변수는 유형 때문에 ‘null’ 값을 가질 수 없지만 기본값은 ‘null’ 입니다. ‘null’이 아닌 명시적 기본값이나 ‘필수’ 수정자를 추가해보세요.란 안내메시지가 뜹니다.

생성자에서 named argument를 사용하기 위해 중괄호를 사용했기 때문에 뜹니다. 생성자에 { }를 사용하지 않고, 매개변수를 무조건으로 받게 처리하면 위의 메시지는 뜨지 않습니다.

class Fruit {
    String name;
    String kind;
    int count;

    Fruit(this.name, this.kind, this.count);
}

 

하지만 Named Argument를 사용할 경우 매개변수에 null을 지정하지 않은 경우 생성자의 { } 사이의 매개변수에 required 선언자를 사용합니다.

class Fruit {
    String name;
    String kind;
    int count;

    Fruit({
        required this.name,
        required this.kind,
        required this.count
    });
}

 

null-safety을 적용한 후 매개변수에 null을 허용하는 ? 연산자를 사용하면 매개변수에 꼭 required란 키워드가 필요하지 않습니다.

 

 

2. ?? 연산자

  • ?? 연산자는 변수의 값에 null인 경우 다른 값으로 대체할 때 사용합니다.
  • 좌항이 null 이 아니면 좌항 값을 리턴하고 null이면 우항 값을 리턴합니다.
void main() {
    int? a;

    print('a의 값은 ${a ?? '0'} 입니다.');

    a = 10;
    print('a의 값은 ${a ?? '0'} 입니다.');
}

결과

a의 값은 0입니다.

a의 값은 10입니다.

 

 

3. ?. 연산자

  • 조건적 멤버 접근(Conditional member access) 연산자라고 합니다.
  • ?. 연산자는 객체가 null 이 아니면 추가 필드에 액세스하고 그렇지 않으면 null을 반환합니다.

 

 

댓글