본문 바로가기

Develop/MAUI 가이드

[Xamarin] 성능 개선 - Compiled Binding

반응형

Compiled Bindings
Compiled Bindings

성능 개선 - Compiled Binding

Xamarin 의 핵심 아키텍처는 Model-View-ViewModel 패턴입니다. 따라서 ViewViewModel 을 연결할 때 Data Binding을 집중적으로 사용하게 됩니다. 그리고 Data BindingView의 속성과 ViewModel의 속성을 연결하고 연결된 속성을 해석하기 위해 Reflection 기술을 사용하는데, Reflection 기술은 런타임에 많은 리소스를 소비합니다. 따라서 컴파일할 때 바인딩될 속성 타입을 명시해서 성능을 개선할 수 있습니다. 이를 Compiled Binding 이라 합니다.

Compiled Binding 를 진행하기 위해선 XAML 코드가 컴파일 되어야 합니다. 이 글을 따라 XAML 코드가 컴파일되도록 설정해주시길 바랍니다. 그리고 BindingContext 가 설정되는 VisualElement에 아래와 같이 x:DataType을 지정하면 됩니다.

<StackLayout x:DataType="local:HslColorViewModel">
  <StackLayout.BindingContext>
    <local:HslColorViewModel Color="Sienna" />
  </StackLayout.BindingContext>
  <Slider Value="{Binding Hue}" />
  <Slider Value="{Binding Saturation}" />
  <Slider Value="{Binding Luminosity}" />
</StackLayout>    

만약 바인딩에 문제가 있을 시, 컴파일 에러가 발생하게 됩니다.

DataTemplate 에 Compiled Binding 적용

<DataTemplate x:DataType="local:NamedColor">
    <StackLayout>
      <Label Text="{Binding FriendlyName}" />
    </StackLayout>
</DataTemplate>

Compiled Binding 내부에 기본 Binding 사용

<StackLayout x:DataType="local:HslColorViewModel">
    <StackLayout.BindingContext>
        <local:HslColorViewModel Color="Sienna" />
    </StackLayout.BindingContext>
    <BoxView Color="{Binding Color}"
             VerticalOptions="FillAndExpand" />
      <!-- x:DataType 에 x:Null 을 적용하면 기본 Binding 으로 전환할 수 있습니다. -->
    <StackLayout x:DataType="{x:Null}"
                 Margin="10, 0">
        <Slider Value="{Binding Hue}" />
        <Slider Value="{Binding Saturation}" />
        <Slider Value="{Binding Luminosity}" />
    </StackLayout>
</StackLayout>
반응형