1. 변수
- 참고 : https://dart-ko.dev/language
- 온라인 도구 : https://dartpad.dev/
변수 선언하는 법
1void main() {2var name = '메시';3print(name);4}
1.1 변수 타입
1.1.1 정수(integer)
1void main() {2int number1 = 2;3int number2 = 4;45print(number1 + number2);6print(number1 - number2);7print(number1 * number2);8print(number1 / number2);9}
1.1.2 실수(double)
1void main() {2// 실수(double)3double number1 = 2.5;4double number2 = 0.5;56print(number1 + number2);7print(number1 - number2);8print(number1 * number2);9print(number1 / number2);10}
1.1.3 불린(boolean)
1void main() {2// 참과 거짓(boolean)3bool isTrue = true;4bool isFalse = false;56print(isTrue);7print(isFalse);8}
1.1.4 문자(String)
1void main() {2// 글자(string)3String name = "메시";4String name2 = "호날두";56print(name + name2);7print(name + ' ' + name2);8print('${name.runtimeType}와 ${name2}');9print('$name와 $name2');10}
1.1.5 다이나믹(dynamic)
1/*2📌 dynamic 타입 : 중간에 타입 변경 가능3📌 var 타입 : 중간에 타입 변경 불가능4*/5void main() {6dynamic name = "메시";7print(name);89dynamic age = 20;10print(age);1112var name2 = "호날두";13print(name2);1415print(name.runtimeType); // String16print(name2.runtimeType); // String1718name = 30;19name2 = 30; // 에러20}
1.2 nullable과 non-nullable
1/*2📌 nullable : null 허용3📌 non-nullable : null 불허용4📌 null : 값이 없음5*/6void main() {7String name = '메시';8print(name);910String? name2 = "호날두"; // null을 허용11print(name2!); // null이 아님을 확신할 때 사용12}
1.3 final과 const
1/*2📌 final : 한번 할당되면 변경 불가3📌 const : 한번 할당되면 변경 불가, 빌드 시점에 값을 알고 있어야 함4@see https://dart-ko.dev/language/variables#final-const5*/6void main() {7// final String name = '메시';8final name = '메시'; // 타입 생략 가능9print(name);1011// const String name2 = '호날두';12const name2 = '호날두'; // 타입 생략 가능13print(name2);14}
1.3.1 DateTime
1void main() {2DateTime now = DateTime.now();3print(now); // 코드가 실행된 순간의 시간을 출력4}
1.3.2 final과 const의 차이
1void main() {2// 📌 final : 한번 할당되면 변경 불가3final DateTime now = DateTime.now();4print(now); // 코드가 실행된 순간의 시간을 출력56// 📌 const : 한번 할당되면 변경 불가, 빌드 시점에 값을 알고 있어야 함7const DateTime now = DateTime.now(); // 에러8}
2. 연산자
2.1 정수 산술 연산자
1void main() {2int number = 2;34print(number + 2);5print(number - 2);6print(number * 2);7print(number / 2);89print('--------------------');10print(number % 2); // 011print(number % 3); // 212print(number); // 21314print('--------------------');15number ++;16print(number); // 31718number --;19print(number); // 220}
2.2 실수 산술 연산자
1void main() {2double number = 4.0;3print(number); // 445number += 1;6print(number); // 578number -= 1;9print(number); // 41011number *= 2;12print(number); // 81314number /= 2;15print(number); // 416}
2.3 널 조건 연산자
1void main() {2double? number = 4.0;3print(number); // 445number = 2.0;6print(number); // 278number = null;9print(number); // null1011// number가 null이면, 3.0으로 초기화12number ??= 3.0;13print(number); // 314}
2.4 동등, 관계 연산자
1void main() {2int number1 = 1;3int number2 = 2;45print(number1 > number2); // false6print(number1 < number2); // true7print(number1 >= number2); // false8print(number1 <= number2); // true9print(number1 == number2); // false10print(number1 != number2); // true11}
2.5 타입 테스트 연산자
1void main() {2int number1 = 1;34print(number1 is int); // true5print(number1 is! int); // false67print(number1 is String); // false8print(number1 is! String); // true9}
2.6 논리 연산자
1void main() {2// 📌 && - and 조건3bool result = 12 > 10 && 1 > 0;4print(result); // true56bool result2 = 12 > 10 && 0 > 1;7print(result2); // false89// 📌 || - or 조건10bool result3 = 12 > 10 || 1 > 0;11print(result3); // true1213bool result4 = 12 > 10 || 0 > 1;14print(result4); // true1516bool result5 = 12 < 10 || 0 > 1;17print(result5); // false18}
3. 자료구조
3.1 리스트(List)
1void main() {2// 📌 리스트(List)3List<String> team = ['Messi', 'Ronaldo', 'Neymar', 'Mbappe'];4List<int> numbers = [1, 2, 3, 4, 5];56// 📌 순서(index), 0부터 시작7print(team[0]); // Messi8print(numbers[2]); // 3910// 📌 길이(length)11print(team.length); // 412print(numbers.length); // 51314// 📌 추가(add)15team.add('Suarez');16print(team); // [Messi, Ronaldo, Neymar, Mbappe, Suarez]1718// 📌 삭제(remove)19team.remove('Ronaldo');20print(team); // [Messi, Neymar, Mbappe, Suarez]2122// 📌 값의 인덱스 위치(indexOf)23print(team.indexOf('Mbappe')); // 224}
3.2 맵(Map)
1void main() {2// 📌 Map (Key, Value 형태)3Map<String, String> team = {4'바르셀로나': '메시',5'레알마드리드': '호날두',6'맨체스터시티': '홀란드',7};8print(team);910Map<String, bool> isTeam = {11'바르샤': true,12'레알': true,13'맨시티': false,14};15print(isTeam);1617// 📌 Map 추가18isTeam.addAll({19'맨유': false,20});21print(isTeam);22print(isTeam['맨시티']); //2324isTeam['아스날'] = false;25print(isTeam);2627isTeam['맨유'] = true;28print(isTeam);2930print('---------------------------');31// 📌 Map 삭제32isTeam.remove('맨시티');33print(isTeam);3435print('---------------------------');36// 📌 key값만, values값만 가져오기37print(isTeam.keys);38print(isTeam.values);39}
3.3 Set
Map: Key, Value 형태의 자료구조, 중복 허용Set: 중복을 허용하지 않는 자료구조
1void main() {2// 📌 Set3final Set<String> names = {'메시', '호날두', '네이마르'};4print(names);56// 📌 add : 추가7names.add('베일');8print(names);910// 📌 remove : 삭제11names.remove('메시');12print(names);1314// 📌 contains : 존재여부를 boolean값으로 반환15print(names.contains('호날두'));16}
4. 제어문
4.1 if문
1void main() {2int number = 3;34if (number % 3 == 0) {5print('나머지가 0입니다.');6} else if (number % 3 == 1) {7print('나머지가 1입니다.');8} else {9print('나머지가 2입니다.');10}11}
4.2 switch문
1void main() {2int number = 3;34switch (number % 3) {5case 0:6print('나머지가 0입니다.');7break;8case 1:9print('나머지가 1입니다.');10break;11default:12print('나머지가 2입니다.');13break;14}15}
5. 반복문
5.1 for loop
1void main() {2for(int i = 0; i < 10; i++) {3print(i);4}5}
1void main() {2int total = 0;34List<int> numbers = [1, 2, 3, 4, 5];56for (int i = 0; i < numbers.length; i++) {7total += numbers[i];8}910print(total);11}
5.1.1 for-in loop
1void main() {2int total = 0;34List<int> numbers = [1, 2, 3, 4, 5];56for(int number in numbers) {7total += number;8}910print(total);11}
5.2 while loop
1void main() {2// while문3int total = 0;45while(total < 10) {6total += 1;7}89print(total);1011// do-while문12do {13total += 1;14} while (total < 20);1516print(total);17}
1void main() {2int total = 0;34while(total < 10) {5total += 1;67if(total == 5) {8break;9}10}1112print(total);13}
5.2.1 continue
1void main() {2for(int i = 0; i < 10; i++) {3if(i == 5) {4continue;5}6print(i); // 0 1 2 3 4 6 7 8 97}8}
5.2.2 break
1void main() {2for(int i = 0; i < 10; i++) {3if(i == 5) {4break;5}6print(i); // 0 1 2 3 47}8}
6. enum
1enum Status {2approved, // 승인3pending, // 대기4rejected, // 거절5}67void main() {8Status status = Status.pending;910if (status == Status.approved) {11print('승인');12} else if (status == Status.pending) {13print('대기');14} else {15print('거절');16}17}
7. 함수
7.1 함수 선언
1void main() {2addNumbers(10, 20, 30);3addNumbers(10);4}56// 3개의 숫자를 더하고 짝수인지 홀수인지 판별하는 함수7// 📌 positional parameter : 순서가 중요한 파라미터8// 📌 optional parameter : 있어도 되고, 없어도 되는 파라미터9addNumbers(int x, [int y = 20, int z = 50]) {10int sum = x + y + z;1112print('x: $x');13print('y: $y');14print('z: $z');1516if (sum % 2 == 0) {17print('짝수');18} else {19print('홀수');20}21}
7.1.1 named parameter
1void main() {2addNumbers(y: 10, x: 20);3addNumbers(x: 10, y: 20, z: 30);4}56// 3개의 숫자를 더하고 짝수인지 홀수인지 판별하는 함수7// 📌 named parameter : 이름이 있는 파라미터(순서가 중요하지 않음)8addNumbers({9required int x,10required int y,11int z = 30,12}) {13int sum = x + y + z;1415print('x: $x');16print('y: $y');17print('z: $z');1819if (sum % 2 == 0) {20print('짝수');21} else {22print('홀수');23}24}
7.2 void, return
1// void : 공허한, 반환값이 없는2void main() {3int result = addNumbers(y: 10, x: 20);4int result2 = addNumbers(x: 10, y: 30, z: 40);56print('result: $result');7print('result2: $result2');89print('sum: ${result + result2}');10}1112int addNumbers({13required int x,14required int y,15int z = 30,16}) {17int sum = x + y + z;1819print('x: $x');20print('y: $y');21print('z: $z');2223if (sum % 2 == 0) {24print('짝수');25} else {26print('홀수');27}2829return sum;30}
7.3 화살표 함수
1void main() {2int result = addNumbers(10, y: 20);3int result2 = addNumbers(10, y: 30, z: 40);45print('result: $result');6print('result2: $result2');78print('sum: ${result + result2}');9}1011int addNumbers(int x, {12required int y,13int z = 30,14}) => x + y + z;
8. 타입 선언(TypeDef)
1void main() {2Opertaion operation = add;3int result = operation(10, 20, 30);4print(result); // 6056operation = subtract;7int result2 = operation(10, 20, 30);8print(result2); // -40910int result3 = calculate(30, 40, 50, add);11print(result3); // 1201213int result4 = calculate(40, 50, 60, subtract);14print(result4); // -7015}1617// signature18typedef Opertaion = int Function(int x, int y, int z);1920// 더하기21int add(int x, int y, int z) => x + y + z;2223// 빼기24int subtract(int x, int y, int z) => x - y - z;2526// 계산27int calculate(int x, int y, int z, Opertaion operation) {28return operation(x, y, z);29}