🎉 berenickt 블로그에 온 걸 환영합니다. 🎉
Lang
Dart
01-기본 문법

1. 변수

변수 선언하는 법

1
void main() {
2
var name = '메시';
3
print(name);
4
}

1.1 변수 타입

1.1.1 정수(integer)

1
void main() {
2
int number1 = 2;
3
int number2 = 4;
4
5
print(number1 + number2);
6
print(number1 - number2);
7
print(number1 * number2);
8
print(number1 / number2);
9
}

1.1.2 실수(double)

1
void main() {
2
// 실수(double)
3
double number1 = 2.5;
4
double number2 = 0.5;
5
6
print(number1 + number2);
7
print(number1 - number2);
8
print(number1 * number2);
9
print(number1 / number2);
10
}

1.1.3 불린(boolean)

1
void main() {
2
// 참과 거짓(boolean)
3
bool isTrue = true;
4
bool isFalse = false;
5
6
print(isTrue);
7
print(isFalse);
8
}

1.1.4 문자(String)

1
void main() {
2
// 글자(string)
3
String name = "메시";
4
String name2 = "호날두";
5
6
print(name + name2);
7
print(name + ' ' + name2);
8
print('${name.runtimeType} ${name2}');
9
print('$name $name2');
10
}

1.1.5 다이나믹(dynamic)

1
/*
2
📌 dynamic 타입 : 중간에 타입 변경 가능
3
📌 var 타입 : 중간에 타입 변경 불가능
4
*/
5
void main() {
6
dynamic name = "메시";
7
print(name);
8
9
dynamic age = 20;
10
print(age);
11
12
var name2 = "호날두";
13
print(name2);
14
15
print(name.runtimeType); // String
16
print(name2.runtimeType); // String
17
18
name = 30;
19
name2 = 30; // 에러
20
}

1.2 nullable과 non-nullable

1
/*
2
📌 nullable : null 허용
3
📌 non-nullable : null 불허용
4
📌 null : 값이 없음
5
*/
6
void main() {
7
String name = '메시';
8
print(name);
9
10
String? name2 = "호날두"; // null을 허용
11
print(name2!); // null이 아님을 확신할 때 사용
12
}

1.3 final과 const

1
/*
2
📌 final : 한번 할당되면 변경 불가
3
📌 const : 한번 할당되면 변경 불가, 빌드 시점에 값을 알고 있어야 함
4
@see https://dart-ko.dev/language/variables#final-const
5
*/
6
void main() {
7
// final String name = '메시';
8
final name = '메시'; // 타입 생략 가능
9
print(name);
10
11
// const String name2 = '호날두';
12
const name2 = '호날두'; // 타입 생략 가능
13
print(name2);
14
}

1.3.1 DateTime

1
void main() {
2
DateTime now = DateTime.now();
3
print(now); // 코드가 실행된 순간의 시간을 출력
4
}

1.3.2 final과 const의 차이

1
void main() {
2
// 📌 final : 한번 할당되면 변경 불가
3
final DateTime now = DateTime.now();
4
print(now); // 코드가 실행된 순간의 시간을 출력
5
6
// 📌 const : 한번 할당되면 변경 불가, 빌드 시점에 값을 알고 있어야 함
7
const DateTime now = DateTime.now(); // 에러
8
}

2. 연산자

2.1 정수 산술 연산자

1
void main() {
2
int number = 2;
3
4
print(number + 2);
5
print(number - 2);
6
print(number * 2);
7
print(number / 2);
8
9
print('--------------------');
10
print(number % 2); // 0
11
print(number % 3); // 2
12
print(number); // 2
13
14
print('--------------------');
15
number ++;
16
print(number); // 3
17
18
number --;
19
print(number); // 2
20
}

2.2 실수 산술 연산자

1
void main() {
2
double number = 4.0;
3
print(number); // 4
4
5
number += 1;
6
print(number); // 5
7
8
number -= 1;
9
print(number); // 4
10
11
number *= 2;
12
print(number); // 8
13
14
number /= 2;
15
print(number); // 4
16
}

2.3 널 조건 연산자

1
void main() {
2
double? number = 4.0;
3
print(number); // 4
4
5
number = 2.0;
6
print(number); // 2
7
8
number = null;
9
print(number); // null
10
11
// number가 null이면, 3.0으로 초기화
12
number ??= 3.0;
13
print(number); // 3
14
}

2.4 동등, 관계 연산자

1
void main() {
2
int number1 = 1;
3
int number2 = 2;
4
5
print(number1 > number2); // false
6
print(number1 < number2); // true
7
print(number1 >= number2); // false
8
print(number1 <= number2); // true
9
print(number1 == number2); // false
10
print(number1 != number2); // true
11
}

2.5 타입 테스트 연산자

1
void main() {
2
int number1 = 1;
3
4
print(number1 is int); // true
5
print(number1 is! int); // false
6
7
print(number1 is String); // false
8
print(number1 is! String); // true
9
}

2.6 논리 연산자

1
void main() {
2
// 📌 && - and 조건
3
bool result = 12 > 10 && 1 > 0;
4
print(result); // true
5
6
bool result2 = 12 > 10 && 0 > 1;
7
print(result2); // false
8
9
// 📌 || - or 조건
10
bool result3 = 12 > 10 || 1 > 0;
11
print(result3); // true
12
13
bool result4 = 12 > 10 || 0 > 1;
14
print(result4); // true
15
16
bool result5 = 12 < 10 || 0 > 1;
17
print(result5); // false
18
}

3. 자료구조

3.1 리스트(List)

1
void main() {
2
// 📌 리스트(List)
3
List<String> team = ['Messi', 'Ronaldo', 'Neymar', 'Mbappe'];
4
List<int> numbers = [1, 2, 3, 4, 5];
5
6
// 📌 순서(index), 0부터 시작
7
print(team[0]); // Messi
8
print(numbers[2]); // 3
9
10
// 📌 길이(length)
11
print(team.length); // 4
12
print(numbers.length); // 5
13
14
// 📌 추가(add)
15
team.add('Suarez');
16
print(team); // [Messi, Ronaldo, Neymar, Mbappe, Suarez]
17
18
// 📌 삭제(remove)
19
team.remove('Ronaldo');
20
print(team); // [Messi, Neymar, Mbappe, Suarez]
21
22
// 📌 값의 인덱스 위치(indexOf)
23
print(team.indexOf('Mbappe')); // 2
24
}

3.2 맵(Map)

1
void main() {
2
// 📌 Map (Key, Value 형태)
3
Map<String, String> team = {
4
'바르셀로나': '메시',
5
'레알마드리드': '호날두',
6
'맨체스터시티': '홀란드',
7
};
8
print(team);
9
10
Map<String, bool> isTeam = {
11
'바르샤': true,
12
'레알': true,
13
'맨시티': false,
14
};
15
print(isTeam);
16
17
// 📌 Map 추가
18
isTeam.addAll({
19
'맨유': false,
20
});
21
print(isTeam);
22
print(isTeam['맨시티']); //
23
24
isTeam['아스날'] = false;
25
print(isTeam);
26
27
isTeam['맨유'] = true;
28
print(isTeam);
29
30
print('---------------------------');
31
// 📌 Map 삭제
32
isTeam.remove('맨시티');
33
print(isTeam);
34
35
print('---------------------------');
36
// 📌 key값만, values값만 가져오기
37
print(isTeam.keys);
38
print(isTeam.values);
39
}

3.3 Set

  • Map : Key, Value 형태의 자료구조, 중복 허용
  • Set : 중복을 허용하지 않는 자료구조
1
void main() {
2
// 📌 Set
3
final Set<String> names = {'메시', '호날두', '네이마르'};
4
print(names);
5
6
// 📌 add : 추가
7
names.add('베일');
8
print(names);
9
10
// 📌 remove : 삭제
11
names.remove('메시');
12
print(names);
13
14
// 📌 contains : 존재여부를 boolean값으로 반환
15
print(names.contains('호날두'));
16
}

4. 제어문

4.1 if문

1
void main() {
2
int number = 3;
3
4
if (number % 3 == 0) {
5
print('나머지가 0입니다.');
6
} else if (number % 3 == 1) {
7
print('나머지가 1입니다.');
8
} else {
9
print('나머지가 2입니다.');
10
}
11
}

4.2 switch문

1
void main() {
2
int number = 3;
3
4
switch (number % 3) {
5
case 0:
6
print('나머지가 0입니다.');
7
break;
8
case 1:
9
print('나머지가 1입니다.');
10
break;
11
default:
12
print('나머지가 2입니다.');
13
break;
14
}
15
}

5. 반복문

5.1 for loop

1
void main() {
2
for(int i = 0; i < 10; i++) {
3
print(i);
4
}
5
}
1
void main() {
2
int total = 0;
3
4
List<int> numbers = [1, 2, 3, 4, 5];
5
6
for (int i = 0; i < numbers.length; i++) {
7
total += numbers[i];
8
}
9
10
print(total);
11
}

5.1.1 for-in loop

1
void main() {
2
int total = 0;
3
4
List<int> numbers = [1, 2, 3, 4, 5];
5
6
for(int number in numbers) {
7
total += number;
8
}
9
10
print(total);
11
}

5.2 while loop

1
void main() {
2
// while문
3
int total = 0;
4
5
while(total < 10) {
6
total += 1;
7
}
8
9
print(total);
10
11
// do-while문
12
do {
13
total += 1;
14
} while (total < 20);
15
16
print(total);
17
}
1
void main() {
2
int total = 0;
3
4
while(total < 10) {
5
total += 1;
6
7
if(total == 5) {
8
break;
9
}
10
}
11
12
print(total);
13
}

5.2.1 continue

1
void main() {
2
for(int i = 0; i < 10; i++) {
3
if(i == 5) {
4
continue;
5
}
6
print(i); // 0 1 2 3 4 6 7 8 9
7
}
8
}

5.2.2 break

1
void main() {
2
for(int i = 0; i < 10; i++) {
3
if(i == 5) {
4
break;
5
}
6
print(i); // 0 1 2 3 4
7
}
8
}

6. enum

1
enum Status {
2
approved, // 승인
3
pending, // 대기
4
rejected, // 거절
5
}
6
7
void main() {
8
Status status = Status.pending;
9
10
if (status == Status.approved) {
11
print('승인');
12
} else if (status == Status.pending) {
13
print('대기');
14
} else {
15
print('거절');
16
}
17
}

7. 함수

7.1 함수 선언

1
void main() {
2
addNumbers(10, 20, 30);
3
addNumbers(10);
4
}
5
6
// 3개의 숫자를 더하고 짝수인지 홀수인지 판별하는 함수
7
// 📌 positional parameter : 순서가 중요한 파라미터
8
// 📌 optional parameter : 있어도 되고, 없어도 되는 파라미터
9
addNumbers(int x, [int y = 20, int z = 50]) {
10
int sum = x + y + z;
11
12
print('x: $x');
13
print('y: $y');
14
print('z: $z');
15
16
if (sum % 2 == 0) {
17
print('짝수');
18
} else {
19
print('홀수');
20
}
21
}

7.1.1 named parameter

1
void main() {
2
addNumbers(y: 10, x: 20);
3
addNumbers(x: 10, y: 20, z: 30);
4
}
5
6
// 3개의 숫자를 더하고 짝수인지 홀수인지 판별하는 함수
7
// 📌 named parameter : 이름이 있는 파라미터(순서가 중요하지 않음)
8
addNumbers({
9
required int x,
10
required int y,
11
int z = 30,
12
}) {
13
int sum = x + y + z;
14
15
print('x: $x');
16
print('y: $y');
17
print('z: $z');
18
19
if (sum % 2 == 0) {
20
print('짝수');
21
} else {
22
print('홀수');
23
}
24
}

7.2 void, return

1
// void : 공허한, 반환값이 없는
2
void main() {
3
int result = addNumbers(y: 10, x: 20);
4
int result2 = addNumbers(x: 10, y: 30, z: 40);
5
6
print('result: $result');
7
print('result2: $result2');
8
9
print('sum: ${result + result2}');
10
}
11
12
int addNumbers({
13
required int x,
14
required int y,
15
int z = 30,
16
}) {
17
int sum = x + y + z;
18
19
print('x: $x');
20
print('y: $y');
21
print('z: $z');
22
23
if (sum % 2 == 0) {
24
print('짝수');
25
} else {
26
print('홀수');
27
}
28
29
return sum;
30
}

7.3 화살표 함수

1
void main() {
2
int result = addNumbers(10, y: 20);
3
int result2 = addNumbers(10, y: 30, z: 40);
4
5
print('result: $result');
6
print('result2: $result2');
7
8
print('sum: ${result + result2}');
9
}
10
11
int addNumbers(int x, {
12
required int y,
13
int z = 30,
14
}) => x + y + z;

8. 타입 선언(TypeDef)

1
void main() {
2
Opertaion operation = add;
3
int result = operation(10, 20, 30);
4
print(result); // 60
5
6
operation = subtract;
7
int result2 = operation(10, 20, 30);
8
print(result2); // -40
9
10
int result3 = calculate(30, 40, 50, add);
11
print(result3); // 120
12
13
int result4 = calculate(40, 50, 60, subtract);
14
print(result4); // -70
15
}
16
17
// signature
18
typedef Opertaion = int Function(int x, int y, int z);
19
20
// 더하기
21
int add(int x, int y, int z) => x + y + z;
22
23
// 빼기
24
int subtract(int x, int y, int z) => x - y - z;
25
26
// 계산
27
int calculate(int x, int y, int z, Opertaion operation) {
28
return operation(x, y, z);
29
}