(Flutter) BLoC 패턴 #2
지난글에서 BLoC 패턴에 대해 알아보았고 직접 구현하는 방법에 대해 알아보았습니다.
BLoC 패턴 #1
이번글에서는 좀더 많은 기능을 제공해 주고 일일히 BLoC동작을 구현할 필요 없이 자체적으로 제공해 주는 BLoC 패키지인 flutter_bloc 패키지 사용에 대해
알아보겠습니다.
(Flutter) BLoC 패턴 #1
Flutter 개발에 있어서 상태관리는 반드시 필요한 부분이고 상태관리에 도움되는 패키지는 여러가지가 존재합니다.
대표적으로 Provider, GetX, BloC 패키지들이 존재하는데
이 패키지들은 모두 비즈니스 로직분리를
목표로 BLoC패턴 기반으로 되어 있습니다. 이번 글에서는 BLoC패턴이 무엇이고,
왜 사용되는지 그리고 BLoC패턴을 구현하기 위해선 어떻게 구현해야 하는지 알아보겠습니다.
(WPF) Async network image
WPF 기본 Image컨트롤은 네트워크상 이미지 표시를 지원합니다.
<Image Source="url"/>
그런데 용량이 큰 고해상도 이미지인 경우 렌더링 과정이 동기 처리되기 때문에 UI가 멈추는 상황이 발생 합니다.
또한 로컬 파일 캐시 처리가 없기 때문에 프로그램 종료 후 해당 화면이 표시 될때는 다시 위와 같은 똑같은 상황이 발생 됩니다.
이러한 상황을 해결하기 위해 이미지를 비동기로 다운받아서 표시 되도록 커스텀 컨트롤을 만들어 사용할 수 있습니다.
추가로 한번 받은 이미지는 더 이상 변경될 가능성이 없다면 로컬 파일로 저장해두었다가 로컬 파일 이미지를 load하도록 처리 되도록 하면 성능...
(WPF) ICustomTypeDescriptor를 사용한 동적 바인딩
WPF에서 데이터 바인딩을 통해 개체를 참조하는 방식을 크게 세 가지 방식으로 제공하고 있습니다.
첫 번째는 이 글에서 알아볼 System.ComponentModel.CustomTypeDescriptor 와 System.ComponentModel.INotifyPropertyChanged 를 구현하여
리플렉션을 이용해 속성 특성을 검색하고 변경 알림을 사용하는 방법이고
두 번째는 System.ComponentModel.INotifyPropertyChanged 구현으로 특정 속성의 변경 알림만 구현해 주면 데이터 바인딩 엔진 자체에서 리플렉션을 사용하고
필요한 속성을 참조합니다.
이 경우 자체적으로 Lightwe...
(C#) TPL Dataflow 라이브러리
.NET 공식(?) 라이브러리중 데이터 병렬 처리를 다룰 수 있도록 제공하는 Dataflow Task 라이브러리가 있습니다. (TPL Dataflow 라이브러리)
TPL Dataflow는 .NET 기본 API에 포함되지 않고 NuGet 패키지로 설치해서 사용할 수 있습니다.
NuGet - System.Threading.Tasks.Dataflow
TPL Dataflow MS Doc
이번 글에선 TPL Dataflow에서 제공하는 System.Threading.Tasks.Dataflow.BroadcastBlock<T> 클래스에 대해 알아보고
간단한 샘플 예제를 작성해 보겠습니다.
(C#) 작업 대기열 구현 Channels사용
.NET Core 3.0부터 포함 API로 제공되는 System.Threading.Channels.Channel<T> 클래스에 대해 알아보도록 하겠습니다.
System.Threading.Channels.Channel<T> 클래스는 비동기 작업에서 메세지 처리를 스레드로 부터 안전하게 처리할 수 있도록
간편한 방식으로 작업 대기열을 구성할 수 있도록 제공합니다.
참고로 .NEY Core 3.0 이전 버전에서는 NuGet 패키지를 통해 사용해볼 수 있습니다. NuGet - System.Threading.Channels
(기타) WPF와 Flutter ListView Recycle결과 비교
Flutter에서 RecycleView기반의 ListView.builder로 데이터 10만건 로드 및 스크롤링 처리와
WPF에서 UI가상화를 사용하고 Recycling모드로 데이터 10만건 로드 및 스크롤링 처리 비교 입니다.
(Flutter) 멀티스레딩 분리
Dart언어를 사용하는 Flutter 플랫폼에서 실행되는 코드는 기본적으로 격리된 메모리 공간에서 단일 스레드 환경으로 이벤트 루프가 실행됩니다.
그렇기 때문에 시간이 오래걸리는 작업 처리시 스레드가 하나로 처리되는데 해당 작업을 처리하는 시간동안은 이벤트 루프가 동작되지 않아 UI 업데이트에 문제가 생기거나 버벅거릴 수 있습니다.
Flutter는 화면의 자연스러움을 유지 하기 위해 최소 1ms에 60프레임을 처리하려고 합니다. 이런 요청을 유지 할 수 있도록 이벤트 루프에서 메세지 펌핑이 원활하게 되도록 처리하는 것이 중요합니다.
전체 글 61개, 8 페이지