(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

더보기

(Flutter) 멀티스레딩 분리

Dart언어를 사용하는 Flutter 플랫폼에서 실행되는 코드는 기본적으로 격리된 메모리 공간에서 단일 스레드 환경으로 이벤트 루프가 실행됩니다. 그렇기 때문에 시간이 오래걸리는 작업 처리시 스레드가 하나로 처리되는데 해당 작업을 처리하는 시간동안은 이벤트 루프가 동작되지 않아 UI 업데이트에 문제가 생기거나 버벅거릴 수 있습니다. Flutter는 화면의 자연스러움을 유지 하기 위해 최소 1ms에 60프레임을 처리하려고 합니다. 이런 요청을 유지 할 수 있도록 이벤트 루프에서 메세지 펌핑이 원활하게 되도록 처리하는 것이 중요합니다.

더보기

(Fluter) Flutter MVVM with GetX

Flutter의 GetX 모듈을 사용해서 MVVM패턴 방식으로 앱을 설계하고 데이터를 다루는 방법에 대해 알아보도록 하겠습니다. Flutter은 .NET의 WPF처럼 처음 구조 설게가 MVVM패턴을 염두해두고 설계되지 않아서 자체적으로 완벽한(?) 데이터 바인딩 기능을 지원하지 않고 있습니다. GetIt이나 GetX 모듈 등을 이용해 빠르게 MVVM 구조로 뷰와 비즈니스로직을 분리하도록 구현해볼 수 있습니다. MVVM 패턴에 대한 설명은 다음 아티클을 참조 하시면 됩니다. 링크 : MVVM 패턴이란 프로젝트를 다루기전에 앞서 이번 MVVM구조에 사용된 GetX의 주요 기능에 대해 살펴보겠습니다.

더보기

(Flutter) Flutter 당근마켓 모바일 버전 Clone 프로젝트

Flutter 당근마켓 모바일 버전 클론 프로젝트 입니다. 웹 API부터 모바일 클라이언트까지 심플하게 구현한 프로젝트 입니다. 이 프로젝트는 Flutter를 중점으로 초급, 초중급 수준의 대상으로 학습 목적으로 제작하였습니다. 저 역시 모자란 부분이 많아 잘못된 부분이 있다면 같이 함께 학습하면서 고쳐봤으면 좋겠습니다.

더보기