Flutter/Dart

Dart 연산자

오늘도개발 2023. 4. 20. 15:35

 

 1. 산술 연산자

 

 - 기본적인 + , - , * , / 를 지원한다.

 

 -  수 앞에 - 기호를 달아서 음수 표현도 가능하다 Ex> -name

 

 - ~/ 로 나머지 값을 정수 표현으로 결과를 나타 낼 수 있고(몫), %로 소수 값을 나타낼 수 있다 (나머지)  

 

void main(List<String> arguments) {

  int add = 1 + 2;

  int sub = 1 - 2;

  int multi = 1 * 2;

  double div = 1 / 2;

  int minus = -1;

  // 나눗셈의 결과값 중 몫 
  int div_int = 11 ~/ 5;
 
  // 나눗셈의 결과값 중 나머지
  double div_remainder = 11 % 2;
  
}

 

 2. 증감 연산자

 

 - 기본적인 --, ++ 연산자를 지원한다.

 

 - 수 앞에 달면 해당 코드를 실행전 계산을 수행하고 코드 뒤에 달면 해당 코드를 실행 후 값을 증가한다.

 

 - Cpu 에서 증감 연산자는 메모리 공간 2개를 확보하여 이전 값에 1을 더하는 것이 아니고, 값을 가지고 있는 메모리에 1을 을 바로 연산하여 증가시킨다. ( 메모리 효율, 성능 측면 )  

 

void main(List<String> arguments) {
  
  int num1 = 3;

  int num2 = --num1;

  int num3 = num1--;

  int num4 = ++num1;

  int num5 = num1++;

}

 

 3. 비교 연산자

 

 - 기본적인  ==, !=, >, <, >= ,<=  연산자를 모두 지원한다.

 

 - 주의! =>, =< 처럼 반대로 입력하면 컴파일 에러가 뜬다.

 

void main(List<String> arguments) {

  bool is_ok = 1 == 2;

  bool is_ok2 = 1 != 2;

  bool is_ok3 = 1 > 2;

  bool is_ok4 = 1 < 2;

  bool is_ok5 = 1 >= 2;

  bool is_ok6 = 1 <= 2;
  
}

 

 4. Type test 연산자

 

 - 타입 캐스팅을 하는 as, 해당 타입을 확인하는 is, is! 연산자가 있다.

 

void main(List<String> arguments) {

  Person pr = Person();

  // Person객체를 Student로 타입캐스팅
  Student stu = pr as Student;

 // 변수 stu가 Student 클래스(타입) 인지 확인 
  bool is_Studnet = stu is Student;
  
 // 변수 stu가 Student 클래스(타입) 가 아닌지 확인
  bool is_not_Student = stu is! Student;
  
}

class Person {
  Person();
}

class Student extends Person {
  Student();
}

 

 5. 대입 연산자

 

 - 기본적인 =, *=, %=, >>>=, ^=, +=, /=, <<=, &=, |=, -=, ~/=, >>= 연산자가 있다.

 

 - num (operator)= 1 은  num = num + 1 처럼 표현할 수 있다. 가독성 및 유지보수 효율성을 위해 기본적으로 쓰인다.

 

 - 특정 컴파일러(파이썬)에서는 대입연산자가 증감연산자처럼 계산됨으로 메모리 절약 및 성능의 향상 효과를 보일 수 있다.  

 

void main(List<String> arguments) {

  int num1 = 3;

  // num1 = num1 + 1; 과 같은 결과
  num1 += 1;

  // num1 = num1 - 2; 과 같은 결과
  num1 -= 2;

  // num1 = num1 * 3; 과 같은 결과
  num1 *= 3;
  
}

 

 6. 논리 연산자

 

- 기본적인 ! (not), || ( or ), && ( and) 연산자를 지원한다.

 

* | 는 한국 키보드 원화 표시 또는 역슬러시 ( \ ) 버튼을 shift와 함께 누르면 된다.

 

void main(List<String> arguments) {

  // not
  bool is_ok = !(1 == 2);

  // or
  bool is_ok2 = (1 == 2) || (2 == 2);

  // and
  bool is_ok3 = (1 == 2) && (2 == 2);

}

 

 7. 비트 연산자

 

 - 기본적인 & ( And), | ( or ), ^ ( Xor ), ~ ( not, 반전 ), << ( 왼쪽 시프트), >> ( 오른쪽 시프트), >>> (Unsigned 오른쪽 시프트)

 

void main(List<String> arguments) {
 
  // 이진수 0010
  int binary_num = 0x02;

  // 이진수 0000
  int binary_num2 = 0x00;

  int binary_num3 = binary_num & binary_num2;

  int binary_num4 = binary_num | binary_num2;

  int binary_num5 = binary_num ^ binary_num2;

  int binary_num6 = ~binary_num2;

  int binary_num7 = binary_num << 2;

  int binary_num8 = binary_num >> 2;

  int binary_num9 = binary_num >>> 2;

}

 

 8. 삼항 연산자

 

 - 기본적인 조건 ? 참일 경우 값: 거짓일 경우 값 으로 사용할 수있다.

 

 - if-else 문과 같지만 분기가 일어나지 않아 삼항연산자의 성능이 더욱 좋다. 하지만 무분별한 사용은 가독성 및 유지보수 효율성을 떨어뜨릴 수 있으므로 주의해서 사용한다.

 

 - Dart 에서는 ?? 연산자도 제공하는데  아래와 같이 사용할 수 있다.

 

* 삼항 연산자는 처음 접하면 어려울 수도 있으므로 예시 확인 및 다양한 연습을 통해서 익혀본다.

 

void main(List<String> arguments) {

  // 1==2 이면 4, 아니면 5 그러므로 1과 2는 다른 값이므로 num = 5 가된다.

  int num = (1 == 2) ? 4 : 5;

  String? name2;

  // name2가 null 이 아니면 name2 , null 이면 jack 을 name 에 입력
  String name = name2 ?? 'jack';
	
  // 위와 동일한 결과 
  String name3 ??= 'jack';

}