티스토리 뷰

Mono 데스크탑 응용 프로그램 개발 3가지 방법

클라이언트 응용 프로그램 또는 데스크탑 응용 프로그램을 Mono로 만든다면, 어떤 방법으로 만들면 좋을까? 이 세 가지 방법을 알아본다.

1. System.Windows.Forms

System.Windows.Forms(일명 윈폼-WinForm)으로 GDI(그래픽 장치 인터페이스(Graphics Device Interface)의 APIs를 객체지향적으로 제공하는 것을 일컷는다. 이제 대한 자세한 설명은 GDI+ 링크를 참고 하기 바란다.

그러나 Mono 환경에서 Windows Forms 개발은 사용자에게 좋은 사용자 인터페이스를 제공하지 못한다.

  1. virtual OnPaint(PaintEventArgs e) 가 적절하게 동작하지 않는다.
    화면의 창 사이즈를 변경할 때 새로 고침 영역(Update 영역)이 동작하지 않는다. 그래서 창에 아무 것도 표시가 되지 않는다. 창의 업데이트가 필요한데, void Update() 가 화면을 제대로 그려내지 못한다.



  2. 레티나(Retina) 디스플레이를 지원하지 못한다.
    레티나 디스플레이를 제공하지 못하기 때문에 이미지와 폰트가 투박스럽게 보인다. 레티나 디스플레이에서 레티나를 지원하지 않는 응용 프로그램은 사용자에게 그다지 사랑 받지 못하는 게 현실이다.

  3. 성능 문제
    Windows Forms 개발은 윈도우(Windows) 운영체제 환경이 아니라면 응용 프로그램의 Drawing 성능이 매우 느리다.

2. Gtk#

Gtk\#은 오픈 소스로 제공되는 그래픽 라이브러리를 C# 버전으로 제공한다. Gtk+와 Gnome 2 기반이며, 아직 Gnome 3 버전을 바인딩한 C# 버전은 제공하지 않는다.
Gtk#은 Windows Forms와 개념적으로 다른 부분이 많다. Gtk#에서는 Model & View 패턴을 자주 볼 수 있다. 예를 들어, Store 클래스에 따라 View가 달라지는데 ListStore냐, TreeStore냐에 따라 View를 다르게 랜더링 한다.

하지만, Gtk를 C# 버전으로 Adapting 한 Gtk#을 사용하려고 한다면 충분히 고려해야 할 것이다. Gtk#은 아직 해결되지 않은 버그들이 너무 많다. Gtk#으로 개발을 하고자 마음 먹었다면 개발 중에 막히더라도 인터넷을 검색하면 답변이 달리지 않은 questions들이 많다.

3. Glade#

Glade#은 Gtk#의 서브셋(Subset)이라고 한다, Glade#의 전신인 Glade을 사용하여 사용자 인터페이스를 디자인 할 수 있는 디자이너를 제공한다. Glade은 XML로 저장되고, 이를 MonoDevelop에서 Import해서 사용할 수 있다.

좋은 대안이 될 수 있겠지만, 단방향 import만 지원하기 때문에 prototype 개발에는 적합하지 않다고 생각한다.

결론

크로스 플랫폼에서 System.Windows.Forms.Form은 너무하다 싶을 정도로 윈도우에서 표현해 내는 것 만큼 표현하질 못한다. 특히 눈이 높은 맥 사용자라면 아마 쓰레기 취급을 할 지도 모르겠다.
그렇다면 Gtk 가 대안이 될 수 있는데, MonoDevelop 개발툴도 Gtk#을 이용하여 개발되었다. 때문에 MonoDevelop도 그래픽 표현에 버그가 종종 눈에 띈다. 그리고 pango# (pango-폰트 처리 라이브러리) 도 일부 플랫폼에서는 한글 처리를 완벽하게 표현하지 못한다.

응용 프로그램 개발에 Gtk#(Gtk가 아닌 Gtk#), pango(pango가 아닌 pango#)은 아직 믿고 사용하기 섣부르기는 하겠지만, 규모가 작은 응용 프로그램에서는 좋은 대안이 될 수 있다.

댓글