WPF 응용프로그램 수명 주기 - 묵시적 응용프로그램 생성



 업무에서는 사용하지 않지만 개인적으로 너무 끌려서(?) WPF를 공부하고 있다.  바쁘다는 핑계로 듬성듬성 공부하였더니 책 진도 상태는 맨날 그대로다.. 자! 마음 가다듬고 다시 시작해보자!!

내용은 "Programming WPF 사용자 경험(UX)을 바꾸는 기술 - 한빛 미디어" 책에 기술된 내용이다.

 대부분의 MFC를 공부하고 있는 사람들은 main 함수 즉, 프로그램의 진입점 함수가 어디에 정의되이 있는지 모를 것이다. 눈에 보이지 않으니 아무래도... WPF 에서도 대부분의 경우에 있어 main 함수를 컴파일러가 알아서 잘 만들어 준다.


WPF 프로젝트는 일반적으로 응용 프로그램(Application 클래스 인스턴스)을 정의하는 하나의 XAML 파일을 지정한다. 


(App.xaml 파일이 응용프로그램 즉, Application 인스턴스를 설정하는 XAML 파일이다.)


App.xaml 과 App.xaml.cs (코드 비하인드 파일) 에서 응용프로그램을 생성하며, 윈도우를 생성하고 보여준다.






위에서 응용프로그램을 정의하는 XAML 파일(App.xaml) 을 빌드 작업 속성으로 "AppllicationDefinition" 으로 설정하면 WPF는 Application 이 정의되어 있는 것으로 간주하고 다음과 같은 작업을 수행한다. 



1. WPF 는 ApplicationDefinition 프로퍼티가 설정된 클래스를 응용 프로그램 클래스로 인식한다.
2. Main 함수를 생성한다.
3. 응용 프로그램 클래스의 인스턴스를 생성한다.
4. 응용 프로그램 인스턴스의 Run 메소드를 실행 시킨다.
5. Run 메소드는 OnStartup 이벤트를 발생시킨다.


위에서는 보여줄 윈도우가 Application 파생 클래스에 정의되어 있는 경우이고, 윈도우가 XAML 파일에 정의되어 있다면(대부분의 경우) Application 인스턴스의 StartupUri 프로퍼티에 XAML 파일을 연결시켜 준다.



StartupUri 프로퍼티를 이용할 경우

1. WPF 는 Application 의 인스턴스를 생성하고, 이 인스턴스에 대한 참조를 Application.Current 속성에 대입
2. StartupUri 프로퍼티에 지정된 XAML 에서 UI의 인스턴스를 생성하고 보여준다.
3. Application 객체의 MainWindow 프로퍼티가 설정된다. (아마 위에서 만든 윈도우겠지!)
4. Application 객체의 Run 메소드를  호출하여 MainWindow 가 닫힐 때까지 응용프로그램의 실행 상태를 유지



 main 함수를 직접 작성할 일은 없겠지만 WPF 응용프로그램이 어떤 식으로 초기화되어 생성되는지는 알고 있어야겠다. 어차피 마법은 없다. 

Posted by six605
,