| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
- LG
 - LG Aimers 4th
 - GPT-4
 - OpenAI
 - gpt
 - LG Aimers
 - 머신러닝
 - regression
 - ChatGPT
 - 지도학습
 - deep learning
 - LLM
 - 오블완
 - Machine Learning
 - 딥러닝
 - Classification
 - 해커톤
 - 회귀
 - AI
 - 티스토리챌린지
 - PCA
 - supervised learning
 - 분류
 
- Today
 
- Total
 
SYDev
[풀스택서비스프로그래밍] Lecture 01. Dart 언어의 이해(심화) - part2 본문
경희대학교 이성원 교수님의 풀스택 서비스 프로그래밍 수업을 기반으로 정리한 글입니다.
비동기 입출력 기능 활용하기
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
'3학년 2학기 전공 > 풀스택서비스프로그래밍' 카테고리의 다른 글
| MongoDB 기본 개념 (0) | 2024.11.21 | 
|---|---|
| [풀스택서비스프로그래밍] Lecture 02. RESTful API Client & Server 개발 (2) | 2024.10.01 | 
| [풀스택서비스프로그래밍] parallelism vs concurrency (0) | 2024.09.23 | 
| [풀스택서비스프로그래밍] Lecture 01. Dart 언어의 이해(심화) - part1 (1) | 2024.09.16 | 
| [풀스택서비스프로그래밍] Lecture 01. Dart 언어의 이해(기초) (2) | 2024.09.16 |