Study/Development

[개발일지] Dart 입문 1: 언어 기본

titann 2022. 8. 17. 23:01

 

<인프런 코드팩토리 강의 수강일지>

 

1. 변수 선언 / 자료형

void main() {
  var name = 'John'; // variable: 변수
  int num1 = 10; // integer: 정수
  double num2 = 2.5; // 실수
  bool isTrue = true; // Boolean: 맞다, 틀리다
  String lastname = 'Smith'; // 문자
  dynamic myname = 'legend'; // 다양한 자료형 가능, 자료형 종류 변경 가능
  myname = 0; //

  // 출력하기
  print(name + lastname); // JohnSmith
  print(name.runtimeType); // String
  print('${name.runtimeType} ${lastname}'); // String Smith - 변수 + 문자
  print('$name $lastname'); // John Smith 변수 하나만 사용하는 경우 {}생략 가능
  print(myname); // 0

  // 연산하기
  print(num1 + num2); // 12.5
  print(num1 - num2); // 7.5
  print(num1 / num2); // 4
  print(num1 * num2); // 25
}

 

2. nullable / non-nullable

void main() {
  // nullable - null이 될 수 있다.
  // non-nullable - null이 될 수 없다.
  // null 아무 값도 있지 않다.

  String name = 'John Smith';

  print(name); // null 값을 넣을 수 없다.

  String? name2 = 'black pink'; // 어떤 타입이든 ?를 붙이면 null 값도 저장 가능

  print(name2!); // !를 사용할 때, 현재 이 값은 null이 아니다 가능
}
void main() {
  double? num2 = 4.0;

  print(num2); // 4

  num2 = 2.0;
  
  print(num2); // 2

  num2 = null;

  print(num2); // null

  num2 ??= 3.0; // ??= : null일 경우 우측 값으로 바꿔라

  print(num2); // 3
}

 

3. final/const로 선언하기

void main() {
  final name = 'John'; // = final String name과 동일

// name = 'Adam'; --> final로 선언하면, 변수 변경 불가능

  const name2 = 'Smith'; // const String name과 동일

  final DateTime now = DateTime.now(); // build time의 값을 몰라도 된다.
  const DateTime now2 = DateTime.now(); // error: build time의 값을 알아야만 한다
}

 

4. ++, --

void main() {
  int num = 2;

  num++;

  print(num); // 2+1 = 3

  num--;

  print(num); // 3-1 = 2
}

 

5. 비교하기

void main() {
  int num1 = 1;
  int num2 = 2;

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

 

6. 자료형 확인하기

void main() {
  int num1 = 1;

  print(num1 is int); // 정수인가? true
  print(num1 is String); // String인가? false

  print(num1 is! int); // 정수가 아닌가? false
  print(num1 is! String); // String이 아닌가? true
}

 

7. and / or 조건

void main() {
  // && - and 조건
  // || - or 조건

  bool result = 12 > 10 && 1 > 0; // o o

  print(result); // true

  bool result2 = 12 > 10 && 0 > 1; // o x

  print(result2); // false

  bool result3 = 12 > 10 || 1 > 0; // o o

  print(result3); // true

  bool result4 = 12 > 10 || 0 > 1; // o x

  print(result4); // true

  bool result5 = 12 < 10 || 0 > 1; // x x

  print(result5); // false 
}

 

8. 리스트 []

void main() {
  // List 리스트

  List<String> blackPink = ['제니', '로제', '지수', '리사'];
  List<int> numbers = [1, 2, 3, 4, 5, 6];

  print(blackPink);
  print(numbers);

  
  // index: 순서, 0부터 시작

  print(blackPink[0]); // 제니
  print(blackPink[1]); // 로제
  print(blackPink[2]); // 지수
  print(blackPink[3]); // 리사
  print(blackPink[4]); // error
}

 

9. 맵{}

void main() {
  // Map: Key / Value

  Map<String, String> dic = {
    'Harry': '해리',
    'Ron': '론',
    'Hermione': '헤르미온느',
  };

  print(dic); // {Harry: 해리, Ron: 론, Hermione: 헤르미온느}

  Map<String, bool> isHarryPotter = {
    'Harry': true,
    'Ron': true,
    'Ironman': false,
  };

  print(isHarryPotter); // {Harry: 해리, Ron: 론, Hermione: 헤르미온느}

  isHarryPotter.addAll({
    'Spiderman': false,
  }); // {}내의 자료들 전부 추가하기

  print(isHarryPotter); // {Harry: true, Ron: true, Ironman: false, Spiderman: false}

  print(isHarryPotter['Ironman']); // false

  isHarryPotter['Hulk'] = false; // 1개 추가하기

  print(isHarryPotter); // {Harry: true, Ron: true, Ironman: false, Spiderman: false, Hulk: false}

  isHarryPotter['Spiderman'] = true; // value 변경하기

  print(isHarryPotter); // {Harry: true, Ron: true, Ironman: false, Spiderman: true, Hulk: false}
}

 

10. 세트 {}: 리스트와 유사, 중복 값 포함 불가

void main() {
  // Set
  final Set<String> names = {
    'apple',
    'banana',
    'carrot'
  };
  
  print(names); // {apple, banana, carrot}
  
  names.add('dog');
  
  print(names); // {apple, banana, carrot, dog}
  
  names.remove('dog');
  
  print(names); // {apple, banana, carrot}
  
  print(names.contains('carrot')); // 포함 검사: true
    
    
}

 

11. if

void main() {
  // if 문
  
  int num = 3;
  
  if(num % 3 == 0){
    print('나머지가 0입니다');
  } else if(num % 3 == 1){
    print('나머지가 1입니다');
  } else{
    print('나머지가 2입니다');
  }
}

 

12. switch

void main() {
  // switch 문

  int num = 3;

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

 

13. loop: for loop

void main() {
  // for loop

  for (int i = 0; i < 10; i++) {
    print(i); // 0 ~ 9 출력
  }

  // list 사용하기

  int total = 0;

  List<int> numbers = [1, 2, 3, 4, 5, 6];

  for (int i = 0; i < numbers.length; i++) {
    total += numbers[i];
  }

  print(total); // 21

  // for in loop

  total = 0;

  for (int number in numbers) {
    total += number;
  }

  print(total); // 21
}

 

14. loop: while loop

void main() {
  // while loop

  int total = 0;

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

  print(total); // 10

  // do-while: 잘 사용 안함
  total = 0;

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

  print(total); // 10
}
void main() {
  // while loop - break

  int total = 0;

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

  print(total); // 5: total이 5가 됐을 때 break
}

 

15. loop: break & continue

void main() {
  // for loop - break
  int total = 0;
  for (int i = 0; i < 10; i++) {
    total += 1;
    if (total == 5) {
      break; // if 조건 충족했을때 종료
    }
  }
  print(total); // 5 

  // for loop - continue
  for (int i = 0; i < 10; i++) {
    if (i == 5) {
      continue; // if 조건 충족했을 때, 건너뜀
    }
    print(i); // 5 제외하고 출력
  }
}

 

16. enum 선언

 - 제한된 값만 사용할 수 있도록 함

enum Status {
  approved, // 승인
  pending, // 대기
  rejected, // 거절
}

void main() {
  Status status = Status.pending;

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

 

17. 함수

void main() {
  addNumbers(10, 20, 11);
}

// 세개의 숫자 (x,y,z)를 더하고 짝수인지 홀수인지 알려주는 함수
// parameter / argument - 매개변수
addNumbers(x, y, z) {
  int sum = x + y + z;

  print('x:$x');
  print('y:$y');
  print('z:$z');

  if (sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}
void main() {
  addNumbers(10, 20, 11);
  addNumbers2(10, 20);
  addNumbers3(y: 20, z: 30, x: 11);
}

// 세개의 숫자 (x,y,z)를 더하고 짝수인지 홀수인지 알려주는 함수
// parameter / argument - 매개변수
// positional parameter - 순서가 중요한 파라미터
addNumbers(int x, int y, int z) {
  int sum = x + y + z;

  print('x:$x');
  print('y:$y');
  print('z:$z');

  if (sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

// optional parameter - 있어도 되고 없어도 되는 파라미터
// 기본값 지정 가능
addNumbers2(int x, [int y = 0, int z = 0]) {
  int sum = x + y + z;

  print('x:$x');
  print('y:$y');
  print('z:$z');

  if (sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

// named parameter - 이름이 있는 파라미터

addNumbers3({
  required int x,
  required int y,
  required int z,
}) {
  int sum = x + y + z;

  print('x:$x');
  print('y:$y');
  print('z:$z');

  if (sum % 2 == 0) {
    print('짝수입니다.');
  } else {
    print('홀수입니다.');
  }
}

 

18. typedef

 - 함수를 미리 시그니처화 해서 여러가지 함수를 유용하게 사용

void main() {
  Operation operation = add;

  int result = operation(10, 20, 30);

  print(result);

  operation = sub;

  int result2 = operation(10, 20, 30);

  print(result2);

  int result3 = cal(30, 40, 50, add);
  
  print(result3);
  
  int result4 = cal(40, 50, 60, sub);
  
  print(result4);
}

// signature
typedef Operation = int Function(int x, int y, int z);

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

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

// 계산
int cal(int x, int y, int z, Operation operation) {
  return operation(x, y, z);
}
반응형