OSS 진영의 GUI 라이브러리들의 우월성?

kenny007one의 이미지

MFC로 대변되는 Win32 진영의 마이크로소프트사의 GUI 라이브러리들은 과연 OSS 진영의 GTK+나 Qt보다 우월할까 아니면 저급한것일까?

물론 볼랜드사와 같이 독자적인 CLX와 같은 라이브러리도 있겠지만요. 예외로 칩시다.

여러가지 면에서 Win32 와 OSS, 대표적으로 X-window 시스템의 GUI 라이브러리들은 비교될수 있겠습니다.

기술적 측면, 마케팅 측면, 유용성 측면, 접근성 측면, 등등..

하지만 중요한건 직접 쓰는 유저, 즉 개발자가 느끼는 것은 어떠냐는 것이겠지요.

제가 개발자로서 개인적으로 느끼는 것은 분명히 최소한 제 주변에서는 Win32 플랫폼의 개발자에게 물어봐서 그런지는 몰라도 GTK+나 Qt같은건 이해하고 개발하기 어렵다! 는 것입니다.

특히 GTK+는 도통 난해하고 어지러운 이름들의 함수로 이렇게 C++도 아닌 C로 어려운 구조로 GUI 코드를 작성해서 개발하는 Linux 프로그래머들이 대단하고 경외스럽기까지 하다는데에 Win32 VC++과 볼랜드 씨빌더, 델파이 프로그래머들의 의견을 일치했습니다.

반면에 Qt는 좀 그래도 이해는 하고 쓸만은 하겠다는게 의견이었고요..

저도 그렇습니다. 대체 왜일까요? 한번 심각히 생각해볼만한 주제 같습니다.

단순히 개발환경의 차이때문에는 아닌거 같습니다. 라이브러리차원에서 개발해서 쓰기전에 이해하는데 어렵다는 것이니..

댓글

ydhoney의 이미지

우월성이라는 개념이 인터페이스의 우월성 문제인지 개발편의의 우월성 문제인지 문맥이 좀 어중간해서 잘은 모르겠습니다만..

이러나 저러나 문제는 "익숙함" 의 차이일 뿐입니다.

"Win32 플랫폼의 개발자" 에게 "GTK+나 Qt같은건" 어떻냐고 물어보면 당연히 "이해하고 개발하기 어렵다!" 라는 대답을 들을수밖에 없지요.

정 반대도 엇비슷하지 않나 하는 생각입니다.

특히나 Win32플랫폼(이것도 MFC기반을 이야기하는것인지 아니면 그냥 어플리케이션 개발자를 통틀어서 말하는것인지도 어중간하긴 하지만)개발자의 특성상 msdn에 의존하는 경향이 강하니 더더욱 저런 대답이 나올수밖에 없지 않나 합니다.

근데 개인적으로는 MFC나 Win32나 둘다 이상하고 어렵고 제멋대로라는 느낌밖에는 들지 않더군요. gtk는 어중간하고 qt가 제일 체질에 맞는 모양입니다.

1day1의 이미지

MFC 도 충분히 기괴(?)하죠.. ^^

F/OSS 가 함께하길..

khris의 이미지

꾸준히 Windows에서 GUI로 프로그래밍 해왔습니다.

지금은 C++로 Win32API나 MFC등을 이용해서 프로그래밍하고 있지만 전에는 쭈욱 VB 6.0을 써왔고요...

VB쓰다 C++로 Win32 프로그래밍을 하려니...

이건 아니라는 생각이 들더군요 -_-;;

Win32API는 두말할것도 없고, 그걸 허접하게 포장한 MFC...

지금은 QT와 .net을 배우고 있습니다.

차라리 .net은 낫더군요...

gtk는 별로 관심을 가지지 않아서 잘은 모르겠지만...

개인적으로 MSDN등의 정리된 레퍼런스에 익숙한 저로써는 gtk보다는 QT쪽이 좀 더 마음에 듭니다.

───────────────────────
yaourt -S gothick elegant
khris'log

warpdory의 이미지

익숙함과 관련된 문제라고 봅니다. 물론, win32 쪽이 MSDN 등의 레퍼런스 들을 보다 쉽게 구할 수 있지만, 사실 레퍼런스는 마음 먹었으면 얼마든지 구할 수 있습니다.

win32 개발자들이라면 MFC 나 .net, CLX 에 익숙해 있을 것이고
반대로 *unix 계열에서 GUI 쪽 개발자들이라면 예전이라면 motif, lesstif 에 익숙했을 것이고, 지금은 Qt, GTK 계열을 쓰겠지요.

GTK 같은 경우는 굳이 C 를 안 써도 됩니다. C++ 을 써도 되고, 자바를 써도 되고 등등...

물론, 각 언어나 라이브러리를 지원해주는 IDE 의 편의성이라든가 도움말 기능 등은 차이가 있을 수는 있겠죠. 물론, 이걸 이떻게 받아들이냐 하는 것은 주관적인 것이고요.


---------
귓가에 햇살을 받으며 석양까지 행복한 여행을...
웃으며 떠나갔던 것처럼 미소를 띠고 돌아와 마침내 평안하기를...
- 엘프의 인사, 드래곤 라자, 이영도

즐겁게 놀아보자.

saxboy의 이미지

GTK나 QT가 이해하기 어렵다는 것보다는 사용해 본 적이 없기 때문에 낯설다는 것이 좀 더 정확한 표현일 것 같습니다. OSS 진영의 GUI 라이브러리와 Win32-MFC 계열을 비교하기 위해서는 양쪽에서 모두 작업을 한 경험이 있는 분께 질문을 드려보는 것이 맞겠지요. kenny007one님이 표본으로 사용한 샘플이 너무 편향된 집단이었기 때문에 그런 답을 들었던 것은 아닐까요. :-)

사실 제 주관적인 느낌으로는 QT만큼 잘 정리된 위짓셋은 그다지 흔치 않은 것 같습니다. GTK도 한번 익숙해지면 굉장히 편리하지만 처음 배우려면 조금 고생을 해야 합니다. 저도 아마 glade 가 내주는 샘플코드가 없었다면 GTK를 배우지 못했을 것 같습니다. 아무래도 QT만큼 친숙한 느낌이 들기는 어렵죠. gtkmm과 QT도 역시 저는 QT가 조금 더 익숙해지기 쉬운 느낌이 아닌가 합니다.
MFC도 단순히 위짓만 놓고 본다면 간단한 편이지만, 프레임워크 전체를 이해하기에는 굉장히 어려운 라이브러리라고 저는 생각하는데, VC++이라는 de facto standard 툴 덕분에 그 복잡함이 많이 상쇄되어 보이는 것은 아닐까 싶습니다. 사실 OSS계열에는 이렇게 일원화해서 교육을 시켜주기에는 너무 툴도 라이브러리도 많지요.

곧 위짓셋이 이해하기 편리한가 아닌가는 위짓 자체의 코드보다는 그 위짓들이 작동하도록 환경을 만들어주는 프레임워크가 얼마나 간편하게 구성되어 있는가의 관점에서 생각해야 한다고 생각합니다. 사실 list box 나 edit 같은 컨트롤들의 사용법 자체는 어느 라이브러리를 살펴보아도 다 비슷하기 때문이지요. 아... 그러고보니 GTK는 이런 놈들마저도 조금 복잡하긴 하군요. QT의 경우는 라이브러리 자체가 이런 프레임워크를 인식할 필요가 없도록 구성되어 있고, MFC같은 경우는 이 프레임워크가 복잡하지만 VC++이 자동으로 생성해줍니다. GTK같은 경우는 glade가 만들어주기는 하지만 전체적으로 다른 툴과 코드에 비해 가독성이며 친숙함이 많이 부족합니다. 맥 계열은 어떤지 궁금하군요. 다시 말하면 라이브러리가 얼마나 사용하기 편리하게 구성되어 있는가는 툴의 도움없이 에디터와 컴파일러만으로 main 함수부터 작성하기 시작할 때 내부를 모르고 얼마나 빠르게 시작할 수 있는가의 문제가 아닐까 합니다.

확실한 것 한가지는 C++가 GUI에 꽤 편리한 언어인 것은 틀림없지만, 그 기반에는 항상 기괴한 C라이브러리가 존재하고 있다는 것이지요. MFC도 대부분의 클래스들이 단순히 win32 api를 랩핑하고 있을 뿐이라서 win32 api를 잘 알지 못하면 사용이 거의 불가능한 경우가 많습니다. GTK/QT와 xlib 의 관계도 크게 다르지 않습니다. 그리고 보통 그 관계를 대부분 파악하고 사용하는 분들은 위짓셋같은 것들은 초월해 계신 경우가 많더군요. :-)

ps. 글을 쓰다보니 문득 생각나는군요. wxWindows나 QT같은 크로스플랫폼 라이브러리와 관계없이 MFC, ATL따위를 리눅스에서 바로 빌드할 수 있는 오픈소스 환경은 없던가요? 전부터 무척 궁금했는데, 구글 사마마저도 모르시는 것 같아요. ATL, COM 까지는 몰라도 MFC 정도는 충분히 되어 있을법도 한데...

hys545의 이미지

saxboy wrote:
ps. 글을 쓰다보니 문득 생각나는군요. wxWindows나 QT같은 크로스플랫폼 라이브러리와 관계없이 MFC, ATL따위를 리눅스에서 바로 빌드할 수 있는 오픈소스 환경은 없던가요? 전부터 무척 궁금했는데, 구글 사마마저도 모르시는 것 같아요. ATL, COM 까지는 몰라도 MFC 정도는 충분히 되어 있을법도 한데...

mfc라면 wine에 포함된게 있습니다.,

즐린

cbycby의 이미지

kenny007one wrote:

제가 개발자로서 개인적으로 느끼는 것은 분명히 최소한 제 주변에서는 Win32 플랫폼의 개발자에게 물어봐서 그런지는 몰라도 GTK+나 Qt같은건 이해하고 개발하기 어렵다! 는 것입니다.

밑에서 또 언급하셨듯이, 개발환경에 낯설어서 그런것이 아닐까 생각됩니다.

제가 예전에 Visual C++로 MFC 프로그래밍등을 할때와 지금 Qt로 프로그래밍할때와 비교를 하면
생산성 및 개발 편의성에서 확실히 Qt가 앞선다라고 감히 말하고 싶습니다.

MFC를 해보셨다면 아시겠지만, MFC내에 감춰진 많은것들은 깊게 공부를 하기전까지는 소위말하는 Copy & Paste로 해야하는 어려움이 있지만,

Qt의 경우 내가 생각하는것이 이것일꺼야 라고 생각하면 문서에 대부분 존재하고, 소스코드를 읽어내려가는것도 굉장히 쉽습니다.

지금은 윈도우 프로그래밍 역시 Qt로 할정도입니다.

http://www.korone.net QT 커뮤니티 사이트

purewell의 이미지

wx* 라이브러리는 어디로 간 것이죠?

_____________________________
언제나 맑고픈 샘이가...
http://purewell.biz

logout의 이미지

이런 문제는 기회비용의 측면에서 생각했으면 좋겠습니다. 성능은 사실상 큰 문제가 아닙니다. 왜냐하면, 좋은 api도 많이 안쓰이면 그다지 쓸모가 없고, 성능이 떨어지는 api라도 많이 쓰이면 유용하기 마련입니다.

기회비용의 측면에서 보면 윈도우즈쪽 개발자들한테서 오픈소스 GUI 툴킷에 볼멘소리가 나오는 것은 당연합니다. 새로 또 배워야 하니까요. 게다가, 오픈소스 툴킷들이 성능이 충분히 좋다고 하더라도 현재 사용자 베이스가 얼마되지 않는 상황에서 오픈소스 툴킷을 익혀봐야 얻을 수 있는 이득은 많지 못합니다. 따라서 투자한 노력에 비해 얻을 수 있는 이득을 합쳐보면 적자가 나는 셈이지요. 그러니 그 시간에 윈도우즈 개발자는 새 툴킷을 배우기보다 다른 일을 하고 싶어할테고 오픈소스 툴킷을 배우지 않는 이유로 여러가지 핑계를 돌리기 마련이겠죠. :)

"I conduct to live,
I live to compose."
--- Gustav Mahler

mandami의 이미지

win 32api를 먼저 배웠지만 java swing과 qt가 배우기 훨씬 쉽더군요. 쓰기도 간편하고...

rhizome의 이미지

Win32 api나 MFC는 사용해 보지 않아서 모르겠지만, Gtk+와 비교하면 응용 소프트웨어를 만드는 프로그래머에게는 Qt가 편리한 것 같습니다. 문서화도 더 잘 되어 있구요.

그리고 리눅스와 윈도우즈 중 어느 한 쪽에서 Qt만을 이용해 코드를 만들면 다른 쪽에서도 동일한 기능의 프로그램을 얻게 된다는 점에서 아주 강력한 장점을 가지고 있는 것 같습니다.

거짓말이 없다는 것은 현대성보다도 사상보다도
백배나 더 중요한 일이다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.