본문 바로가기
Dart (Flutter)

[Dart] Operators

by llHoYall 2023. 2. 2.

이번 포스팅에서는 Dart의 연산자에 대해 살펴보겠습니다.

타 언어대비 크게 특이한 것들은 없고 대동소이하므로 적당히 살펴보시기만 해도 충분할 것 같습니다.

Arithmetic Operators

기본적으로 사칙연산(+, _, *, /)과 modulo(%) 연산이 있고, 음수 부호(-)가 있습니다.

나눗셈(/)과 달리 정수 나눗셈(~/) 연산은 결과가 정수형으로 반환됩니다.

print(5 / 2);  // 2.5
print(5 ~/ 2);  // 2

전위 증감(++var, --var)과 후위 증감(var++, var--) 연산자도 있습니다.

Equality and Relational Operators

비교 연산자(==, !=, >, >=, <, <=)들은 이미 잘 아시는 연산자들일 것이니 따로 설명하진 않겠습니다.

Type Test Operators

다른 포스팅을 통해 소개 드린적이 있거나 소개드릴 연산자들입니다.

  • as : type casting 연산자입니다.
  • is : object가 특정 type인지를 판별하여 boolean 값으로 알려주는 연산자입니다.
  • is! : is와 반대로 동작합니다. 즉, object가 특정 type이 아닐 때 true 입니다.

Assignment Operators

익히 잘 아시는 할당 연산자들 입니다.

나열만 한 번 해볼게요.

=, +=, -=, *=, /=, ~/=, %=, <<=, >>=, >>>=, &=, |=, ^=, ??=

Logical Operators

논리 연산자(!, &&, ||)들도 따로 설명할 게 없네요. ^^

Bitwise and Shift Operators

먼저 나열부터 해드릴게요.

&, |, ^, ~, <<, >>, >>>

>>는 signed, >>>는 unsigned 정도만 아시면 따로 설명드릴 건 없을 것 같아요.

Conditional Expressions

다른 언어들에서 이미 익숙하게 보셨을 것들 입니다.

  • condition ? expr1 : expr2 : 조건이 true이면, expr1, false이면 expr2가 반환됩니다.
  • expr1 ?? expr2 : expr1이 null이 아니면 expr1, null이면 expr2가 반환됩니다.

Cascade Notation

공식 문서에서 엄밀하게 연산자는 아니고 문법 사항이라고 합니다.

같은 object에 대해 연속된 연산을 수행합니다. 따라서, object가 반환되어야만 수행되는 문법사항입니다.

Cascade

먼저, 이해를 돕기위한 예제를 보여드리겠습니다.

var paint = Paint();
paint.color = Colors.black;
paint.strokeCap = StrokeCap.round;
paint.strokeWidth = 5.0;

향후 살펴보겠지만, Dart에서는 object를 생성할 때 new keyword를 생략할 수 있습니다.

Paint라는 class가 있다고 가정을 하고, 생성자가 object를 반환한다고 합시다.

반환된 object를 사용하여 property에 값을 설정하는 예제입니다.

여기서 지루하게 반복되는 paint라는 object를 cascade notation인 ..을 사용하여 간략히 할 수 있습니다.

var paint = Paint()
  ..color = Colors.black
  ..strokeCap = StrokeCap.round
  ..strokeWidth = 5.0;

비슷한 문법이 다른 언어들에도 있는 경우가 있어서 익숙하게 느껴지시는 분들도 계실 것 같네요.

Cascade notation은 중첩해서 사용할 수 있습니다.

Null-Shorting Cascade

이번에는 null이 아닐 경우에만 적용되는 cascade 문법에 대해 살펴보겠습니다.

이번에도 예제를 먼저 보겠습니다.

var button = querySelector('#confirm');
button?.text = 'Confirm';
button?.classes.add('important');
button?.onClick.listen((e) => window.alert('Confirmed!'));
button?.scrollIntoView();

null checking을 하고 member에 접근하는 동작이 계속해서 반복되죠?

이제 null-shorting cascade notation으로 간략화 해보겠습니다.

querySelector('#confirm')
  ?..text = 'Confirm'
  ..classes.add('important')
  ..onClick.listen((e) => window.alert('Confirmed!'))
  ..scrollIntoView();

첫 부분만 ?..null checking을 한 후, 이어지는 구문은 ..으로 이어나가면 됩니다.

Other Operators

이제 남은 연산자들만 간략히 살펴보고 마무리 하겠습니다.

  • () : 함수를 호출합니다.
  • [] : subscription 연산자입니다.
  • ?[] : object가 null이 아닐 때만 동작하는 subscription 연산자입니다.
  • . : Member 접근 연산자입니다.
  • ?. : object가 null이 아닐 때만 동작하는 member 접근 연산자입니다.
  • ! : Nullable object가 null이 아님을 단정하는 연산자입니다.

Wrap Up

이번에는 Dart의 연산자들에 대해 살펴보았습니다.

다른 언어들 대비 특별한 게 없어서 쉽게 사용하실 수 있을 것 같습니다.

Cascade notation에 대해서만 낯선 분들이 계실까봐 조금 더 구체적으로 설명드려보았어요.

'Dart (Flutter)' 카테고리의 다른 글

[Dart] Functions  (0) 2023.02.03
[Dart] Control Flow Statements  (0) 2023.02.03
[Dart] Data Types  (0) 2023.02.01
[Dart] Variables  (0) 2023.01.30
[Flutter] Desktop Application using Flutter  (0) 2023.01.25

댓글