Study Record

[Dart] Dart 기본 본문

Dart

[Dart] Dart 기본

초코초코초코 2023. 1. 10. 19:00
728x90

프로그램 설치 없이 Dart 코드 실행하는 사이트

https://dartpad.dev/? 

 

DartPad

 

dartpad.dev

 

 

✍  기본 문법

※ Dart 는 세미클론을 붙여야 한다.

 

1. 변수 선언 방법

var number = "변수 선언";
dynamic nameName = "코드 팩토리";
nameName = 2;

// 정수 타입
int number1 = 2;
int number2 = 4;

// 실수 타입
double number3 = 2.5;

// Boolean 타입
bool isTrue = true;
bool isFalse = false;

// 글자 타입
String name = "빠라라람";

print(name3.runtimeType);

 

변수를 선언할 때 'var' 키워드로 선언하면 오른쪽에 위치한 값의 데이터에 따라 데이터 타입이 자동으로 결정된다.

dynamic 키워드는 최초 선언 이후 다른 데이터 타입으로 변경해도 된다. 반면 var 키워드는 최초 선언 시 결정된 데이터 타입을 중간에 변경할 수 없다.

 

+ 문자 작성 시 변수 추가 방법 ($ 키워드)

String name = "사랑";
String name2 = "연애";

// 사랑 연애
print("${name} $name2");

 

2. null vs non-nullable

// non-nullable - null 이 불가능하다.
String name = "코드팩토리";

// nullable - null 이 가능하다.
String? name2;

print(name2);
print(name);

 

 

3. 여러가지 키워드

! 변수 뒤에 붙어 사용되며 절대 null 이 아니라는 의미를 가진다.

키워드 설명
변수 뒤에 붙어 사용되며 절대 null 이 아니라는 의미를 가진다.
final 변수 선언 시 앞에 붙어 사용되며 이후 값을 변경할 수 없다. (var 사용 불가능)

* 빌드 타임 시 값을 모르고 있어도 된다.
const 변수 선언 시 앞에 붙어 사용되며 이후 값을 변경할 수 없다. (var 사용 불가능)

* 빌드 타임 시 값을 알고 있어야 한다.

* 빌드 과정 : 작성된 코드가 컴퓨터로 이해할 수 있는 언어로 바뀌는 과정

 

<예시>

String name = "이름";

print(name!);

// final, const 키워드 모두 테이터 타입을 생량할 수 있다.
final String finalName = "final 변수 선언";
// final finalName = "final 변수 선언";

const String constName = "const 변수 선언";
// const constName = "const 변수 선언";

/* DateTime.now() 는 빌드하기 전 실행되지 않고 순차적으로 코드를 실행하는 도중 실행된다.
 * 따라서 빌드 타임 전 값을 미리 알아야 하는 const 키워드를 사용할 수 없다.
 */
final DateTime now = DateTime.now();
// const DateTime now2 = DateTime.now();

 

4. operator (+, -, *,  /, %, ??=, <, >, <=, >=, &&, ||, is, is!)

int number2 = 3;
double? doubleNumber = 5.0;

// number2 = number2 + 1;
number2 ++;
number2 += 1;

// number2 = number2 - 1;
number2 --;
number2 -= 1;

number2 *= 2;

// 나누기(/) 연산과 나머지(%) 연산의 경우 int 형식으로 하면 에러가 난다.
doubleNumber /= 2;
doubleNumber %= 2;

// ??= 연산은 변수 값이 null일 경우 오른쪽 값으로 변경한다.
doubleNumber = null;
doubleNumber ??= 3.0;
print(doubleNumber);            // 3.0

/* 비교 연산자 */
int num1 = 2;
int num2 = 2;

print(num1 < num2);		// false
print(num1 > num2);		// false
print(num1 <= num2);	// true
print(num1 >= num2);	// true
print(num1 == num2);	// true
print(num1 != num2);	// false

/* 타입 비교 */
print(num1 is int);		// true
print(num1 is String);	// false
print(num1 is! int);	// false

/* 논리 연산자 */
// && : 둘 다 맞으면 true
bool result = 12 > 10 && 13 < 2;	// false

// || : 둘 중 하나만 맞으면 true
bool result2 = 12 > 10 || 13 < 2;	// true

 

5. List, Map, Set

 

5-1. List

// List 선언
List<String> phone = ["아이폰", "갤럭시"];
List<int> numbers = [1,2,3,4,5];

// index
print(phone[0]);
print(numbers[2]);

// List 길이
print(phone.length);     // 2

// List 추가
numbers.add(6);

// List 요소 제거
numbers.remove(3);
print(numbers);			// [1,2,4,5,6]

// List index 찾기
print(phone.indexOf("갤럭시"));	// 1

// List 요소들 참조하기
phone.forEach((p){
    print(p);
});

 

5-2. map

// Map(key, value) 선언
Map<String, String> dictionary = {
    "Harry Potter" : "해리포터",
    "Hermione Granger" : "헤르미온느 그레인저"
};
print(dictionary);

Map<int, bool> d1 = {1: true, 2: false};
print(d1);

// map 추가
dictionary.addAll({"Sipderman": "스파이더맨"});
print(dictionary);

// key 값 보기
Iterable<dynamic> keys = d1.keys

// values 값 보기
Iterable<dynamic> values = d1.values

// map key 값으로 value 찾기
print(dictionary["Harry Potter"]);		// 해리포터

// map 값 변경
d1[1] = false

// map 삭제 - key 값이 "Harry Potter" 인 값이 지워진다.
dictionary.remove("Harry Potter");

// map 보기
print(d1.keys);
print(d1.values);

// list to map to list
final test = [123, 456, 789];

// list to map
final testMap = test.asMap();
// {0: 123, 1: 456, 2: 789}
print(test.asMap());

// map to list
final testMapList = testMap.entries.toList();
// [MapEntry(0: 123), MapEntry(1: 456), MapEntry(2: 789)]
print(testMapList);

print(testMapList[1].key);	// 1
print(testMapList[1].value);	// 456

 

5-3. Set

※ 중복을 허용하지 않는다.

// Set 선언
Set<String> names = {
    "aaa",
    "bbb",
    "Flutter"
};

print(names);

// Set 추가
names.add("ccc");

// Set 값 찾기
print(names.contains("Flutter"));		// true

 

6. 조건문(it, switch)

int number = 3;

if(number > 3) {
	print("값이 3 보다 큽니다.");
} else if(number < 3) {
	pinrt("값이 3 보다 작습니다.");
} else {
	print("값이 3 입니다.");
}

switch(number % 3) {
	case 0:
    	print("나머지가 0입니다.");
        break;
        
    case 1: {
    	print("나머지가 1입니다.");
        break;
    }
        
    default:
    	print("나머지가 2입니다.");
        break;
}

 

7. 반복문

// 기본 for loop
for(int i=0; i<10; i++) {
    print(i);
}

// List 요소 쉽게 접근하기
List<int> numbers = [1,2,3,4,5]
for(int number in numbers) {
    print(number);
}

// 기본 while loop
int total = 0;

while(total < 10) {
    total += 1;
    
    if(total == 3) continue;
    if(total == 5) break;
    
    print(total);
}

// do while
do {
    total += 1;
} while(total < 10);

continue 는 현재 loop를 종료하고 다음 loop를 실행하라는 키워드이다. break는 loop를 빠져나오라는 키워드이다.

 

8. enum

enum Status {
    approved,
    pending,
    regected
}

void main() {
    Status status = Status.approved;
    
    if(status == Status.approved) print("승인입니다.");
    else if(status == Status.pending) print("대기입니다.");
    else print("거절입니다.");
}

 

9. 함수 선언

void main() {
    addNumbers(10);
    addNumbers(10, 25);
    addNumbers(10, 25, 30);
    
    nameAddNumbers(10, Y: 20, z: 40);
    nameAddNumbers(10, Y: 20);
	
    print("sum 은 ${addNumbersResult(20, 40, 70)}");
}

/*
 * 세개의 숫자 (x,y,z)를 더하고 짝수인지 홀수인지 알려주는 함수
 * position parameter : 순서가 중요한 파라미터 (int x)
 * optional parameter : 있어도 되고 없어도 되는 파라미터로 대괄호([])안에 표기한다. 
 * ([int y = 20, int z = 20])
 */
addNumbers(int x, [int y = 20, int z = 20]) {
    print("x : $x , y : $y , z : $z ");
    
    if((x + y + z) % 2 == 0) print("짝수입니다.");
    else print("홀수입니다.");
}

/*
 * 세개의 숫자 (x,y,z)를 더하고 짝수인지 홀수인지 알려주는 함수
 * position parameter : 순서가 중요한 파라미터 (int x)
 * named parameter : 이름이 있는 파라미터(순서가 아닌 이름으로 호출해야 한다. 
 * {required int y, int z = 30})
 */
 nameAddNumbers(int x, {
    required int y,
    int z = 30
 }) {
 	addNumbers(x, y, z);
 }
 
 /*
  * 반환값이 있는 세개의 숫자 (x,y,z)를 더한 값을 리턴하는 함수
  * return : 반환 키워드
  */
 int addNumbersResult(int x, int y, int z) {
 	return x + y + z;
 }
 
 /*
  * 반환값이 있는 세개의 숫자 (x,y,z)를 더한 값을 리턴하는 함수
  * arrow function : 반환값을 (=>)로 바로 지정할 수 있다.
  */
  int addNumberResultArrow(int x, int y, int z) => x+y+z

- argument(인자) : 실제로 함수가 호출될 때 넘기는 변숫값

- parameter(매개변수) : 함수를 정의할 때 사용되는 변수

 

+ typedef : 자료형을 새롭게 이름 붙일 때 사용되는 키워드이다.

void main() {
    Operation operation = add;
    print(operation(10, 20, 30));
    
    operation = substract;
    print(operation(50, 30, 10));
    
    print(calculate(10, 10, 10, add));
}

// typedef 를 사용하려면 리턴값, 파라미터가 모두 동일해야 한다.
typedef Operation = int Function(int x, int y, int z);

// 더하기
int add(int x, int y, int z) => x + y + z;

// 빼기
int substract(int x, int y, int z) => x - y - z;

// 계산
int calculate(int x, int y, int z, Operation op) {
	return op(x, y, z);
}

 

728x90

'Dart' 카테고리의 다른 글

[Dart] ..  (0) 2023.03.09
[Dart] 난수 생성하기  (0) 2023.02.05
[Dart] 비동기 프로그래밍  (0) 2023.01.16
[Dart] 함수형 프로그래밍  (0) 2023.01.15
[Dart] 객체 지향 프로그래밍  (1) 2023.01.12