본문 바로가기

Programming/Dart & Flutter

Flutter 4일 차 - Flutter for iOS devs (4/8), Threading & asynchronicity

반응형

Threading & asynchronicity

https://flutter.dev/docs/get-started/flutter-for/ios-devs#threading--asynchronicity

How do I write asynchronous code?

Dart 는 Isolates, an event loop, 비동기 프로그램을 지원하는 싱글 스레드 모델이 있다.

Isloate 를 생성하지 않는 한 dart code 는 메인 스레드에서 실행되고 event loop 에 의해 구동된다.

Flutter 의 event loop 은 iOS main loop 와 동일하다.

 

Dart 의 싱글 스레드 모델은 모든 것을 UI 멈춤을 초래하는 블러킹 연산으로 실행하는 것이 아니다.

그 대신 비동기 작업을 실행하는 async/await 와 같은 Dart 가 제공하는 비동기 기능을 사용한다.

How do you move work to a background thread?

https://flutter.dev/docs/get-started/flutter-for/ios-devs#how-do-you-move-work-to-a-background-thread

 

Flutter 는 다일 스레드이고 event loop 를 실행하기 때문에 스레드 관리나 spawning background thread 를 걱정할 필요 없다.

디스크 접근, 네트워크 작업 등의 I/O 작업을 하고 있다면 안전하게 async/await 를 사용하고 끝낼 수 있다.

CPU 를 많이 점유하는 계산이 많은 작업이 필요할 때 event loop blocking 을 피하기 위해서 Isolate 로 옮길 수 있다.

 

I/O 작업을 위해서는 함수에 async 함수라고 정의해라 그리고 함수 안에 오래 걸리는 작업에 await 해라

 

많은 데이터를 처리하는 경우 async, await 를 써도 UI 를 멈추는 경우들이 있다.

Flutter 에서는 오랜 시간 작업이나 많은 처리량을 Isolate 를 사용하여 위해 멀티 코어 장점을 취할 수 있다.

 

Isolate 들은 실행 스레드가 분리되어 있다. main 실행과 heap 메모리를 포함한 어떤 메모리도 공유하지 않는다.

메인 스레드의 변수들에 접근할 수 없고 setState() 를 호출하여 UI 를 업데이트할 수 없다. 

Isolate 는 이름처럼 메모리를 공유하지 않는다.

How do I make network requests?

https://flutter.dev/docs/get-started/flutter-for/ios-devs#how-do-i-make-network-requests

 

인기 많은 http package 를 사용한다면 Flutter 에서 네트워크 콜을 만드는 것은 쉽다.

일반적으로 개발하는 네트워킹의 많은 부분을 네트워크 콜을 쉽게 만들 수 있도록 추상화한 것이다.

How do I show the progress of a long-running task?

https://flutter.dev/docs/get-started/flutter-for/ios-devs#how-do-i-show-the-progress-of-a-long-running-task

 

일반적으로 iOS 에서는 오래 걸리는 백그라운드 작업을 실행할 때 UIProgressView 를 사용한다.

 

플루터에서는 ProgressIndicator 위젯을 사용한다.

boolean 값으로 렌더링 되는 시점을 제어하는 방식으로 progress 를 보여줄 수 있다.

 큰 작업이 시작하기 전에 상태를 업데이트하도록 지시하고 끝난 후에는 숨기도록 지시하라.

 

리스트를 만드는 추천, 효과, 효율적인 방법은 ListView.Builder 를 사용하는 것이다.

이것은 많은 양의 리스트, 동적 리스트를 만들때 좋다.

 

ListView 를 만드는 대신에 목록 초기 길이, ItemBuilder 함수로 ListView.builder 를 만들어라.

 

ItemBuilder 함수는 위치를 받고 위치에 맞는 cell 을 리턴하는 iOS table/collection view 의 cellForItemAt delegate 메서드와 유사하다.

What is the equivalent of a ScrollView in Flutter?

https://flutter.dev/docs/get-started/flutter-for/ios-devs#what-is-the-equivalent-of-a-scrollview-in-flutter

 

iOS 에서는 ScrollView 안에 view 들을 넣음으로써 스크롤 가능하게 한다.

Flutter 에서는 ListView 위젯을 사용하는 것이 가장 쉬운 방법이다.

수직으로 위젯을 배치할 수 있어서 iOS TableView, ScrollView 둘의 역할을 한다. 

반응형