Dart 산술 연산자

기본 이항 산술 연산자

두 수치 간 연산에 사용하며 총 7가지 종류가 있습니다. 일반 사칙연산, 정수 나눗셈, 나머지 연산, 단항 부호 연산자를 포함합니다.

연산자기능 설명
+덧셈
-뺄셈
-식단항 마이너스 (부호 반전, 수의 양음을 뒤집음)
*곱셈
/일반 나눗셈, 결과는 언제나 double 부동소수점 타입
~/정수 나눗셈, 소수점을 버리고 int 정수 타입 반환
%모듈러 연산 (정수 나눗셈의 나머지 추출)

나눗셈은 다른 언어와 달리 특징이 있는데, / 연산의 결과는 무조건 실수형입니다. 정수 결과가 필요하면 ~/를 사용해야 하므로 프로그래밍 기초가 있는 개발자는 반드시 주의해야 합니다.

예시 코드

void main() {
        // 사칙연산, 정수 나눗셈, 모듈러 테스트
	print(2 + 3 == 5);
	print(2 - 3 == -1);
	print(2 * 3 == 6);
	print(5 / 2 == 2.5);  // 일반 나눗셈은 소수 double 반환
	print(5 ~/ 2 == 2);   // 정수 나눗셈은 정수 부분만 보관 int
	print(5 % 2 == 1);    // % 모듈러는 정수 나눗셈의 나머지만 구함

	// 몫과 나머지를 문자열로 합치는 예시
	print('5/2 = ${5 ~/ 2} r ${5 % 2}' == '5/2 = 2 r 1');
}Code language: Dart (dart)

실행 결과 이미지

증가 / 감소 연산자

Dart는 전위후위 두 가지 형태의 증가 ++, 감소 --를 지원합니다. 핵심 차이점은 변수를 먼저 수정할지, 값을 먼저 가져올지 입니다.

연산자실행 로직표현식 반환값
++var변수에 1을 더한 뒤 연산에 참여증가 후 새 값
var++변수의 원본 값으로 먼저 연산을 진행하고 연산 종료 후 변수에 1을 더함증가 전 원본 값
--var변수에 1을 뺀 뒤 연산에 참여감소 후 새 값
var--변수의 원본 값으로 먼저 연산을 진행하고 연산 종료 후 변수에 1을 뺌감소 전 원본 값
void main() {
	int a;
	int b;

	// 1. 전위 증가 ++a: 먼저 증가 후 할당
	a = 0;
	b = ++a;
	print(a == b); // a=1, b=1 → true

	// 2. 후위 증가 a++: 먼저 할당 후 증가
	a = 0;
	b = a++;
	print(a != b); // a=1, b=0 → true

	// 3. 전위 감소 --a: 먼저 감소 후 할당
	a = 0;
	b = --a;
	print(a == b); // a=-1, b=-1 → true

	// 4. 후위 감소 a--: 먼저 할당 후 감소
	a = 0;
	b = a--;
	print(a != b); // a=-1, b=0 → true
}
Code language: PHP (php)

위 예시의 모든 출력 결과는 true입니다.

주의할 점: ++ 또는 –의 위치가 전위냐 후위냐에 따라 연산 결과가 달라집니다.

단독으로 사용하는 경우 예시:

int a = 1;
++a;

int b  = 1;
b++;

print(a);
print(b);Code language: PHP (php)

위 코드의 최종 출력은 둘 다 2입니다.

D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
2
2
Code language: CSS (css)

— 연산도 동일한 원리로, 변수는 최종적으로 1이 더해지거나 빼집니다.

하지만 ++, –가 수식 안에 포함될 경우 차이가 발생합니다. 예시:

void main() {
  int a = 5;
  // 후위: 5로 먼저 연산한 뒤 a를 6으로 변경
  int res1 = a++ * 2;
  print(res1); // 10
  print(a);  // 6

  int b= 5;
  // 전위: b를 먼저 6으로 바꾼 뒤 연산
  int res2 = ++b * 2;
  print(res2); // 12
  print(b); // 6
}Code language: PHP (php)

a와 b의 최종 값은 모두 6으로 같지만, res1과 res2의 결과는 다릅니다. 단지 ++의 위치가 앞이냐 뒤냐의 차이일 뿐입니다.

후위 a++의 원리: 먼저 a=5로 a*2=10 연산을 실행하고 해당 값을 res1에 저장한 후 a에 1을 더해 6이 됩니다.

전위 ++b의 원리: 먼저 b에 1을 더해 6으로 만든 뒤 6*2=12 연산을 실행해 res2에 저장합니다.

int res1 = a++ * 2; 를 분해하면 아래와 같습니다.

int res1 = a * 2;
a = a +1;

int res2 = ++b * 2; 를 분해하면 아래와 같습니다.

b = b+1;
int res2 = b * 2;

쉽게 외울 수 있는 구절:

전위는 먼저 수정, 후위는 먼저 사용;

전위는 새로운 값 반환, 후위는 원본 값 반환.

요약

전위 ++a / --a: 변수를 먼저 수정한 뒤 수정된 값으로 연산 및 할당에 사용

후위 a++ / a--: 변수의 원본 값으로 먼저 연산 및 할당을 진행하고 연산이 끝난 후 변수를 수정

아래 예시를 직접 실행하며 확인해보세요.

void main() {
  int a = 0;
  int b = ++a; 
  // 1단계: a = a + 1 → a=1
  // 2단계: 수정된 a(1)을 b에 할당
  print(a); // 1
  print(b); // 1
}
void main() {
  int a = 0;
  int b = a++;
  // 1단계: 원본 a 값 0을 b에 할당
  // 2단계: a = a + 1 → a=1
  print(a); // 1
  print(b); // 0
}
void main() {
  int a = 0;
  int b = --a;
  // 1단계: a = a - 1 → a=-1
  // 2단계: 수정된 a(-1)을 b에 할당
  print(a); // -1
  print(b); // -1
}
void main() {
  int a = 0;
  int b = a--;
  // 1단계: 원본 a 값 0을 b에 할당
  // 2단계: a = a - 1 → a=-1
  print(a); // -1
  print(b); // 0
}

위 코드들은 전위/후위 증감 연산자의 가장 간단한 예시입니다. 직접 컴파일하고 실행해 차이를 체감하시기 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다