Dart에서 연산자 완벽 가이드

2024. 6. 20. 20:29Flutter/Dart Language

반응형

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

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

카카오톡 오픈 채팅방

https://open.kakao.com/o/gsS8Jbzg

반응형