Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

[풀스택서비스프로그래밍] Lecture 01. Dart 언어의 이해(심화) - part2 본문

3학년 2학기 전공/풀스택서비스프로그래밍

[풀스택서비스프로그래밍] Lecture 01. Dart 언어의 이해(심화) - part2

시데브 2024. 9. 25. 00:18
경희대학교 이성원 교수님의 풀스택 서비스 프로그래밍 수업을 기반으로 정리한 글입니다.

 

비동기 입출력 기능 활용하기

1. 비동기 작업(asynchronous operation, async)

  • 두 개 이상의 작업을 동시에 수행
  • synchronous operation에 반대되는 개념
  • 주로 동작이 느린 외부 저장 장치에 대한 작업을 수행
  • 느린 저장 장치는 Stream 클래스로 비동기 동작을 지원
  • Main 함수에 의해 수행되는 작업 -> foreground 
  • 비동기 함수에 의해 수행되는 작업 -> background

 

2. Future.delayed(시간(초), 작업) method

  • '시간'이 지난 후에 '작업' 수행
  • '작업'을 비동기적으로 처리
  • '작업'이 주어지지 않으면, '시간' 만큼 프로그램 대기

 

3. await 문법

  • 비동기 작업이 종료될때까지 인위적으로 대기
  • await 문법을 사용하는 함수/메소드는 async 구문 사용

 

4. Future<> 리턴 타입

  • awit 문법 or Future.delayed() method를 사용하는 function/method가 return value를 갖는 경우 -> return type은 반드시 Future<>

 

5. 실습

volume-C-chapter-05-A.dart

-> 아무것도 적용 X -> 실행한 순서대로 출력

 

volume-C-chapter-05-B.dart

-> Hello world 명령어를 Future.delayed로 실행하여, 해당 작업을 3초 후에 실행

-> 이러면 처리한 모든 작업이 끝나지 않은 상태에서 프로그램이 종료되기 때문에 좋지 않은 구조

 

volume-C-chapter-05-C.dart

-> await 문법을 사용하기 위해서는, 함수에 async 선언을 해줘야 한다.

 

volume-C-chapter-05-D.dart

-> 인위적으로 프로그램을 3초 재운 것은 맞으나, 함수가 주어지지 않았기 때문에 의도한대로 multi-threading되지는 않음

 

volume-C-chapter-05-E.dart

-> 함수 호출을 해서, 그 함수 내부에서 multi-threading

 

volume-C-chapter-05-F.dart

-> flag를 가지고, 이에 대한 getter와 setter를 가지는 class ActivationFlag

-> false를 가진 객체 bgJobFinished 생성

-> 이전과 비슷한 작업, but await-async 구문 사용 -> 해당 작업이 끝나고, 다음 작업을 진행하는 concurrency

>> 모든 thread가 flag라는 공통 변수를 공유!!

 

volume-C-chapter-05-G.dart

-> background인 serverCustomer()가 동작하는 동안 foreground는 계속 동작 -> background 동작이 끝나면 반환

-> ??? async가 붙으면 함수의 순서에 따라 동작하는데, 그러면 직관적으로 보면 sync인 거 아닌가,, 헷갈림

 

volume-C-chapter-05-H.dart

-> 이전 예제에서, async-await 구문만 추가

 

volume-C-chapter-05-I.dart

-> doBackgroundJob과 serveCustomer 작업이 background에서 각자 multi-threading 진행 

 

예외 상황 처리를 통한 안정성 강화하기

  • try
  • on
  • catch
  • finally
  • throw
  • rethrow
  • Exception (abstract class)

volume-C-chapter-06-B.dart

-> 분모가 0 -> error

 

volume-C-chapter-06-C.dart

-> c의 try catch와 유사

 

volume-C-chapter-06-D.dart

-> error가 발생했을 때, 이를 처리하는 logic을 넣는 것이 일반적

 

volume-C-chapter-06-E.dart

-> on - 특정 error만 catch

 

volume-C-chapter-06-F.dart

-> on + catch - 예측한 것과, 예측하지 못한 것들 모두 

 

volume-C-chapter-06-I.dart

-> rethrow -> error를 직접 처리하지 않고, 다른 곳으로 넘겨주는 행위

-> 본인이 커버하지 못하거나, 커버하고 나서 이를 알리기 위해서 념겨주는 행위

 

volume-C-chapter-06-K.dart

-> custom exception