임베디드 환경 프로젝트에서 랭귀지 선택의 귀로에 서 있습니다. c가 좋을 까요? c++이 좋을까요 ?

swunk의 이미지

arm9프로세서에 리눅스를 포팅하여 장비를 개발하는 프로젝트에 참여하게 되었습니다.
제가 맡은 부분은 해당 시스템의 스테이트 머신을 관리하는 프로그램 입니다. 좀더 자세하게 말씀드리면... 수행되는 기능이 몇개가 있는데 지금 해당 시스템이 어떤 기능을 수행하고 있는지 파악하고 사용자 입력에 따라 해당 기능을 수행시키는 역할을 하는 프로그램입니다.

개발에 앞서 기능확인을 하다보니 꽤 복잡한 스테이트 머신이 나올것 같고, 또한 추후에 확장 되야 하는 기능들도 많을것 같기도 해서 애시당초 설계를 제대로 해야 할거라고 판단을 하고 그래서 UML 과 design pattern등을 공부해서 (처음하는건 아니고 예전에 잠시 했었는데 다시 스터디를 좀해서) 설계를 제대로 하고 구현을 하려고 합니다.
그렇다면 UML 로 설계를 하면 일단 object-oriented 방법론을 써서 설계 및 구현을 해야 될것이고 그렇다면 개발 언어도 c++ 혹은 java 중에서 선택을 해야 하는데 일단 해당 시스템에 virtual machine이 안올라가기 때문에 java 는 고려 대상에서 제외되고 c++로 구현을 해야 될것 같습니다.

그런데 문제는 개인적으로 c++은 많이 사용을 안해 봤고 c를 이용한 절차적 언어에 친숙한 상태이고 또한 주위에서도 임베디드 쪽 개발은 웬만하면 c를 권장하더라구요...리소스가 많이 제한되어 있기 때문에...반면에 몇몇 분들은 arm9정도 되면 시스템 자원은 빵빵하고 웬만한 데스크탑 환경이라고 생각하면 된다고 하더라구요...그래서 c++로 한다고 해도 시스템 측면에서는 그렇게 부담되지는 않을것이라고 하더군요...

저한테 주어진 시간은 약 3개월 정도 입니다. 사실 저에게 익숙한 c 언어로 개발한다고 하면 3개월이면 그렇게 모자란 시간은 아닌데 추후 확장되는 부분을 고려하면 설계 부분에 좀 치중을해서 c++로 한번 해 보고 싶기도 하구요..또한 요번 기회에 UML/design pattern등을 스터디 해보고 싶은 생각도 있습니다.

지금 이런 상황에서 고민을 하고 있는 중이구요...제가 경험이 많은것도 아니고 해서 고수님들께 자문을 구합니다.

thyoo의 이미지

driver가 아니라면
STL, exception, RTTI없이 C++쓰는 게 생산성이 높습니다만,
C++에 익숙하지 않다는 리스크를 감당할 수 있느냐는
누가 얘기해 줄 수 없읍니다.
부담스러우시면 그냥 C로 하세요.
납기 못 맞추는 것은 절대악입니다.

귀로 -> 기로(岐路)
___________________________________
Less is More (Robert Browning)

___________________________________
Less is More (Robert Browning)

saxboy의 이미지

UML 과 C는 별개의 문제인것 같은데요. UML 디자인을 C로 구현할 수 없다는 생각은 편견 아닐까요.
STL을 쓸수 있다면 몰라도 그렇지 않다면 C++로 해도 별로 장점이 있다는 생각은 들지 않는군요.

프로그램메모리가 어느정도 될지는 몰라도 C++을 사용하면 바이너리가 커진다는 사실은 염두에 두셔야 할 것 같습니다. NAND부팅이라면 용량때문에 고생하지는 않겠지만, NOR를 사용한다면 곤란한 상황이 생길수도 있을테고요. 롬이라면 더더욱 고생할 수도 있겠네요.

swunk의 이미지

UML로 모델링을 하고 구현은 c로 한다...
물론 c를 써서 객체지향적으로 구현을 할 수도 있지만 그럴꺼면 c++을 사용하는 편이 훨씬 좋은거 아닌가요?
UML 2.0 부터는 객체지향 방법론만을 위해서 UML이 존재 하는것은 아니라고는 하긴 하던데..

일단 모델링 자체가 객체단위로 모델링을 하게 되고 그런 설계도를 가지고 구현을 한다면 구현 자체도 객체지향적으로 해야 되지 않나 하는 생각이 듭니다.
그렇다면 c++이나 자바같은 OOPL을 쓰는 편이 좋을것이구요...

예전 쓰레드 중에 "c로 객체지향 적인 구현을 할 수 있는가 그렇지 않은가"를 따지는 것과는 별도의 문제라고 생각합니다만...

댓글 달기

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