본문 바로가기

.Net Technology/WPF

(1) WPF의 탄생배경

윈도우 폼 API는 닷넷에서 GUI를 다루기 위해서 사용되어 온 툴킷이고 데스크탑 UI를 만들기 위해서 사용되어 왔다. 윈도우폼과 GDI+가 닷넷 3.5에서 역시 지원되는 것은 사실이지만 닷넷 3.0이 발표되면서 새로운 데스크탑 UI를 위한 툴킷으로 WPF(Windows Presentation Foundation)가 새롭게 발표되었다. 

이번 장에서는 WPF를 다루는 첫 번째 장으로서 먼저 WPF라는 새로운 UI 프레임워크가 탄생하게 된 배경에 대해서 살펴보고 또한 WPF에서 사용되는 다양한 API들을 살펴 볼 것이다. 그리고 WPF 프로그래밍 모델에 대해서 살펴보고 Window와 Application 클래스들이 하는 역할에 대해서 살펴볼 뿐만 아니라 WPF에서 핵심적인 어셈블리와 네임스페이스들을 살펴볼 것이다. 

그리고 뒷부분에서는 XML 기반으로 구성된 XAML(Extensible Application Markup Language)이라는 새로운 문법에 대해서 소개할 것이다. 이미 봤을 수도 있겠지만 XAML은 WPF 개발자들이 UI를 원하는 대로 표현할 수 있게 해주는 언어이다. 이번 장에서는 XAML의 속성과 문법 그리고 타입 변환, 마크업의 확장, XAML을 파싱하는 방법등과 같은 중요한 토픽들을 소개할 것이다. 그리고 마지막으로 WPF를 지원해주는 비주얼 스튜디오 2008의 IDE와 익스프레션 블렌드의 역할들에 대해서 살펴볼 것이다.


WPF의 탄생배경

마이크로소프트는 수년간 사용자 유저 인터페이스를 개발하는 툴킷들에 대해서 개발해왔었다. (C/C++/Win32 API development, VB6, MFC, 등) 이런 각각의 API들은 코드 기반으로 한 GUI 애플리케이션들이었고 메인 윈도우나 대화상자, 컨트롤, 메뉴 등과 같은 다양한 리소스들이 제공되었다. 최초에 닷넷 플랫폼에서 발표된 UI 개발 도구는 윈도우 폼이라는 API였고 개발 생산성에 있어서 굉장히 강력한 기능을 제공해 주었다.

윈도우 폼은 데스크탑 애플리케이션을 개발하는데 있어서 성공적인 도구로 사용되어 오고 있지만 사실상 이 프로그래밍 모델의 문제는 다소 정형화 되어있다는 것이다. 간단하게 예를 들어 System.Windows.Forms.dll과 System.Drawing.dll 어셈블리들은 데스크탑 개발에 있어서 필요한 추가적인 기능들을 많이 제공하지 않고 있다. 다음 [표1]를 보면서 WPF가 발표되기 이전에 닷넷 플랫폼에서 사용되던 GUI 개발에 대해서 생각해보도록 하자.

원하는 기능


닷넷2.0의 솔루션


윈도우 컨트롤 만들기


윈도우 폼


2D 그래픽의 지원


GDI+ (System.Drawing.dll)


3D 그래픽의 지원


DirectX API


스트리밍 비디오의 지원


Windows Media Player


플로우 문서(Flow Document)의 지원 


PDF를 이용하여 프로그래밍



[1]다양한 기능을 지원하는 닷넷2.0 솔루션

이 표를 통해서 볼 수 있듯이 윈도우 폼 개발자는 많고 다양한 API들과 객체들을 알아야만 한다. 이러한 API들이 비슷한 문법을 제공해주고 있는 것은 사실이지만 각각의 기술들은 근본적인 구조자체가 다르다는 것이다. 예를 들어 3D를 이용해서 애니메이션을 표현하기 위해서 DirectX를 이용해야 하는데 DirextX의 경우 데이터를 그리드에 바인딩하는 방법이 완전히 다르다는 것이다. 분명 이러한 프로그래밍을 위해서 각각 다양한 API들을 공부해야 한다는 것이 윈도우 폼 프로그래머에게 굉장히 어려운 일이다.


다양한 API들의 통합

닷넷3.0에서 소개된 WPF는 이전에 굉장히 다양했던 프로그래밍 모델을 하나로 합쳐놓은 통합된 프로그래밍 모델이다. 그렇기 때문에 3D 애니메이션 프로그래밍이 필요하다면 DirectX의 API없이도 직접 3D를 구현하는 것이 가능하다. 그럼 얼마나 잘 통합되었는지 확인해보기 위해서 다음 [표2]를 기존의 데스크탑 애플리케이션 모델과 비교해 보도록 하자.

원하는 기능


닷넷2.0의 솔루션


윈도우 컨트롤 만들기


WPF


2D 그래픽의 지원


WPF


3D 그래픽의 지원


WPF


스트리밍 비디오의 지원


WPF


플로우 문서(Flow Document)의 지원 


WPF



[2] 다양한 기능을 지원하는 닷넷3.0의 솔루션


XAML을 통한 완벽한 UI의 분리

아마도 WPF의 가장 큰 장점 중에 하나가 바로 윈도우 애플리케이션의 로직과 UI가 완벽하게 분리되는 것이라고 할 수 있을 것이다. XAML을 이용하면 마크업 언어를 이용해서 UI를 정의하는 것이 가능하다. 그리고 이 마크업은 코드와 연결되어 관리할 수 있는 핵심적인 기능을 제공해주고 있다. 

XAML은 WPF 애플리케이션에 종속적인 기술이 아니다. 만약 사용자 인터페이스로 아무것도 하지 않는다고 하더라도 이 XAML을 이용해서 닷넷의 객체구조를 표현할 수 있다. 예를 들어 WF(Windows Workflow Foundation) 기술 같은 경우 XAML을 이용해서 액티비티를(WF에서 사용되는 용어) 만드는 것이 가능하다.



WPF에 대해서 살펴봤듯이 WPF는 놀랄 만큼의 유연성을 제공해준다. XAML은 UI개체를 쉽게 정의할 수 있게 해줄 뿐만 아니라 그래픽 렌더링, 애니메이션, 데이터 바인딩, 멀티미디어와 같은 다양한 기능 또한 쉽게 구현할 수 있다. 예를 들어 회사 로고가 담겨 움직이는 버튼컨트롤을 만든다면 단 몇 줄의 마크업 코드로 쉽게 작성할 수 있을 것이다. 또한 WPF 개체는 스타일과 템플릿을 적용할 수 있기 때문에 프로그램의 동작에 있어서 어떠한 영향도 주지 않고 전체 모양을 쉽게 바꿀 수 있다. 

여기서 핵심은 WPF 기반으로 커스텀 컨트롤을 만들 때 굉장히 쉽게 구현할 수 있다는 것이다. 윈도우 폼과 다르게 만약 컨트롤의 이벤트나 특정 동작을 변경해야 할 경우라면 WPF의 커스텀 컨트롤 라이브러리를 어쩔 수 없이 다시 컴파일 할 수 있겠지만 그게 아닌 단순한 컨트롤의 모양이나 애니메이션과 같은 부분을 수정하는 거라면 마크업을 이용해서 쉽게 수정할 수 있다.

WPF 커스텀 컨트롤은 바이너리 파일로 다른 프로젝트에서 재사용이 가능하며 컴파일 된 컨트롤은 비주얼 스튜디오 2008의 디자인 화면에서 그대로 확인이 가능하다.



 
최적화된 렌더링 모델

WPF에서 알아야 할 내용 중에 하나가 바로 윈도우 비스타 기반으로 동작되는 환경에서 비디오 카드의 성능을 최적화 할 수 있다는 것이다. WPF 애플리케이션은 윈도우 XP나 2003과 같은 OS에서도 동작될 수 있지만 윈도우 비스타에서 실행했을 때 멀티 미디어 서비스나 애니메이션과 같은 기능을 실행할 때 더 좋은 성능을 가지게 된다. 이것은 WPF 서비스가 바로 DirectX 엔진을 통해서 렌더링 되기 때문이다.

다시 한번 강조하는 것은 WPF는 윈도우 비스타에 종속된 애플리케이션이 아니라는 것이다. 물론 비스타 OS가 닷넷 3.0 라이브러리를 가지고 있다 하더라도 XP나 윈도우 2003과 같은 환경에서도 닷넷 3.5 SDK나 닷넷 3.5 런타임을 설치할 수 있고 WPF애플리케이션을 실행시킬 수 있다.


WPF 애플리케이션은 또한 비스타 기반에서 동작되었을 때의 다른 이점을 가지고 있다. 만약 그래픽의 충돌이 일어날 경우 블루스크린과 같이 OS 전체가 다운되는 일이 없다는 것이다. 비스타에서는 간단히 종료할 것인지에 대한 대화 상자만 띄워주고 간단히 종료된다. 이미 알고 있을 수도 있지만, 비디오 드라이버가 잘못 동작될 경우에 블루 스크린이 뜰 확률이 굉장히 높기 때문이다. 


WPF의 다양한 옵션 기능

지금까지의 이야기를 정리해보면 WPF는 데스크탑 애플리케이션을 만들기 위한 새로운 API이고 다양한 데스크탑 API를 제공해주고 있다. 또한 단일화된 프로그래밍 모델을 제공해주고 있고 또한 XAML을 통하여 UI의 영역과 코드의 영역을 완벽히 분리시켜 준다. 여기에 추가로 WPF는 다양한 옵션들을 제공해주고 있다. 이 내용에 대해서는 다음 장에서 더 자세히 살펴볼 것이지만 다음과 같은 기능을 제공해주고 있다는 것을 알아두자. 

- 다수의 레이아웃 매니저를 제공해주고 있어서 컨트롤을 유용하게 배치하고 관리할 수 있다. 
- 강화된 데이터 바인딩을 이용해서 UI 개체를 다양하게 표현할 수 있다.
- 스타일 엔진을 이용해서 WPF 애플리케이션의 테마를 정의할 수 있다.
- 벡터 그래픽 기반으로 크기나 넓이를 자동적으로 조절할 수 있고 또한 애플리케이션에서 자유롭게 자리를 바꿀 수도 있다.
- 2D와 3D 그래픽과 애니메이션, 비디오 오디오 재생과 같은 기능을 제공해주고 있다.
- XPS(XML Paper Specification)나 WYSIWYG, 플로우 문서들과 같은 기술을 다룰 수 있는 풍부한 API들을 제공해주고 있다.
- 윈도우 폼이나 ActiveX, Win32 HWND와 같은 다른 GUI 객체들과 통합을 지원하고 있다. 



이 내용은 C#.NET Platform 원서의 내용을 기반으로 작성되었습니다.