이번 강좌에서는
- 다트 기본 연산자
- 산술연산자
- 비교연산자
- 논리연산자
- 연산자 우선순위
에 대해 다룹니다.
![[Flutter] 플러터 Dart(다트) 연산자(2024.09.최신) – 기초강의 2강 2 Dart](http://ddoko.co.kr/wp-content/uploads/2024/09/image-17-optimized.png)
안녕하세요 여러분! 오늘은 플러터 기초 문법인 다트 기본 오퍼레이터/연산자에 대해 다뤄보겠습니다.
오늘은 기본적인 연산자를 통해서 간단한 논리연산 혹은 산술연산에 대해서 배우면서 프로그래밍의 기본을 익혀보겠습니다.
아주 기초적인 내용이고 어렵지 않은 내용이라 이해하시기 편할 것이라 생각합니다.
덧붙여 시프트 연산은 기초강의에서 다루지 않겠습니다. 초보자의 사용빈도가 낮을 뿐 아니라 이해하기 어려울 수 있기 때문입니다.
![[Flutter] 플러터 Dart(다트) 연산자(2024.09.최신) – 기초강의 2강 3 플러터 연산자](https://ddoko.co.kr/wp-content/uploads/2024/09/image-39-optimized.png)
0. Flutter 컴파일러(online flutter)
이번 강의에서는 온라인 컴파일러를 적극 활용할 예정으로 새창에 홈페이지를 띄워놓도록 하자
주소 : www.dartpad.dev
![[Flutter] 플러터 Dart(다트) 연산자(2024.09.최신) – 기초강의 2강 4 온라인 컴파일러](https://ddoko.co.kr/wp-content/uploads/2024/09/image-37-1024x333-optimized.png)
1. Dart Operater(플러터 연산자 / 다트 연산자)
1.0. 대입연산자
아마 코딩 공부하는 분중에 플러터 먼저 시작하시는 분은 없겠지만 그래도 언어 강의인만큼 기초를 잡긴하겠습니다.
i = 0; // 오른쪽 값을 왼쪽에 대입합니다.
부가 설명이 필요 없을만큼 기본이라 생각하지만 비교연산에 언급될 예정이라 소개드립니다.
1.1. 산술연산자
연산자 | 의미 |
---|---|
+ | 더하기 |
– | 빼기 |
* | 곱하기 |
/ | 나누기(결과는 실수) |
~/ | 나누기(결과는 정수) |
% | 나머지 |
코드로 예제 바로 보겠습니다.
print(2 + 3); // 5
print(2 - 3); // -1
print(5 / 2); // 2.5
print(5 ~/ 2); // 2
print(5 % 2); // 1
다른 언어와 차이점은 정수로 결과가 나오는 나누기 연산자가 있기 때문에
그 부분에 대해 인지하시면 좋을 것 같습니다.
초심자 분들이 코딩을 이해하기 어려운 첫 난관이라 생각하는
증감 연산자도 당연히 있습니다.
연산자 | 의미 |
---|---|
i++ | i 값을 반환 후 1 증가 |
++i | i 값을 1 증가한 후 반환 |
i-- | i 값을 반환 후 1 감소 |
--i | i 값을 1 감소한 후 반환 |
초심자의 첫난관을 잘 극복하기 위해서 간단하게 설명하겠습니다.
i++
의 경우 먼저 온 i
를 사용하고 난 뒤 ++(+1)해준다는 뜻입니다.(++는 +1과 같은 의미인 것이죠.)++i
는 먼저 온 ++(+1)을 해주고 난 뒤 i
값을 사용한다는 뜻입니다.
여기서 보통 프로그래밍 초보자 분들이 이해하기 어려워 하시고 첫 이탈이 발생하기 시작합니다.
이것 ‘만’ 보면 쉬워보이지만 책에는 크리스마스 트리 그리는 과제랑 바로 같이 나오기도 합니다.
*
***
*****
*******
*********
***********
||| // print와 for제어문을 배울 때 국룰처럼 나오는 예제입니다..
// 이걸하기 전에 미리 꼭 이해해야 하는 것입니다.
1.2. 비교연산자
비교 연산자는 두 값을 비교하여 참 거짓을 반환합니다.
연산자 | 의미 |
---|---|
== | 두 값이 같으면 true |
!= | 두 값이 다르면 true |
> | 왼쪽 값이 더 크면 true |
< | 오른쪽 값이 더 크면 true |
>= | 왼쪽 값이 크거나 같으면 true |
<= | 오른쪽 값이 크거나 같으면 true |
이 부분은 제 기억에 따르면 초등학교 때 수학에서 나오는 개념과 같습니다.
약간 헷갈릴 수 있는 것은 <=
인지 =<
인지 가끔 헷갈릴 수가 있지만 간단히 생각하시면 됩니다.
void main() {
int a = 5;
int b = 3;
int c = 5;
// == 연산자: 두 값이 같으면 true
print('a == c: ${a == c}'); // 5 == 5
// != 연산자: 두 값이 다르면 true
print('a != b: ${a != b}'); // 5 != 3
// > 연산자: 왼쪽 값이 더 크면 true
print('a > b: ${a > b}'); // 5 > 3
// < 연산자: 오른쪽 값이 더 크면 true
print('b < a: ${b < a}'); // 3 < 5
// >= 연산자: 왼쪽 값이 크거나 같으면 true
print('a >= c: ${a >= c}'); // 5 >= 5
// <= 연산자: 오른쪽 값이 크거나 같으면 true
print('b <= a: ${b <= a}'); // 3 <= 5
}
/* ------------결과-------------
a == c: true
a != b: true
a > b: true
b < a: true
a >= c: true
b <= a: true
*/
1.3. 논리연산자
논리연산자는 세 개 밖에 없습니다.
연산자 | 의미 |
---|---|
|| | 앞 값과 뒷 값 중 하나 만이라도 참이라면 true |
&& | 앞 값과 뒷 값 모두 참이라면 true |
! | 결과를 반전시킵니다. (true -> false) / (false -> true) |
if 제어문에서 꼭 사용하게 될 친구들 입니다.
2. 연산자 우선순위
순위 | 연산자 | 설명 | 보는 순서 |
---|---|---|---|
1 | i++ , i-- ,() ,[] ,?[] ,. ,?. ,! | 단항 후위 연산자 | 없음 |
2 | - i, !i , ~i , ++i , --i , await i | 단항 전위 연산자 | 없음 |
3 | * / % ~/ | 곱셈 연산자 | 좌측 |
4 | + - | 덧셈 연산자 | 좌측 |
5 | << >> >>> | 비트 이동 연산자 | 좌측 |
6 | & | 비트 AND 연산자 | 좌측 |
7 | ^ | 비트 XOR 연산자 | 좌측 |
8 | | | 비트 OR 연산자 | 좌측 |
9 | >= > <= < as is is! | 관계 및 타입 테스트 연산자 | – |
10 | == != | 비교 연산자 | – |
11 | && | 논리 AND 연산자 | 좌측 |
12 | || | 논리 OR 연산자 | 좌측 |
13 | ?? | null 병합 연산자 | 좌측 |
14 | expr1 ? expr2 : expr3 | 조건부 연산자(삼항연산자) | 우측 |
15 | .. ?.. | 연쇄 연산자 | 좌측 |
16 | = , *= , /= , += , -= , &= , ^= | 할당 연산자 | 우측 |
모든 연산자들의 예시를 모아보겠습니다.
2.1. 단항 후위 연산자
void main() {
int a = 5;
print(a++); // 출력: 5 (먼저 값을 반환하고 그 후에 a는 6이 됨)
print(a); // 출력: 6
}
2.2. 단항 전위 연산자
void main() {
int b = 5;
print(++b); // 출력: 6 (먼저 값을 증가시킨 후 반환)
}
2.3. 곱셈 연산자
void main() {
int a = 5;
int b = 3;
print(a * b); // 출력: 15
print(a / b); // 출력: 1.6667
print(a % b); // 출력: 2
print(a ~/ b); // 출력: 1 (정수 나눗셈)
}
2.4. 덧셈 연산자
void main() {
int a = 5;
int b = 3;
print(a + b); // 출력: 8
print(a - b); // 출력: 2
}
2.5. 비트 이동 연산자 // 이 내용은 초보자 과정에서 다루지 않습니다.
void main() {
int a = 3; // 3은 2진수로 0000 0011
print(a << 1); // 출력: 6 (왼쪽으로 1칸 이동: 0000 0110)
print(a >> 1); // 출력: 1 (오른쪽으로 1칸 이동: 0000 0001)
}
2.6. 비트 AND 연산자
void main() {
int a = 6; // 2진수로 0110
int b = 3; // 2진수로 0011
print(a & b); // 출력: 2 (0110 & 0011 = 0010)
}
2.7. 비트 XOR 연산자
void main() {
int a = 6; // 2진수로 0110
int b = 3; // 2진수로 0011
print(a ^ b); // 출력: 5 (0110 ^ 0011 = 0101)
}
2.8. 비트 OR 연산자
void main() {
int a = 6; // 2진수로 0110
int b = 3; // 2진수로 0011
print(a | b); // 출력: 7 (0110 | 0011 = 0111)
}
2.9. 관계 및 타입 테스트 연산자
void main() {
int a = 5;
int b = 3;
print(a > b); // 출력: true
print(a is int); // 출력: true
print(a is! String); // 출력: true (a는 String이 아님)
}
2.10. 비교 연산자
void main() {
int a = 5;
int b = 3;
print(a == b); // 출력: false
print(a != b); // 출력: true
}
2.11. 논리 AND 연산자
void main() {
bool isSunny = true;
bool isWarm = true;
print(isSunny && isWarm); // 출력: true (두 조건이 모두 참)
}
2.12. 논리 OR 연산자
void main() {
bool isSunny = true;
bool isRainy = false;
print(isSunny || isRainy); // 출력: true (하나의 조건이 참이므로)
}
2.13. null 병합 연산자
void main() {
String? name;
print(name ?? 'Guest'); // 출력: 'Guest' (name이 null이므로)
}
2.14. 조건부 연산자
void main() {
int a = 5;
int b = 3;
print(a > b ? 'a가 큽니다' : 'b가 큽니다'); // 출력: 'a가 큽니다'
}
2.15. 연쇄 연산자
class Paint {
String color = '';
int strokeWidth = 0;
}
void main() {
var paint = Paint()
..color = 'red'
..strokeWidth = 5;
print('Color: ${paint.color}, StrokeWidth: ${paint.strokeWidth}'); // 출력: Color: red, StrokeWidth: 5
}
2.16. 할당 연산자
void main() {
int a = 5;
a += 3; // a = a + 3
print(a); // 출력: 8
}
이렇게 오늘은
- 다트 기본 연산자
- 산술연산자
- 비교연산자
- 논리연산자
- 연산자 우선순위
에 대해서 배워봤습니다. 연산자에 대한 내용은 코딩의 기본이기 때문에 가장 자주 쓰기에 자주보지 않지만
우선순위에 대해서는 주니어 개발자도 한 번 쯤 볼만한 내용입니다.
다음시간에는 주석에 대해서 배울 것 입니다.
강좌를 보다가 조금이라도 궁금한 것이나 이상한 점이 있다면 꼭 댓글을 남겨주시기 바랍니다.
그 외에도 강좌에 관련된 것이라면 어떠한 것도 질문해 주셔도 상관 없습니다.
생각해 볼 문제도 정 모르겠다면 댓글을 달아주세요.