[WPF] XAML

Posted by 알 수 없는 사용자
2015. 5. 30. 00:53 프로그래밍/WPF

XAML이란?

XAML(Extensible Application Markup Language)의 마크업 언어로써 XML기반이며, 닷넷의 객체들을 초기화하거나 생성하기에 적합하도록 설계된 간편하고 범용적인 선언형 프로그래밍 언어이다. XAML만으로 구성된 파일을 느슨한 XAML 페이지(loose XAML page)라고 한다.

XAML은 오로지 닷넷의 API만을 사용하기 때문에, HTML, SVG(Scalable Vector Grphics) 같은 특정 포맷이나 다른 언어들과 차이점을 정확히 알지 못하면 이들과 비교해 보는 시도는 잘못된 방향으로 흐를 수도 있다. XAML은 파서 또는 텀파일러가 처리하도록 정의한 규칙과 다수의 키워드로 이루어져 있지만, 이미 정의된 것 외에는 스스로 어떤 엘리먼트도 정의하지 않는다. WPF와 함께 사용되어야 강력한 성능을 발휘한다.


엘리먼트와 어트리뷰트

XAML의 명세를 살펴보면 닷넷의 네임스페이스, 데이터 타입, 프로퍼티, 이벤트 등을 XML 네임스페이스, 엘리먼트, 어트리뷰트와 매핑되도록 해주는 규칙들이 정의되어 있다.

XAML:

 <Button xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Content="설사 극복" Width="100" Height="30"/>

C# :

 System.Windows.Controls.Button b = new System.Windows.Controls.Button();
 b.Content = "설사 극복";
 b.Width = 100;
 b.Height =30;


XAML 코드로 짠 부분과 C#으로 하드코딩한 결과 값은 동일하게 나오지만, XAML로 정의한 부분은 인터넷 익스플로러에서 컴파일 없이 결과를 확인할 수 있는 반면,

C#코드는 컴파일과 실행하기 위한 부수적인 코드들이 추가되어야한다.

XAML에서 오브젝트 엘리먼트(object element)를 선언하면 항상 기본 생성자(default constructor)를 사용해서 상응하는 닷넷 객체를 생성하는 것과 동일하고,
프로퍼티 어트리뷰트(property attribute)를 설정하는 것도 생성된 닷넷 객체에 동일한 프로퍼티를 설정하는 것과 동일하다.

또한, 이벤트 어트리뷰트(event attribute)를 설정하면 객체의 이벤트 처리기와 연결된다. Click이벤트를 추가해보자.

XAML:

 <Button xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation" Content="설사 극복" Width="100" Height="30" Click="Button/>

C# :

 System.Windows.Controls.Button b = new System.Windows.Controls.Button();
 b.Click += new System.Windows.RoutedEventHandler(button_Click);
 b.Content = "설사 극복";

위의 XAML은 파라미터를 가진 button_Click이라는 메소드가 필요하기 때문에 더 이상 독립적으로 실행될 수 없고 이벤트를 처리하는 프로그래밍 코드가 있어야한다.
이부분은 추후 심화과정으로 들어갈때 설명.

XAML을 사용할 때 반드시 주의할 점은 C#처럼 대소문자를 구별한다는 것이다.


네임스페이스

위의 XAML을 살펴보다 보면 의문점이 생긴다. http://schemas.microsoft.com/winfx/2006/xaml/presentation의 XML 네임스페이스가 닷넷의 System.Windows.Controls CLR 네임스페이스와 어떻게 매핑될 수 있을까 하는 점이다. 해답은 WPF의 어셈블리 내부에 하드코[각주:1]되어있는 정보와 XmlnsDefinitionAttribut의 몇몇 인스턴스를 이용해서 서로 매핑을 하는 점이다. 두번째로 생기는 의문점은 네임스페이스에 쓰인 schemas.microsoft.com이라는 URL인데 웹브라우저에서 이 URL을 입력해보면 아무것도 안나온다. 사실, 이 URL은 단지 임의의 네임스페이스를 구별하기 위한 키워드처럼 생각하면된다.

XAML 파일의 루트 엘리먼트는 적어도 하나의 XML 네임스페이스가 사용되어야 한다.

일반적으로 http://schemas.microsoft.com/winfx/2006/xaml/presentation을 기본 네임스페이스로,

http://schemas.microsoft.com/winfx/2006/xaml을 두번째 네임스페이스(언어 네임스페이스)로 사용하며 두번째 네임스페이스에 x 접두사를 붙이는 것이 일종의 관례이다.

C#에서 처음부분에 using System; 을 사용하는 것처럼 기본적인 형태라고 생각하면 된다.



참고 문헌 - 에덤 네이선의 WPF 언리쉬드


  1. 실제 PresentationCore.dll의 내부를 보면 XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation","System.Windows")처럼 여러 개의 네임스페이스 매핑코드가 하드코딩 되어있다. [본문으로]

'프로그래밍 > WPF' 카테고리의 다른 글

MVC, MVVM 코드 리뷰를 통한 차이점 설명  (5) 2015.07.05
[WPF] MVC, MVP, MVVM 차이점  (5) 2015.06.30
[WPF] WPF 개념  (6) 2015.05.29