티스토리 뷰
Mono 데스크탑 응용 프로그램 개발 3가지 방법
클라이언트 응용 프로그램 또는 데스크탑 응용 프로그램을 Mono로 만든다면, 어떤 방법으로 만들면 좋을까? 이 세 가지 방법을 알아본다.
1. System.Windows.Forms
System.Windows.Forms(일명 윈폼-WinForm)으로 GDI(그래픽 장치 인터페이스(Graphics Device Interface)의 APIs를 객체지향적으로 제공하는 것을 일컷는다. 이제 대한 자세한 설명은 GDI+ 링크를 참고 하기 바란다.
그러나 Mono 환경에서 Windows Forms 개발은 사용자에게 좋은 사용자 인터페이스를 제공하지 못한다.
-
virtual OnPaint(PaintEventArgs e)
가 적절하게 동작하지 않는다.
화면의 창 사이즈를 변경할 때 새로 고침 영역(Update 영역)이 동작하지 않는다. 그래서 창에 아무 것도 표시가 되지 않는다. 창의 업데이트가 필요한데,void Update()
가 화면을 제대로 그려내지 못한다. -
레티나(Retina) 디스플레이를 지원하지 못한다.
레티나 디스플레이를 제공하지 못하기 때문에 이미지와 폰트가 투박스럽게 보인다. 레티나 디스플레이에서 레티나를 지원하지 않는 응용 프로그램은 사용자에게 그다지 사랑 받지 못하는 게 현실이다. -
성능 문제
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#)은 아직 믿고 사용하기 섣부르기는 하겠지만, 규모가 작은 응용 프로그램에서는 좋은 대안이 될 수 있다.
'Mono' 카테고리의 다른 글
[mono] Mono 웹 서버와 OWIN 웹 서버의 크래시 이슈 패치 (0) | 2020.05.05 |
---|---|
[mono] mono-service 버그 패치 (0) | 2019.10.14 |
[MonoDevelop] 두 번째 한글화 버전 승인완료 (0) | 2016.01.28 |
[MonoDevelop] v5.7.2.2 한글 버전 배포 공지 (0) | 2015.02.25 |
- Total
- Today
- Yesterday
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
- TFS
- MEF
- Managed Extensibility Framework
- 비주얼 스튜디오 2010
- test
- TFS 2010
- .NET Framework 4.0
- LINQ
- 팀 파운데이션 서버
- testing
- ALM
- c#
- .NET
- Team Foundation Server
- Visual Studio
- Silverlight
- 비주얼 스튜디오
- Team Foundation Server 2010
- monodevelop
- Visual Studio 11
- github
- umc
- ASP.NET
- 엄준일
- Visual Studio 2008
- mono
- Visual Studio 2010
- POWERUMC
- 땡초
- Windows 8