Foggy day
[Dart] 연산자, 형변환 본문
1. 연산자
연산자의 종류에는 산술, 증감, 비교, 논리가 있습니다.
- 산술 연산자 : 사칙연산
- 증감 연산자 : 더하고 빼고
- 비교 연산자 : a가 b보다 큰지 작은지 혹은 같은지 비교
- 논리 연산자 : and, or, not, equal, not equal
2. 산술 연산자
산술 연산자는 사칙연산을 할 수 있는 기능을 제공합니다. 다트에서 기본적으로 제공하는 산술 연산자는 아래와 같습니다.
- + : 더하기
- - : 빼기
- * : 곱하기
- / : 나누기
- ~/ : 나누기의 몫 구하기(int 타입으로 반환)
- % : 나누기의 나머지 값 구하기(double 타입으로 반환)
- 사용법
int age1 = 10 + 10; // 20
int age2 = 30 - 5; // 25
int age3 = 10 * 3; // 30
double age4= 5 / 2; // 2.5
int age5 = 5 ~/ 2; // 2
double age6 = 5 % 2; // 1.0
3. 증감 연산자
증감 연산자는 값을 증가시키거나 감소시키는 연산으로 ++와 -- 를 이용해 할 수 있습니다.
++를 하면 1 증가, --를 하면 1이 감소힙니다.
int age = 30;
age++; // 31
age--; // 30
이때 주의할 것은 전위 연산과 후위 연산의 차이를 이해하는 것입니다.
변수의 뒤에서 ++를 한다면 후위, 변수의 앞에서 ++를 한다면 전위 연산입니다.
int age =30;
age++; // 후위 연산
age--; // 후위 연산
++age; // 전위 연산
--age; // 전위 연산
후위와 전위연산은 실제 코딩을 할 때 차이점이 발생합니다.
int age = 30;
print(++age); // 31
print(age++); // 31
print(age); // 32
첫번째 print에서는 전위연산으로 했기 때문에 30에 1을 더한 값이 출력됩니다.
두번째 print에서는 후위연산을 했기 때문에 31이 출력됩니다. 이때 31이 출력된다고 해도 ++를 했기 때문에 age의 값은 1이 증가한 32가 됩니다.
그래서 세번째 age에서는 32출력됩니다.
4. 비교 연산자
다트에서 기본적으로 제공하는 비교연산자들이 있습니다. 연산의 값은 bool 값으로, true와 false 값을 리턴합니다. 조건문과 함께 사용합니다.
- == 같다
- != 다르다
- > 더 크다
- < 더 작다
- >= 더 크거나 같다
- <= 더 작거나 같다.
사용법
int p1 = 10;
int p2 = 20;
print('p1 == 10 : ${p1 == 10}'); // true
print('p1 == p2 : ${p1 == p2}'); // false
print('p1 != p2 : ${p1 != p2}'); // true
print('p1 > p2 : ${p1 > p2}'); // false
print('p1 < p2 : ${p1 < p2}'); // true
print('p1 > 10 : ${p1 > 10}'); // false
print('p1 >= 10 : ${p1 >= 10}'); // true
print('p1 >= 20 : ${p1 >= 20}'); // false
print('p1 <= p2 : ${p2 <= 20}'); // true
print('p1 <= p2 : ${p2 <= 10}'); // false
5. 논리 연산자
논리 연산자 또한 타 언어와 같습니다. 주로 조건문에서 사용합니다.
- &&: And
- || : or
- == : 같다
- != : 다르다
- ! : 부정
print("${true && true}"); // true
print("${true && false}"); // false
print("${false && false}"); // false
print("${true || true}"); // true
print("${true || false}"); // false
print("${false || false}"); // false
print('${true == true}'); // true
print('${true == false}'); // false
print('${false == false}'); // true
print('${true != true}'); // false
print('${true != false}'); // true
print('${false != false}'); // false
6. 형변환/타입 변경(casting)
형변환은 객체지향에서는 많이 사용하는 기능입니다. 이번 포스팅에서는 간단한 기능만 확인해보고 추후 더 자세히 다룰 예정입니다.
형변환은 형태/타입을 변환한다는 것입니다. 캐스팅이라고도 하는데 특정 타입을 다른 타입으로 변경시켜주는 것이며, 이때 변경이 가능한 형태가 아닐 경우 에러가 발생합니다.
형변환을 할 때 as라는 키워드를 사용하기도 하고, toString()이나 toInt(), toDouble()처럼 다트에서 기본적으로 제공하는 함수들을 사용하기도 합니다.
int와 double 형변환
int age = 30;
// 에러, 발생 type 'int' is not a subtype of type 'double' in type cast
// int타입과 double 타입은 다르기 때문
double age2 = age as double;
double ageIntToDouble = age.toDouble(); // 성공
print("$ageIntToDouble"); // 30.0, int일때는 30이지만 double은 실수기 때문에 소수점이 생김
// 에러 발생, type 'double' is not a subtype of type 'int' in type cast
// int타입과 double 타입은 다르기 때문
int age2 = ageIntToDouble as int;
int ageDoubleToInt = ageIntToDouble.toInt(); // 성공
print("$ageDoubleToInt"); // 30, double에서 다시 int가 되었기 때문에 소수점 사라짐
int,double과 String 형변환
int와 double을 String으로 변경할 때 toString()함수를 사용하면 됩니다.
반면 String을 int로 변경할 때는 int.parse() 함수를
String을 double로 변경할 때는 double.parse() 함수를 사용해야 합니다.
int ageInt = 10;
double ageDouble = 20.0;
String ageIntToString = ageInt.toString(); // 성공
String ageDoubleToString = ageDouble.toString(); // 성공
ageInt = int.parse(ageIntToString); // 성공
ageDouble = double.parse(ageDoubleToString); // 성공
'Flutter > Dart 문법' 카테고리의 다른 글
[Dart] 함수 (0) | 2023.03.02 |
---|---|
[Dart] 반복문(for문) (0) | 2023.03.02 |
[Dart] Collection - List, Map, Set (0) | 2023.03.02 |
[Dart] 조건문(conditional) (0) | 2023.03.02 |
[Dart] 변수(variable)와 상수(constant) (0) | 2023.03.02 |