GUI 프로그램을 만들 경우에...

시지프스의 이미지

GUI 프로그램을 만들 경우에 처음부터 GUI로 만드는 방법과 코어를 CLI로 만들고 GUI를 덮어씌우는 방법의 장단점이 어떻게 될까요? 여기서 만드려는 프로그램은 사용자로부터 데이타를 입력 받아서, 적절히 처리한 후, 그 결과를 출력하는 프로그램입니다.

별로 복잡한 프로그램은 아닙니다. 예를 들면 사용자가 그래프를 마우스 등으로 그리면 그 그래프의 최단 거리를 찾아 주는 것 같은 방식입니다. (진짜로 이 문제를 푸는 것은 아니고, 그냥 예를 든 것입니다.) 굳이 GUI가 필요한 문제는 아닐 수도 있지만, GUI를 지원하는 것이 필요할 것 같습니다.

제가 생각해 본 코어와 GUI를 분리하는 방법의 장점은
1. 코어는 GUI 라이브러리의 라이센스의 영향을 피할 수 있을 것이다(?).
2. 많은 데이타에 대해 batch 실행이 가능하고,
3. 다른 프로그램의 출력과 연동 시키는 것이 가능하다.
4. 뭔가 설계를 고민한 흔적이 있어 보인다(???).

단점은
1. 괜히 프로세스의 수가 늘어난다.
2. 성능의 문제나 신뢰성의 문제가 있을지도 모른다(?).

제 생각의 오류나 빠트린 중요한 장단점은 뭐가 있을까요?

그리고 만약 분리하기로 결정했다면, GUI와 코어를 어떻게 연결시키면 좋을까요?
설마 exec("...")를 쓰는 건 아닐테고, IPC를 써야 할 것 같은데 제대로 써 본 경험이 없습니다.
절대로 자세히 설명해 주실 필요는 없고요, 방향만 가르쳐 주시면 찾아서 공부하겠습니다.

klara의 이미지

핵심 기능을 담당하는 부분을 라이브러리로 빼고, CLI및 GUI용 실행파일은 말그대로 인터페이스만 짜는 방법도 있겠지요.
그러면 언급하신 단점은 없어집니다.

semmal의 이미지

아주 적절한 bottom-up 이군요.

GUI의 연결은 가능하면 파이프처럼 쉽고 단순한 방법으로 하는게 좋을 것 같습니다.

Qt를 쓴다면 QProcess를 활용해도 되겠군요.
------------------------------
How many legs does a dog have?

------------------------------
How many legs does a dog have?

송효진의 이미지

엔진 부분을 so|dll 로 만들고,
CUI, GUI 로 씌우는건 어떨까요?

아니면 GUI 프로그램이지만 명령줄 실행도 가능한건 어떨까요?

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇 개 안돼요~
http://xenosi.de/

mightier의 이미지

­

cinsk의 이미지

두 process로 나눈다면, 어느 한 쪽이 문제를 일으켜도, 살아남을 수 있다?는 장점이 있습니다.

상황에 따라 불가능할 수도 있겠지만, GUI가 죽으면, CUI가 다시 살리는 등의 작업을 할 수도 있겠죠.

--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.