Dart

(Dart) QQ Operator 와 Typedef

돗개진 2024. 10. 16. 15:40

QQ Operator

?? 와 ?= 의 의미와 사용 방법

void main() {
  String? name;
  name ??= 'nico';
}

String capitalizeName(String? name) =>
    name?.toUpperCase() ?? 'ANON';

 

??= 의 의미

: nullable 변수를 생성한 뒤 해당 변수가 null 이라면 nico 라는 값을 넣는다.

 

  • left ?? right (name?.toUpperCase() ?? 'ANON';)
        left 가 null 일 경우 right를 return
        left 가 null 아닐 경우 left를 그대로 return
String? name;
print(name ?? 'Unknown');  // 'Unknown' 출력

name = 'John';
print(name ?? 'Unknown');  // 'John' 출력


   

  •  name != null ? name.toUpperCase() : 'ANON';
        name 이 null 이 아니라면? toUpperCase() 로 넘어가고 그렇지 않으면? 'ANON'
String? name;
print(name != null ? name.toUpperCase() : 'ANON');  // 'ANON' 출력

name = 'John';
print(name != null ? name.toUpperCase() : 'ANON');  // 'JOHN' 출력

 


 

Typedef

typedef 는 자료형에 alias(별명)을 붙일 수 있게 하는 것으로 개발자가 원하는 만큼 생성 가능하다.

 

typedef UserInfo = Map<String, String>;
String sayHi(Map<String, String> userInfo) {
  return "Hi ${userInfo['name']}";
}

typedef ListOfInts = List<int>;
ListOfInts reverseListOfNumbers(ListOfInts list) {
  var reversed = list.reversed;
  return reversed.toList();
}

void main() {
  sayHi({"name" : 'nico'});
}

 

 

위 코드처럼 typedef 는 복잡한 타입이나 자주 쓰이는 타입의 별칭을 정의하여 코드의 가독성을 높이고 중복된 타입 선언을 줄여주는 데 사용한다. (해당 예시: Map<String, String> 을 UserInfo 로, List<int> 를 ListOfInts 로 별칭하여 사용함)

 

typedef 는 특히 복잡한 함수 타입이나 콜백 함수에 유용하게 사용할 수 있다!