Foggy day

[Dart] 연산자, 형변환 본문

Flutter/Dart 문법

[Dart] 연산자, 형변환

jinhan38 2023. 3. 2. 12:15

 

 

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