본문 바로가기
Programming/WPF

WPF란? - Windows Presentation Foundation

by 곰네Zip 2022. 7. 29.

WPF를 떠나 자바로 전향하면서 WPF에 대해 적기 위한 카테고리.

C#개발자분들은 WPF는 한번쯤은 들어봤을 녀석. 나온지는 오래되었다. 내가 2009년에 WPF개발을 시작했으니.. 

 

먼저.. WPF는 Windows Presentation Foundation임. 윈도우에서 표시되는 모든것의 기초다. UI를 위한 프레임워크. 매우 강력한 UI프레임워크다. 그때나 지금이나.. UI에 투자해야하는 시간이 엄청 많은게 클라이언트 개발인데.. (하지만 사람들은 UI를 쉽게보지...) WPF는 개발자들이 UI에 투자해야하는 고통을 획기적으로 줄여주었다. WPF는 .NET Framework위에서 돌아가므로 .NET Framework가 필요하다. (물론 WPF는 .NET Framework가 아닌 .NET에서도 살아있는다. 이걸 없앨 수 없지..)

 여튼.. .NET framework가 필요한 것이.. 초창기 WPF의 약점이었다. Windows XP SP3, Windows 7부터는 .NET Framework가 기본으로 탑재되어 그 약점을 없애주었지만.. 초기에는 당시 기준으로 엄청 무거운 .NET Framework를 설치해야했으니. 배포하는 입장에서 선택하기 엄청 어려웠다. WPF어플리케이션은 진짜 수kb~수십mb인데.. 그걸 위해 수백메가 되는 framework를 따로 설치해야했었으니...

 반대로 MFC의 경우 런타임이 수메가~수십메가 수준이었다. 물론 어플리케이션은 수메가 단위로 시작했지. 배포하는 입장에서는 WPF보다는 기존의 MFC어플리케이션을 더 선호했었다. (UI 생산성은 WPF가 압도적인데.. 그때야 뭐.. 일정은 사람을 갈아넣어서 채웠으니까.. 야근수당도 없었고.. 야근 많이하면 성실한 사람이라는 기준을 가진 조선시대에도 안통할 관리자들이 다수였으니..)

 여튼.. WPF는 윈도우에서 UI를 제공하기 위한 매우 강력한 프레임워크다. 

 WPF를 잘 다루기 위해서는 xaml을 알아두면 좋다.  WPF Tutorial이나 MS페이지, 또는 구글 검색하면 너무나 많은 xaml태그들이 나온다.

 그리고 WPF의 장점 중 하나는 MVVM패턴을 적용하면 매우 생산성이 좋다는거다. 블렌드를 사용하여 xaml디자인도 가능하다.  Microsoft Blend에 대한것은 여기 참고. 블렌드만 전문적으로 하는 블렌더들도 계셨었는데.. 요즘은 잘 안보이시는듯.. 굳이 블렌더가 아니더라도 xaml을 잘 다루는 UI디자이너가 있으면 꽤나 유용하다. 

UI와 로직 개발을 동시에 할 수 있다!

 위 그림처럼(그림 표현력이 좀 부족합니다..) xaml쪽에서 UI디자인 및 이펙트 처리를 하는동안 비즈니스 로직을 구현할 Viewmodel(이하 VM)을 담당할 개발자가 동시에 같이 개발 가능하다! 

 WPF에서 중요한건 UI와 VM이 어떻게 서로 상호작용할 수 있느냐인데..

 이건 커맨드와 바인딩 두개로 상호작용 한다. WPF개발할 때, 요거는 핵심이다. 

 커맨드 : Action을 전달

 바인딩 : 상태값을 전달

 

 예를들어 다음과 같은 로그인 화면이 있다고 하자.

 여기서 사용자가 'login'버튼을 눌렀다. 그러면 ViewModel(이하 VM)에서는 로그인에 필요한 동작을 수행해야한다. 무언가로 엮여있을 뿐, 전혀 다른 개체인 UI(xaml)과 VM인데, VM에서는 어떻게 UI에서 버튼을 누르는 동작이 수행되었는지 알 수 있을까?

 그러한 동작을 연결해주는 연결고리가 커맨드다.

 로그인을 수행하려고 하면 사용자가 입력한 ID와 패스워드를 알아야한다. 그것은 커맨드의 파라미터로도 전달이 가능하지만, 다른 방법으로 VM에서 UI에 입력된 값을 알 수 있다. 그 값을 알 수 있게 해주는 UI와 VM간의 또다른 연결고리가 있다. 그 연결고리가 바인딩이다. 바인딩은 UI와 VM간에 값을 연결해주는거.

 추가로, 요즘 로그인 화면에는 ID저장 체크박스가 있고, 그걸 체크하면 다음번에 로그인할 때, ID가 값이 이미 들어가있다. UI가 그걸 일일이 찾아서 표시하는게 아니라, VM에서 저장된 ID값을 읽어오고, 그걸 바인딩된 속성에 값을 할당하면, UI에서는 그 값을 알 수 있다. 물론 VM에서 UI에 바인딩 된 속성의 값이 변경되었다는걸 알려주기위해 PropertyChanged이벤트를 발생시킨다. (자세한건 다시 포스팅하겠다.)

 쓰다보니 WPF에 대해서 좀 길게썼네..

 

 여기에다가 WPF관련된 내용들을 조금씩 써내려가볼까 합니다.

 처음 시작하시는 분들에게 도움이 되었으면 해서 ㅎㅎ

 

반응형

댓글