void main() {
print('Hello World!');
}
Dart는 기본적으로 int
, double
, bool
, String
등의 타입이 있지만, var
키워드를 이용하여 타입을 생략할 수 있다.
var
키워드를 사용하면 변수에 할당된 값의 타입을 추론하여 타입을 선택하게 된다.
코드
void main() {
// 남슈크림빵이라고 하는 문자열을 name이라는 변수에 할당한다.
// name의 타입을 별도로 지정하지 않았지만, dart 파서가 추론하여 자동으로 String 타입으로 선언한다.
var name = '남슈크림빵';
// print() 함수를 이용하여 값을 출력할 수 있다.
print(name);
// 다른 타입의 데이터도 변수에 할당하고 출력할 수 있다.
// 28이라는 값을 변수에 할당하면 int 타입으로 추론하여 선언한다.
var age = 28;
// 1.7이라는 값을 변수에 할당하면 double 타입으로 추론하여 선언한다.
var height = 1.7;
// false라는 값을 변수에 할당하면 bool 타입으로 추론하여 선언한다.
var married = false;
print(age);
print(height);
print(married);
}
결과
남슈크림빵
28
1.7
false
var
키워드는 모든 타입에 사용할 수 있지만, 한 번 값이 초기화되면 해당 타입이 고정되어 다른 타입의 데이터를 변수에 넣을 수 없다.
또한 var
키워드로
당연히 int
, double
, bool
, String
등의 타입을 이용하여 명시적으로 변수를 선언할 수 있다.
코드
String name = '남슈크림빵';
int age = 28;
double height = 1.7;
bool married = false;
print(name);
print(age);
print(height);
print(married);
결과
남슈크림빵
28
1.7
false
Dart Built-in types
Dart에는 다음과 같은 기본 타입을 가진다.(더 있을 수 있음..ㅎ)
List
, Set
, Map
등의 타입은 나중에 따로 자세히 다루도록 하겠다.
타입 | 예시 | 비고 |
---|---|---|
Object | Object data = 10; | 모든 데이터 타입의 슈퍼타입 |
num | num a = 10; | int형과 double형의 슈퍼타입 |
int | int a = 10; | 정수를 저장할 수 있는 타입 |
doule | double a = 10.3; | 실수를 저장할 수 있는 타입 |
bool | bool isDone = false; | true, false를 저장할 수 있는 불린 타입 |
String | String name = '남슈크림빵'; | 문자열을 저장할 수 있는 타입 |
var | var tmp = 24; | 초기화 후 타입 변경이 불가능한 미지정 타입 |
dynamic | dynamic tmp2 = 'tmpData'; | 초기화 후 타입 변경이 가능한 미지정 타입 |
List | var list = [1,2,3]; | 순서를 가지는 일반적인 콜렉션 |
Set | var colors = {'red', 'blue', 'yellow'}; | 순서와 중복이 없는 콜렉션 |
Map | var data = {'name': '남슈크림빵', 'age': 28}; | 연관된 키와 값을 가지는 오브젝트 |
기본적인 덧셈, 뺄셈, 곱셈, 나눗셈 등을 위해 사용하는 연산자 +
, -
, *
, /
나머지를 구하는 연산자 %
값의 증감을 위해 사용하는 연산자 ++
, --
코드
void main() {
// int형 정수 2라는 값을 가지는 number 변수 선언
int number = 2;
// 기본 사칙연산
// number라는 정수 2에 정수 2를 더함
print('number + 2 = ${number + 2}');
// number라는 정수 2에 정수 2를 뺌
print('number - 2 = ${number - 2}');
// number라는 정수 2에 정수 2를 곱함
print('number * 2 = ${number * 2}');
// number라는 정수 2에 정수 2를 나눔
print('number / 2 = ${number / 2}');
// 추가로 자주 사용하는 연산자
// number라는 정수 2를 정수 2로 나눈 나머지
// if (number % 2 == 0)과 같은 형태로 2로 나누어 떨어지는지 확인할 때 사용할 수 있음
print('number % 2 = ${number % 2}');
// number라는 정수 2를 정수 3으로 나눈 나머지
// number의 값이 3보다 작기 때문에 자기 자신이 나머지값으로 나옴
print('number % 3 = ${number % 3}');
// number 변수의 값을 1 증가시키는 연산자
// 전위 및 후위 증가 연산자가 있으며 다른 연산자와 같이 사용될 때 결과가 다를 수 있기 때문에 주의할 필요가 있음
print('++number = ${++number}'); // 전위 증가연산자
print('number++ = ${number++}'); // 후위 증가연산자
print('number = ${number}');
// number 변수의 값을 1 감소시키는 연산자
// 전위 및 후위 감소 연산자가 있으며 다른 연산자와 같이 사용될 때 결과가 다를 수 있기 때문에 주의할 필요가 있음
print('--number = ${--number}'); // 전위 감소연산자
print('number-- = ${number--}'); // 후위 감소연산자
print('number = ${number}');
}
결과
number + 2 = 4
number - 2 = 0
number * 2 = 4
number / 2 = 1
number % 2 = 0
number % 3 = 2
++number = 3
number++ = 3
number = 4
--number = 3
number-- = 3
number = 2
변수에 어떤 값을 할당할 때 사용하던 =
는 기본적인 할당 연산자이다.
이외에도 많은 할당 연산자가 존재하며 대부분은 기존에 있는 연산자를 편리하게 사용하기 위해 쓴다.
연산자 | 예시 | 비고 |
---|---|---|
= | a = 10; | a 변수에 10을 할당 |
+= | a += 10; | a 변수의 값에 10을 더한 결과를 다시 a 변수에 할당 |
-= | a -= 10; | a 변수의 값에 10을 빼는 결과를 다시 a 변수에 할당 |
*= | a *= 10; | a 변수의 값에 10을 곱한 결과를 다시 a 변수에 할당 |
/= | a /= 10; | a 변수의 값에 10을 나눈 결과를 다시 a 변수에 할당 |
%= | a %= 10; | a 변수의 값에 10을 나머지를 구한 결과를 다시 a 변수에 할당 |
다른 언어처럼 >
, <
, >=
, <=
, ==
, !=
과 같은 관계 연산자를 이용할 수 있다.
관계연산자에 대한 결과는 bool
형으로 반환된다.
연산자 | 예시 | 비고 |
---|---|---|
> | a > b | 보다 큰가? |
< | a < b | 보다 작은가? |
>= | a >= b | 보다 크거나 같은가? |
<= | a <= b | 보다 작거나 같은가? |
== | a == b | 같은가? |
!= | a != b | 같지 않은가? |
코드
void main() {
// int형 정수 2라는 값을 가지는 number 변수 선언
int number = 2;
// number 변수의 값이 정수 3보다 큰지를 비교함
print('number > 3 = ${number > 3}');
// number 변수의 값이 정수 3보다 작은지를 비교함
print('number < 3 = ${number < 3}');
// number 변수의 값이 정수 3보다 크거나 같은지를 비교함
print('number >= 3 = ${number >= 3}');
// number 변수의 값이 정수 3보다 작거나 같은지를 비교함
print('number <= 3 = ${number <= 3}');
// number 변수의 값이 정수 3과 같은지를 비교함
print('number == 3 = ${number == 3}');
// number 변수의 값이 정수 3과 같지 않은지를 비교함
print('number != 3 = ${number != 3}');
결과
number > 3 = false
number < 3 = true
number >= 3 = false
number <= 3 = true
number == 3 = false
number != 3 = true
다른 언어들과 마찬가지로 Dart도 비트 연산자를 지원한다.
제공된 데이터들 간의 비트 연산을 진행하는데 사용된다.
연산자 | 예시 | 비고 |
---|---|---|
& | a & b | a와 b의 AND 비트 연산 |
\| | a | b | a와 b의 OR 비트 연산 |
^ | a ^ b | a 와 b의 XOR 비트 연산 |
~ | ~a | a의 비트 반전 연산 |
<< | a << b | a를 b 비트만큼 왼쪽으로 이동 |
>> | a >> b | a를 b 비트만큼 오른쪽으로 이동 |
주어진 논리식을 판단하여 참/거짓을 판단하는 연산자로 비트연산자와 비슷하다
연산자 | 예시 | 비고 |
---|---|---|
&& | a && b | a와 b의 AND 연산 |
\|\| | a || b | a와 b의 OR 연산 |
! | !a | a의 NOT 연산 |
흔히 3항연산자로 불리는 연산자로, 조건식에 따라 다른 결과를 반환하는 연산자로 사용된다.
연산자 | 예시 | 비고 |
---|---|---|
a ? b : c | var result = a > 10 ? true : false | a의 조건이 참이면 b를, 거짓이면 c를 반환 |
as
, is
, is!
연산자를 이용하여 타입 테스트를 수행할 수 있다.
is
와 is!
는 타입을 테스트하는 연산자로, 변수의 타입을 체크할 때 사용한다.
as
는 데이터의 타입을 명시적으로 캐스팅할 때 사용하며, 업캐스팅과 다운캐스팅이 있다. as는 나중에 다시 살펴보도록 하자.
연산자 | 예시 | 비고 |
---|---|---|
as | a as Object | a의 타입을 Object로 캐스팅 |
is | a is String | a의 타입이 String인가? |
is! | a is! String | a의 타입이 String이 아닌가? |