[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

[WPF] WPF 개념

Posted by 알 수 없는 사용자
2015. 5. 29. 23:36 프로그래밍/WPF

WPF (Windows Presentation Foundation)


■ 기술발달과정

  • 1985년 GDI/USER 시스템을 기반으로 하는 윈도우 1.0 버전이 만들어짐.

  • 1990년대 초반, 2D/3D 그래픽을 다루는 프로그램에서 이용하는 실리콘 그래픽스사에서 만든 OpenGL이 선풍적인 인기를 끔.
    OpenGL을 통해 CAD, 가상현실 프로그램, 게임들을 개발하는데 이용함.

  • 1995년 마이크로소프트사에서 다이렉트X를 발표함. 2차원 그래픽, 입력장치, 커뮤니케이션, 사운드에서 고성능 기능을 구현할 수 있게 됨. 
    몇 년이 흘러, GDI와 다이렉트X에서 많은 기술적 진보가 이루어지고 GDI+로 발전.

  • 2002년, 매니지드 코드와 닷넷의 발표로, 개발자들은 윈도우나 웹 프로그램을 작성할 때 생산성이 높은 기술을 접하게 됨.

  • 닷넷의 여러 기술 중에서, GDI+를 쉽게 이용할 수 있게 한 윈폼(Windows Forms)은 C#, 비주얼베이직, C++ 개발자들이 윈도우의 새로운 사용자 인터페스를 만들기 위해 사용하는 중요한 기술이 됨. 그렇지만 GDI+와 USER 시스템의 근본적인 한계는 아직까지 존재함.


다이렉트X 9 버전이 소개된 이후, 마이크로소프트는 과거에 비주얼베이직을 위한 라이브러리를 만들어 배포했던 것처러 매니지드 코드를 위해서 다이렉트X 프레임 워크를 만들었고 이후 XNA 프레임워크로 발전시켰다. 이 프레임워크는 C# 개발자들이 복잡한 . NET/COM  상호운용성 문제를 다루지 않고도 다이렉트X를 다룰수 있도록 해 주었지만, 게임을 개발할때를 제외하곤 예전 프로그램 방식보다 특별히 쉬워진 것이 없었다.


마이크로소프트사는 GDI+와 USER 시스템의 한계를 탈피한 무엇인가 새로운 것이 필요하다고 인식을 했고, 현재 윈폼처럼 프레임워크 기반에서 사람들이 즐길 수
있을 정도로 생산성이 뛰어난 기술을 제공하기 시작했다. 그래서 WPF(Windows Presentation Foundation)는 난이도가 높고 기술적으로 어려운 문제들을 숙지하지 않고도 현대적인 사용자 겸험(User eXperience)을 개발하기 원하는 개발자나 디자이너에게는 하나의 대답이 될 수 있다.


WPF의 특징

  • 광범위한 통합성 - 2차원 그래픽, 3D, 비디오, 음성인식 기능등 여러 분야를 포함하면서도 일관성 있는 프로그래밍 모델과 개별 기술이 서로 잘작동하도록 긴밀한 통합성을 제공.
  • 해상도 독립성 - 해상도를 높이거나 DPI 값이 변경 되는 경우 작은 UMPC나 50인치 대형 TV같이 화면 크기에 상관없이 사용자 인터페이스가 상황에 맞춰 알맞게 보이는 것이 GDI 기반 인터페이스에서는 불가능하지만, WPF가 벡터기반으로 이루어져 이러한 것이 가능하기 때문에 사용자들은 해상도와 관계없이 화면상에 나타나는 것들을 쉽게 늘였다 줄였다 할수 있다.




  • 하드웨어 가속 기능 - WPF가 새로운 기술이긴 하지만, 실제적인 내용은 다이렉트 3D의 기반 위에서 만들어져, 특히 2D/3D 그래픽과 텍스트는 3차원의 삼각형, 텍스처 및 다른 다이렉트3D 객체로 전환되어 하드웨어(그래픽카드)에 의해서 렌더링된다. 그리하여 그래픽을 좀더 부드럽게 표현하기 위해 하드웨어 가속 기능을 사용함으로써 고사용을 요구하는 게임을 제외하곤 3D 기능에 중점을 둔 새로운 하드웨어나 드라이버에서 최대한의 기능을 맛볼 수 있게 해준다.
  • 선언형 프로그래밍(declarative programming) - 모든 닷넷 프로그램은 XML을 이용해서 리소스 파일과 환경설정을 정의하곤 한다. 그러나 WPF는 XAML(Extensible Application Markup Language)을 소개하고 이를 이용한 선언형 프로그래밍을 도입하였다. HTML로 사용자 인터페이스를 정의하는 것과 방식이 유사하지만, HTML에 비하면 놀라울 정도로 광범위하다.
     
  • 다양한 제작방식과 커스터마이징 - WPF 컨트롤들은 예전에 볼수 없던 놀라운 커스터마이징 기술을 제공한다. 예를들어 콤보박스를 애니메이션 버튼으로, 또는 메뉴를 동영상 화면으로 채울 수도 있다. 이처럼 심할 정도로 사용자 개인취향에 맞게 고칠 수 있다. 동일한 코드를 가지고, 외형을 아주 쉽게 바꿀 수 있는 '스킨' 기능을 가진 프로그램을 쉽게 만들 수 있다.

  • 쉬운 배포 - 윈도우즈 인스톨러나 클릭원스를 이용한 전통적인 배포방식과 웹 브라우저에서 프로그램을 실행시키는 방식을 지원한다.


정리 - WPF는 다이렉트X의 3D나 하드웨어 가속 기능, 윈폼의 생산성, 플래시 같은 강력한 애니메이션 지원 기능, 그리고 HTML처럼 간단한 선언형 마크업과 쉬운 배포등 좋은 장점들만을 취합하는 것을 목표로 한다. 하지만 아쉽게도 처음 시작할 때 로딩 시간이 너무 오래 걸리는 문제와 하드웨어 가속 기능을 지원하지 않는 시각적 효과 같은 성능 문제나 3D, 오디오 , 비디오처럼 대부분의 사람들이 선호하는 분야에서 아직 완벽하지 않다는 점들을 문제 삼을 수 있다. 하지만 WPF를 접하다 보면 과거 어떤 기술보다도 뛰어난 생산성과 강력한 기능을 발견할 수 있다.


이미지 출처(참고) - http://cafe.naver.com/mcutil/4206

참고 서적 - 에덤 네이선의 WPF 언리쉬드





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

MVC, MVVM 코드 리뷰를 통한 차이점 설명  (5) 2015.07.05
[WPF] MVC, MVP, MVVM 차이점  (5) 2015.06.30
[WPF] XAML  (7) 2015.05.30

[ MSSQL ] Page와 Extend

Posted by 알 수 없는 사용자
2015. 5. 27. 16:50 프로그래밍/데이터베이스

Page : SQL Server의 기본 저장(I/O) 단위
Extent : 공간 관리의 기본 단위

위 그림과 같이 데이터베이스의 데이터파일(mdf,ndf)에 할당되는 디스크 공간은 Page로 나뉘어지며 Extent는 8개의 Page로 구성한다.
모든 Page는 Extent로 저장된다.

1. Page

Page에 데이터가 저장될 때 각 페이지는 96byte의 header로 시작하며, header는 시스템 정보를 저장하는데 사용된다.
header에 저장되는 시스템 정보에는 페이지번호, 유형, 페이지 사용 가능 크기등등 여러가지의 시스템 정보가 표현된다.

Page의 구조를 살펴보면


그림과 같이 시스템 정보를 저장하는 header, 데이터의 값이 저장되는 Body 그리고 데이터의 주소값을 저장하는 Row Offset Table으로 구성되어있다.

이전 글에서도 언급했듯이 데이터파일에는 데이터가 수정되는 경우 저장되게 된다.
즉 , SELECT와 같이 조회 행위는 데이터 파일을 읽을 뿐 내용에는 영향을 주지 않는다.

INSERT, UPDATE, DELETE 처럼 데이터의 변화가 있는 경우 어떻게 저장이 되는 가를 살펴보면

DELETE의 경우 해당 데이터가 저장된 행과 주소값을 삭제하고 INSERT명령을 수행하면 삭제된 Offset Table에 새로 삽입된 데이터의 주소값을 저장하고 데이터의 값을 저장할 행을 추가한다. 그러나 그림에서 보면 삭제된 데이터가 사용하고 있던 106번지의 주소는 아무도 사용하지 않고 할당된 공간으로 존재하게 된다.

그렇다면, 106번지는 사용하지 못하는 공간으로 남는 것인가?

그림과 같이 Page에 데이터가 삽입 될 때 행을 삭제하는 단계도 포함한다.
즉, Offset Table의 주소값이 추가 될 경우 삭제된 데이터의 행을 삭제하고 하위 행에 존재 하고 있는 데이터가 삭제된 행의 주소값을 갖게 된다.


2. Extent

하나의 Extent는 연속하는 8개의 page로 이루어진다.

각 페이지는 한 개체에 속하며 한 가지 유형(데이터, 인덱스 등)이지만 Extent 는 최대 8개의 개체에 속할 수 있다.
그리고 Extent는 Mixed(혼합) Extent 와 Uniform(균일) Extent 로 구분 할 수 있다 

Uniform Extent 는 single object가 소유하며 Mixed Extent 는 최대 8개의 object가 공유할 수 있다.
 
일반적으로 새 테이블이나 인덱스에는 Mixed Extent의 페이지가 할당되며 테이블이나 인덱스의 페이지가 8페이지로 증가하면 후속 할당을 위해 Uniform Extent를 사용하도록 전환된다.
인덱스에 8개의 페이지를 생성하는 데 충분한 행을 가진 기존 테이블에서 인덱스를 
만드는 경우 인덱스에 대한 모든 할당 항목은 Uniform Extent에 있다.






출처 : http://laigo.kr/41





'프로그래밍 > 데이터베이스' 카테고리의 다른 글

NOSQL  (322) 2015.11.06
[ MSSQL ] 데이터의 물리적 구조  (4) 2015.06.02
[ MSSQL ] 데이터 파일(.mdf/.ndf)과 로그파일(.ldf)  (4) 2015.06.02
MSSQL vs MySQL vs Oracle  (318) 2015.04.10