본문 바로가기

Develop

[Xamarin] 성능 개선 - OneTime Binding 성능 개선 - OneTime Binding Compiled Binding 보다 성능을 더 끌어올릴 수 있는 바인딩 방식으로 OneTime Binding 이 있습니다. 이름에서 알 수 있듯이, 최초에 BindingContext가 바뀔 때만 값이 바인딩되고 INotifyPropertyChanged 이벤트를 구독하지 않는 방식입니다. 따라서 이벤트를 구독하고 처리하는 과정이 없어지므로 성능이 개선되는 원리입니다. OneTime Binding 방식이 도움이 되는 때는 UI가 처음 생성될 때만 바인딩하고 이후로는 값이 변경되지 않을 때입니다.OneTime Binding이 유용할 수 있는 사례를 아래에 소개드리도록 하겠습니다. Command를 바인딩할 때 Command 같은 경우 메서드를 바인딩하는데, 런타임에 메..
[.NET] .NET 통합과 MAUI 란? .NET MAUI 란? .NET MAUI 에 앞서, 마이크로소프트가 .NET 5 에 왜 이렇게 공을 들이는지를 이해하셔야 합니다. .NET 5 는 현재 플랫폼 별로 파편화되어 있는 프레임워크들을 통합하기 위한 노력의 산물입니다. 현재 프레임워크는 크게 플랫폼 별로 아래와 같이 나뉘어 있습니다. 이렇게 파편화된 프레임워크로 인해 지원하는 기능이 프레임워크 별로 달라지기도 하고, 공통으로 사용하고 싶은 기능이 있으면 각 프레임워크마다 지원하는지 확인해야 하는 등의 문제가 끊이지 않았습니다. 그래서 나름 임시 방편으로 제공한 프레임워크가 .NET Standard 프레임워크입니다. 이러한 상황에서 2019년 05월 06일 마이크로소프트 블로그에 .NET 5 를 소개하는 글이 올라오면서 다음과 같이 파편화된 프레..
[Xamarin] ResourceDictionary 깔끔하게 정리 ResourceDictionary 깔끔하게 정리 아래처럼 View 마다 ResourceDictionary가 있을 경우, 중복되는 XAML 코드도 발생하게 되고 같은 객체를 중복하여 생성하게 되므로, 비효율적입니다. ContentViewA.xaml #FFFFFF 따라서 먼저 아래처럼 ResouceDictionary를 분리된 파일로 만듭니다. ContentViewA.xaml ResourceDictionary.xaml #FFFFFF 하지만 ResourceDictionary.xaml 처럼 모든 리소스를 한 곳에서 관리하게 되면 불필요한 리소스까지 공유하게 되는 문제가 있습니다. 따라서 아래처럼 리소스를 자신만의 기준에 맞춰 분리하도록 합니다. ContentViewA.xaml ResourceDictionary.x..
[Xamarin] 성능 개선 - Compiled Binding 성능 개선 - Compiled Binding Xamarin 의 핵심 아키텍처는 Model-View-ViewModel 패턴입니다. 따라서 View 와 ViewModel 을 연결할 때 Data Binding을 집중적으로 사용하게 됩니다. 그리고 Data Binding은 View의 속성과 ViewModel의 속성을 연결하고 연결된 속성을 해석하기 위해 Reflection 기술을 사용하는데, Reflection 기술은 런타임에 많은 리소스를 소비합니다. 따라서 컴파일할 때 바인딩될 속성 타입을 명시해서 성능을 개선할 수 있습니다. 이를 Compiled Binding 이라 합니다. Compiled Binding 를 진행하기 위해선 XAML 코드가 컴파일 되어야 합니다. 이 글을 따라 XAML 코드가 컴파일되도록 ..
[Xamarin] 성능 개선 - XAML 컴파일 성능 개선 - XAML 컴파일 XAML 코드는 View 의 디자인을 위해 사용하는 마크업 언어라, 컴파일하여 배포하는 언어가 아닙니다. 그래서 Xamarin 앱을 배포하면 XAML 코드는 .xaml 파일 그대로 배포되고, 런타임에 동적으로 해석해서 View 를 만듭니다. 개발자 입장에서 런타임에 동적으로 XAML 코드를 해석하는건 Hot Reload 같이 디버깅을 하는 경우를 제외하고는 성능을 희생해서 얻는 메리트가 없습니다. 따라서 XAML 코드를 CLR 이 해석할 수 있는 IL (Intermediate Language) 코드로 변환하도록 설정하여 간단하게 성능을 개선하여 봅시다. Assembly 단위로 XAML 코드를 컴파일하도록 설정 [assembly: XamlCompilation (XamlComp..
[Xamarin] TypedDataTemplateSelector TypedDataTempalteSelector WPF 프로그램을 개발하면 ItemsControl.ItemTemplate 에 DataTemplate 을 등록해서 ItemsControl.ItemSource 에 ViewModel 이 추가될 때마다 ViewModel 타입에 맞는 View가 추가되는데, Xamarin 는 WPF 처럼 DataTemplate.DataType을 지원하지 않아 반드시 DataTemplateSelector를 사용해야만 합니다. 문제는 DataTemplateSelector 를 ViewModel 타입에 따라 선택하게 구현하려면 아래와 같이 클린하지 않은 코드를 만들 수 밖에 없습니다. public class MyDataTemplateSelector : DataTemplateSelector {..
[React] 이벤트 이벤트 합성 이벤트 (SyntheticEvent) 브라우저마다 이벤트 이름부터 시작해서 이벤트 종류나 이벤트가 처리되는 방식이 다릅니다. 이를 동일하게 처리하기 위해 React 는 Synthetic 이벤트로 브라우저마다 다른 Native 이벤트를 묶어서 처리합니다. 따라서 React 개발자는 브라우저마다 다른 Native 이벤트를 신경쓰지 않고, React 가 제공하는 이벤트만 신경쓰면 됩니다.f React 이벤트는 합성 이벤트라서, false 를 반환하더라도 이벤트 전파가 멈추지 않습니다. 반드시 e.stopPropagation() 또는 e.preventDefault() 를 호출해야 합니다. 이벤트 등록하기 React JSX 에서 이벤트를 등록할 때 조심해야 하는건 일반적인 HTML에서 이벤트를 등록하..
[React] Lifecycle 이벤트 Lifecycle 이벤트 React 컴포넌트는 Lifecycle 을 가지고 있으며, 발생한 이벤트에 따라 정해진 순서로 특정 메서드들을 실행합니다. 이벤트에 따라 발생하는 함수의 순서를 알고 있어야 어떤 순서에 어떤 코드를 실행시켜야 할지 판단할 수 있고, 실행 결과를 예측할 수 있습니다. 여기서는 React 16.13.0 버전 이후 Lifecycle 만 설명드리도록 하겠습니다. React 팀에서 Async Rendering 을 위해 Lifecycle 설계를 변경하기로 결정하였으며, 17.0 버전 이후로는 componentWillMount 메서드와 componentWillReceiveProps 메서드, 그리고 componentWillUpdate 함수가 지원되지 않습니다. Lifecycle 지도 그림 출처..