Dart는 다양한 연산자를 제공하여 프로그래머가 데이터를 조작하고 계산을 수행하도록 돕습니다.
이 블로그 게시물에서는 Dart에서 사용할 수 있는 주요 연산자를 심층적으로 살펴보고, 각 연산자의 종류, 구문, 활용 사례를 자세히 다룹니다. 또한, 연산자 우선순위와 결합 방향에 대한 이해를 돕기 위한 예시와 설명을 제공합니다.
1. 연산자 종류
Dart에서 사용할 수 있는 연산자는 크게 다음과 같은 종류로 나눌 수 있습니다.
1.1 산술 연산자
- +: 덧셈
- -: 뺄셈
- *: 곱셈
- /: 나눗셈
- %: 나머지 연산
- ~/: 정수 나눗셈
- ^: 거듭제곱 연산
1.2 관계 연산자
- ==: 같음
- !=: 다름
- >: 크기
- <: 작음
- >=: 크거나 같음
- <=: 작거나 같음
1.3 논리 연산자
- &&: 논리적 AND
- ||: 논리적 OR
- !: 논리적 NOT
1.4 등호 연산자
- =: 할당
- +=: 할당 후 덧셈
- -=: 할당 후 뺄셈
- *=: 할당 후 곱셈
- /=: 할당 후 나눗셈
- %=: 할당 후 나머지 연산
- ~=: 할당 후 비트 XOR 연산
- <<=: 할당 후 비트 왼쪽 이동
- >>=: 할당 후 비트 오른쪽 이동
1.5 질의 연산자
- ?:: 삼항 연산자
1.6 증감 연산자
- ++: 증가
- --: 감소
1.7 타입 검사 연산자
- is: 타입 instanceof 연산자
- as: 타입 변환 연산자
1.8 문자열 연산자
- +: 문자열 연결
- []: 문자열 인덱싱
- substring(): 문자열 부분 문자열 추출
- replace(): 문자열 치환
- trim(): 문자열 앞뒤 공백 제거
1.9 리스트 연산자
- []: 리스트 인덱싱
- add(): 리스트에 값 추가
- remove(): 리스트에서 값 제거
- length: 리스트 길이 확인
1.10 맵 연산자
- []: 맵 인덱싱 (키 기반 값 추출)
- putIfAbsent(): 맵에 키-값 쌍 추가 (존재하지 않으면 추가)
- remove(): 맵에서 키-값 쌍 제거
- length: 맵 길이 확인
2. 연산자 우선순위 및 결합 방향
Dart에서 연산자는 우선순위와 결합 방향에 따라 평가됩니다.
- 우선순위: 우선순위가 높은 연산자가 먼저 평가됩니다. 같은 우선순위를 가진 연산자는 결합 방향에 따라 평가됩니다.
- 결합 방향: 왼쪽에서 오른쪽 또는 오른쪽에서 왼쪽으로 결합됩니다.
다음 표는 Dart 연산자의 우선순위와 결합 방향을 나타냅니다.
괄호 | 가장 높음 | 왼쪽에서 오른쪽 | 식의 우선순위를 명시적으로 정의합니다. |
거듭제곱 | 높음 | 오른쪽에서 왼쪽 | 왼쪽에서 오른쪽으로 계산됩니다. |
곱셈, 나눗셈, 나머지 연산 | 높음 | 왼쪽에서 오른쪽 | 왼쪽에서 오른쪽으로 계산됩니다. |
덧셈, 뺄셈 | 낮음 | 왼쪽에서 오른쪽 | 왼쪽에서 오른쪽으로 계산됩니다. |
관계 연산자 (==, !=, <, >, <=, >=) | 낮음 | 왼쪽에서 오른쪽 | 왼쪽에서 오른쪽으로 비교합니다. |
같음, 다름 (==, !=) | 낮음 | 왼쪽에서 오른쪽 | 왼쪽에서 오른쪽으로 비교합니다. |
논리적 NOT (!) | 낮음 | 오른쪽에서 왼쪽 | 오른쪽 피연산자에만 적용됩니다. |
논리적 AND (&&) | 낮음 | 왼쪽에서 오른쪽 | 왼쪽 피연산자가 true인 경우에만 오른쪽 피연산자를 평가합니다. |
논리적 OR (` | `) | 낮음 | 왼쪽에서 오른쪽 |
삼항 연산자 (?:) | 낮음 | 오른쪽에서 왼쪽 | 오른쪽 피연산자(조건식)에 따라 왼쪽 또는 중앙 피연산자를 반환합니다. |
할당 연산자 (=, +=, -=, *= ... 등) | 낮음 | 오른쪽에서 왼쪽 | 오른쪽 피연산자를 계산한 후 왼쪽 피연산자에 할당합니다. |
질의 연산자 (?:) | 낮음 | 오른쪽에서 왼쪽 | 오른쪽 피연산자(조건식)에 따라 왼쪽 또는 중앙 피연산자를 반환합니다. |
증감 연산자 (++, --) | 낮음 | 오른쪽에서 왼쪽 | 오른쪽 피연산자에 대한 증감 후 반환합니다. |
문자열 연산자 (+, [], substring(), ... 등) | 낮음 | 왼쪽에서 오른쪽 | 왼쪽에서 오른쪽으로 문자열을 조작합니다. |
리스트 연산자 ([], add(), remove(), ... 등) | 낮음 | 왼쪽에서 오른쪽 | 리스트의 요소에 접근하거나 조작합니다. |
맵 연산자 ([], putIfAbsent(), remove(), ... 등) | 낮음 | 왼쪽에서 오른쪽 | 맵의 키-값 쌍에 접근하거나 조작합니다. |
3. 활용 사례
다음은 Dart에서 연산자를 활용하는 몇 가지 예시입니다.
3.1 산술 연산자
int result = 10 + 5 * 2; // result는 20입니다.
double average = (10 + 20 + 30) / 3; // average는 20.0입니다.
int remainder = 20 % 3; // remainder는 2입니다.
3.2 관계 연산자
bool isEqual = 10 == 5; // isEqual은 false입니다.
bool isGreater = 20 > 15; // isGreater는 true입니다.
bool isEven = 24 % 2 == 0; // isEven은 true입니다.
3.3 논리 연산자
bool isStudent = true && isAdult; // isStudent는 isAdult의 값에 따라 true 또는 false입니다.
bool canDrive = hasLicense || isOver18; // canDrive는 hasLicense 또는 isOver18 중 하나라도 true이면 true입니다.
bool isWeekend = dayOfWeek == 6 || dayOfWeek == 7; // isWeekend는 dayOfWeek가 6 또는 7이면 true입니다.
3.4 등호 연산자
int number = 10; // number 변수에 10을 할당합니다.
number += 5; // number 변수에 5를 더합니다. (number는 15가 됩니다.)
String message = "Hello " + name; // message 변수에 "Hello " + name 문자열을 할당합니다.
3.5 질의 연산자
int age = 20;
String message = age >= 18 ? "성인입니다" : "미성년자입니다";
print(message); // "성인입니다"를 출력합니다.
3.6 증감 연산자
int count = 0;
count++; // count 변수를 1 증가시킵니다. (count는 1이 됩니다.)
print(count); // 1을 출력합니다.
int index = 10;
index--; // index 변수를 1 감소시킵니다. (index는 9가 됩니다.)
3.7 타입 검사 연산자
dynamic value = 10;
if (value is int) {
print("value는 정수입니다.");
} else {
print("value는 정수가 아닙니다.");
}
3.8 문자열 연산자
String greeting = "Hello, Dart!";
print(greeting.length); // 12를 출력합니다.
String subString = greeting.substring(7, 11); // "Dart"를 출력합니다.
String replacedString = greeting.replace("Dart", "Flutter"); // "Hello, Flutter!"를 출력합니다.
3.9 리스트 연산자
List<int> numbers = [1, 2, 3, 4, 5];
numbers.add(6); // numbers 리스트에 6을 추가합니다.
numbers.remove(2); // numbers 리스트에서 2번째 요소를 제거합니다.
print(numbers[0]); // 1을 출력
4. 주의해야 할 사항
연산자를 사용할 때는 다음과 같은 사항에 주의해야 합니다.
- 연산자 우선순위: 연산자의 우선순위를 이해하고, 필요한 경우 괄호를 사용하여 연산 순서를 명확하게 해야 합니다.
- 연산자 결합 방향: 연산자의 결합 방향을 이해하고, 필요한 경우 괄호를 사용하여 원하는 연산 순서를 얻도록 해야 합니다.
- 데이터 유형: 연산자를 사용할 때 두 피연산자의 데이터 유형이 호환되는지 확인해야 합니다.
- 오류 방지: 연산자 오버로딩과 같은 기능을 사용하면 오류가 발생할 수 있으므로 주의해야 합니다.
5. 결론
Dart에서 연산자는 다양한 데이터 조작과 계산을 수행하는 데 필수적인 도구입니다.
이 블로그 게시물에서 다룬 연산자 종류, 우선순위, 결합 방향, 활용 사례를 이해하고 올바르게 사용한다면, 더욱 효율적이고 안정적인 Dart 프로그래밍을 할 수 있을 것입니다.
수발가족을 위한 일기장 “나비일기장”
https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release
구글플레이 앱 배포의 시작! 비공개테스트 20명의 테스터모집을 위한 앱 "테스터 쉐어"
https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release
카카오톡 오픈 채팅방
'Flutter > Dart Language' 카테고리의 다른 글
Dart에서 제어문 활용하기: 기초부터 심화까지 (0) | 2024.06.21 |
---|---|
Dart에서 삼항 연산자 활용 완벽 가이드 (0) | 2024.06.20 |
Dart 변수: 입문자를 위한 완벽 가이드 [ 리스트형 변수, 맵형 변수, 동적 변수 ] (0) | 2024.06.20 |
Dart에서 변수 형변환 완벽 가이드 (0) | 2024.06.20 |
Dart에서 동적 변수, 너무 편리한데 쓰지말라고? 동적변수사용은 편리함과 위험도 함께 한다! (0) | 2024.06.20 |