본문 바로가기

#WPF

[WPF] Static Resource와 Dinamic Resource의 차이가 무엇일까?

반응형

Static Resource와 Dinamic Resource의 차이가 무엇일까?

 

[작성자의 다른 글 보러가기: '

C#에서 CallerMemberName이란 뭘까?']

 


StaticResourceDynamicResource는 WPF에서 리소스(Resource)를 참조하는 데 사용되는 두 가지 다른 접근 방식입니다.

 

1. StaticResource-

 

StaticResource는 리소스를 정적으로 참조하는 방식입니다. 즉, 리소스를 한 번 찾으면 해당 리소스의 값을 즉시 가져옵니다. 이 값은 그 이후에 변경되지 않습니다. 따라서 리소스가 한 번 로드되고 사용되면, 해당 리소스의 변경 사항이 반영되지 않습니다.

예를 들어, 다음과 같이 정적 리소스를 사용하는 예제를 살펴보겠습니다:

 

<Window.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="Red" />
</Window.Resources>

...

<TextBlock Text="Hello, World!" Foreground="{StaticResource MyBrush}" />

 

위의 코드에서 StaticResource를 사용하여 "MyBrush"라는 키로 정의된 SolidColorBrush 리소스를 TextBlock의 전경색(Foreground)에 적용합니다. 이 경우 "Red"로 정의된 색상이 즉시 사용되며, 이후에 "MyBrush"의 값이 변경되어도 TextBlock의 전경색은 변경되지 않습니다.

 

 


 

2. DynamicResource-

 

 DynamicResource는 리소스를 동적으로 참조하는 방식입니다. 즉, 리소스가 사용될 때마다 실시간으로 리소스의 값을 확인하고 변경된 내용을 반영합니다. 따라서 리소스의 값이 변경되면 해당 리소스를 사용하는 요소들도 자동으로 변경된 값을 적용합니다.

예를 들어, 다음과 같이 동적 리소스를 사용하는 예제를 살펴보겠습니다.

 

<Window.Resources>
    <SolidColorBrush x:Key="MyBrush" Color="Red" />
</Window.Resources>

...

<TextBlock Text="Hello, World!" Foreground="{DynamicResource MyBrush}" />

 

위의 코드에서 DynamicResource를 사용하여 "MyBrush"라는 키로 정의된 SolidColorBrush 리소스를 TextBlock의 전경색(Foreground)에 적용합니다. 이 경우 "Red"로 정의된 색상이 먼저 사용되고, 이후에 "MyBrush"의 값이 변경되면 TextBlock의 전경색도 변경된 값으로 자동으로 업데이트됩니다.

따라서, StaticResource는 정적으로 리소스를 로드하여 한 번만 사용하고 이후 변경 사항을 반영하지 않지만, DynamicResource는 동적으로 리소스를 로드하여 변경 사항을 실시간으로 반영합니다. 성능 측면에서는 StaticResource가 일반적으로 더 빠르지만, 변경 가능성이 있는 리소스의 경우 DynamicResource를 사용하여 자동으로 변경 사항을 반영하는 것이 유용합니다.