본문 바로가기
TIL

[TIL] Dart 문법 이해하기

by chengzior 2024. 10. 21.

 

내일배움캠프 Flutter 트랙

[1주차] Dart 문법 이해하기

 

변수 생성

String stringValue = "문자열";
int intValue = 2;
bool booleanValue = false;

 

배열 선언

List<int> cards = [];

배열을 선언할때는 어떤 유형의 배열인지를 제네릭(Generic)으로 선언.

제네릭(Generic) :  <> 괄호 중간에 선언하는 타입

 

반복문

void main() {
  var sum =0;
  for(var i =0; i<1000; i++){
    sum+=i;
  }
  print(sum); // 499500
}

 

함수 생성

int add(int a, int b) {
  int sum = a + b;
  return sum;
}

void main() {
  int result = add(3, 5);
  print('결과: $result');  // 출력: 결과: 8
}

 

포지셔널 파라미터 vs 네임드 파라미터

1) 포지셔널 파라미터

int substract(int a, int b) {
  int sum = a - b;
  return sum;
}

void main() {
  int result = substract(3, 5);
  int result2 = substract(5, 3);
  print('결과: $result');  // 출력: 결과: -2
  print('결과: $result2');  // 출력: 결과: 2
}

2) 네임드 파라미터 

int add({required int frontValue,required int endValue}) {
  int sum = frontValue + endValue;
  return sum;
}

void main() {
  int result = add(frontValue : 3, endValue : 5);
  print('결과: $result');  // 출력: 결과: 8
}

이름과 타입을 지정해서 전달하므로 파라미터의 순서는 상관이 없음.

2-1) 옵셔널 파라미터

int add({required int frontValue,required int endValue, int? expansionValue}) {
  int sum = frontValue + endValue + (expansionValue??0);
  return sum;
}

void main() {
  int result = add(frontValue : 3, endValue : 5);
  int result2 = add(frontValue : 3, endValue : 5, expansionValue : 3);
  print('결과: $result');  // 출력: 결과: 8
  print('결과: $result2');  // 출력: 결과: 11
}

 

조건문

1) if-else

void main() {
  int number = 3;

  if (number > 5) {
    print('number는 5보다 큽니다.');
  } else {
    print('number는 5보다 크지 않습니다.');
  }
}

 

2) switch

void main() {
  int number = 2;

  switch (number) {
    case 1:
      print('number는 1입니다.');
      break;
    case 2:
      print('number는 2입니다.');
      break;
    case 3:
      print('number는 3입니다.');
      break;
    default:
      print('number는 1, 2, 3 중 하나가 아닙니다.');
  }
}

switch문을 사용하는 경우
-조건이 특정 값(상수)과 비교될 때
-코드의 가독성을 높이고 싶을 때
-enum 타입과 같은 열거형을 비교할 때

 

동기/비동기

1) 동기 방식 : 동기 방식에서는 작업이 순차적으로 처리되는 것을 의미. 하나의 작업이 끝나야 다음 작업이 진행.

void main() {
  print('작업 1 시작');
  performTask();
  print('작업 1 완료');
}

void performTask() {
  print('작업 2 실행');
}

출력
작업 1 시작
작업 2 실행
작업 1 완료

 

2) 비동기 방식: 작업이 병렬적으로 처리될 수 있음. 작업이 완료될 때까지 기다리지 않고 다음 작업을 바로 시작.

주로 네트워크 요청, 파일 읽기/쓰기 등 시간이 걸리는 작업에 사용.

void main() {
  print('작업 1 시작');
  performTask();
  print('작업 1 완료');
}

Future<void> performTask() async {
  await Future.delayed(Duration(seconds: 2));
  print('작업 2 실행');
}

출력
작업 1 시작
작업 1 완료
(2초뒤에)
작업 2 실행

 

동기 방식의 단점

  1. 블로킹
    시간이 오래 걸리는 작업이 있을 경우 전체 프로그램의 응답성이 저하
    하나의 작업이 완료될 때까지 다른 작업이 블로킹
  2. 비효율성
    네트워크 요청 동안 CPU는 유휴 상태
    자원이 비효율적으로 사용될 수 있음

 

비동기 방식의 단점

  1. 복잡성
    코드가 복잡해질 수 있음
    비동기 함수의 오류 처리 등이 복잡
  2. 디버깅 어려움
     비동기 코드의 흐름을 추적하고 디버깅하는 것이 더 어려움
    이벤트 루프와 비동기 호출 스택을 이해해야 함

'TIL' 카테고리의 다른 글

[TIL] Dart 문법 기초  (0) 2024.10.28
[TIL] 5주차 메모 앱 개발  (1) 2024.10.25
[TIL] firebase 연동  (1) 2024.10.24
[TIL] 상태관리  (0) 2024.10.23
[TIL] 앱 개발 종합반 - 2주차 위젯  (0) 2024.10.22