기본 이항 산술 연산자
두 수치 간 연산에 사용하며 총 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
}
위 코드들은 전위/후위 증감 연산자의 가장 간단한 예시입니다. 직접 컴파일하고 실행해 차이를 체감하시기 바랍니다.