Programming(199)
-
[Flutter] 여러개의 비동기 처리에 대한 경쟁 상태의 처리
여러개의 비동기 처리에 대한 경쟁 상태의 처리 Dart에서는 Future 클래스를 사용해서 비동기에 대한 처리를 할 수 있습니다. async/await에 대한 내용은 비동기(Asynchronous)와 async/await, 그리고 여러개의 await에 대한 비동기 처리에서 한 차례 언급했으므로, 이번에는 가볍게 패스할께요. 이번에 살펴볼 내용은 여러개의 비동기 처리가 경쟁 상태(Race condition)로 주어졌을 때, 어떻게 처리하는지에 대한 얘기를 해보려고 합니다. 엥? 비동기에 경쟁 상태? 그거 Future.any() 호출하면 끝 아니냐? Dart의 dart:async 패키지에서 제공하는 Future패키지에는 Future.any라는 메소드를 제공합니다. Future.any(Iterable futu..
2021.07.27 -
[Flutter] 도로명 주소 검색하기 / Daum Postcode Search Package 배포기
Flutter로 도로명 주소 검색하기 때는 바야흐로 2021년 초여름, Flutter를 사용하고 있던 프로젝트에 위치를 지정해줘야하는 요구사항이 생겼습니다. 지도를 이용해서 위도와 경도를 저장하는 방법과, 주소를 이용해서 저장하는 방법 중 어떤 방법을 사용할지에 대해 고민한 결과... 시간도 얼마 안남았으니 일단 간단해보이는 녀석을 먼저 하자는, 나름대로 합리적인 듯 보이지만 실제로는 별 생각없는 방법으로 결정을 내리고 방법을 찾기 시작합니다. 카카오에서 제공하는 API를 사용하자 놀랍게도 카카오에서 제공하는 다음 우편번호 서비스를 사용하면, Key를 발급받을 필요도 사용량에 제한이 걸리는 일도 없이 도로명 주소를 검색하는 게 가능합니다. 와! 편리해! 이 정도면 누군가 라이브러리로 만들어놓지 않았을까,..
2021.07.26 -
[Flutter] Dart에서 Generic을 사용할 때, 런타임에서 타입을 확인해보자.
Dart에서 Generic을 사용할 때, 런타임에서 타입을 확인해보자. 종종 제네릭을 사용할 때 타입을 확인해야 할 때가 있다. 보통 나는 SharedPreferences나 JSONObject의 get함수 시리즈를 묶어버릴 때 사용하고는 한다. Kotlin에서는 Kotlin에서 JSONObject .get*의 확장 함수를 만들어봤다.와 같은 방식으로, reified를 사용해서 타입에 따른 분기를 처리했다. 아무래도 getString, getInt, gettBoolean등의 함수로 작성하면, 코드를 작성하다가 타입을 변경하기 영 귀찮았기 때문이다. 제네릭을 사용해서 함수를 이렇게 래핑하면 타입추론에 의지할수도 있어서, 아무래도 편리하다. 항상 타입추론을 맹신할 수는 없겠지만, 아무튼. Dart의 Type ..
2021.05.28 -
특정 버전의 FFmpeg를 Android용으로 크로스컴파일하는 방법 정리
zerodice0/ffmpeg-android-build 브랜치를 참고해주세요. Android NDK을 사용해서 특정 버전의 ffmpeg을 빌드하는 방법에 대해 알아봅시다. 최신 버전의 ffmpeg라면 ffmpeg-android-build의 build_android.sh/build_android_64.sh만 실행시키면 간단히 빌드되므로 굳이 이 글을 참조할 필요는 없습니다. 이렇게 별도의 브랜치를 작성하는 이유는, 최근 ffmpeg를 안드로이드 용으로 크로스 컴파일하는 방법을 검색하면 독립실행형 툴체인(Stand-alone toolchain)을 사용하는 방법만 나오기 때문입니다. 독립 실행형 툴체인은 이미 진즉에 Depreacted 됐죠. 그래서 예전 버전의 NDK를 사용하지 않으면 그 방법들로는 빌드할 ..
2021.03.31 -
[Flutter] Provider로 비동기 통신을 하여 FutureBuilder를 대체하기
저번에 작성한 FutureBuilder에 대한 연장선에 있는 글이다. 비동기 처리에 익숙하다면 당연한 내용이기도 하다. 이번에는 FutureBuilder를 사용하여 비동기 처리를 했던 코드를, Provider로 분리하여 작성하는 방법에 대해 살펴보자. Provider를 사용하여 FutureBuilder를 대체하는 이유가 있을까? FutureBuilder를 사용해서 Widget의 초기 상태값을 결정할 때는 다음과 같은 문제점이 있다. FutureBuilder의 builder에서는 항상 비동기 처리에 대한 결과값으로, Widget을 반환해야 한다. 즉, 비동기 처리가 진행되는 동안 프로그레스 바를 띄운 뒤 다른 Widget으로 이동하려고 한다면, 렌더링과 관련해서 문제가 생긴다. 비동기 처리에 대한 로직이 ..
2021.03.25 -
[Flutter] FutureBuilder를 사용해서 비동기 처리에 따라 표시되는 위젯을 구성하자.
Async/await 키워드를 사용하여 비동기를 처리하는 건, 직관적으로 코드를 작성하는 데 몹시 중요하다. 그렇다면 Widget을 생성할 때, 초기 상태로 불러올 데이터가 비동기적인 처리를 거쳐야 할 때는 어떻게 해야할까? 여기서 FutureBuilder가 등장한다. 간단하게 설명해서 FutureBuilder는 비동기적인 처리를 진행하고, 결과에 따라 표시할 Widget을 반환해준다. FutureBuilder에 대한 자세한 명세는 공식 문서를 참조하도록 하자. class Sample extends StatelessWidget { @override Widget build(BuildContext context) { return FutureBuilder( future: SharedPreference.getI..
2021.02.24