C 소스를 Java로 컨버팅하는 방법을 알고싶습니다.

dwkim70의 이미지

안녕하세요.

제가 어제부터 시작한일이 기존의 C 소스 프로젝트를 Java로 컨버팅하는 일인데요.

기존 프로젝트를 완전히 이해하고 있는것도 아니고 Java를 잘하는것도 아니어서

시작하기전에 확실한 방법론을 찾아 시작하려구 합니다.

회사일이기 때문에 작업할 시간이 그리 넉넉하지도 않구요.

c2java(http://www.soften.ktu.lt/~stonis/c2java/) 라는 프로그램이 있지만

기계적인 변환이라 적당하지 않은거 같구요.

C소스를 Java로 컨버팅 하는 하우투 문서나 방법을 알면 알려주세요.

그럼 더운데 수고하세요.

mach의 이미지

저같으면 이렇게 하겠습니다.
1. eclipse로 자바 개발환경구축
2. 디자인패턴(자바관련 구현 예제 다수 포함한 책구매)
- 디자인패턴중 어떤 패턴을 사용하면, 기존 C 프로그램을 효율적으로 재구성할 수 있는지 검토하는것이 중요하다.
3. 1,2의 내용을 1주정도 연습
4. 3과 동시에 기존 C프로그램 분석(모듈단위로 체계화 해서 잘 분석해본다)
- C프로그램에서 코드 세세한 내용보다는 전체적인 흐름을 파악하는것이 중요하다.
- 즉, 분석은 숲에서 나무로의 접근을 명심한다. 구현은 프레임웤이 구축되었다면, 대체로 나무에서 숲으로 가게 되겠지만.
- 디자인패턴에서 제시된 가장 적합한 패턴을 적용할 것을 검토해본다.
* C에서 자바로 전환하게 되는 경우에는 대체로 성능보다는 유지보수나 포터빌리티를 강조하는 경우가 많으므로 작은 성능에 집착하지 않도록 한다.

5. 자바 콤포넌트로 구성할 수 있는 것과, 도저히 자바로 포팅하기 어려운 모듈을 분리한다.
- 분리가 잘 안되는 것은 체크해놓고 지체하지 말고 다음 모듈로 나간다.
- 분리가 안된것은 재차 2-3회 살펴 보고, 그래도 안되면 C로 라이브러리를 구축하여 JNI로 연동할 생각을 한다.

6. 자바 콤포넌트로 포팅가능한 모듈을 콤포넌트로 구현해간다.
- 모듈은 구현과 동시에 테스팅 프로그램을 만들어 단위 테스트해나간다.
- 자바 콤포넌트가 점점 늘어나게되며, 일의 범위가 축소되는것을 느껴간다.
- 전체적으로 자신의 콤포넌트가 늘어가게되며, 자신의 라이브러리 시스템이 만들어지는 것을 실감하도록한다.
- 또한, 모듈들중 일반적인것(?)들은 대체로 기본 콤포넌트에 있을 수 있으며,
또한 공개 콤포넌트 라이브러리등으로 다수 존재하므로 전부 구현할 필요는
없을것이다.(풍부하다고 생각해도 좋다)
- 공개 콤포넌트들중 소스가 없는것도 있으나, 대체로 디컴파일러를 돌려 소스를 볼 수 있는 경우가 많다.물론 디컴파일 안되는것도 있고, 이런것은 보통 상용이다. (라이센스문제는 논외로 하겠습니다.)

7. 자바 콤포넌트로 포팅이 어려운 모듈을 JNI를 사용해서 인터페이싱 한다.

8. 시스템을 연동해 나가기 시작한다.
- 자신이 현재까지 구축한 콤포넌트 조각들을 모아 조립한다는 기분으로 연동한다.

9. 연동 테스트를 해나간다.

10. 디버깅 및 유지보수를 계획한다.
11. C로 구현되어 JNI로 연동한 일부 라이브러리을 자바로 포팅할 수 있는지 재차 검토해보고 6-10을 재시도한다.

* 제가 예전에 시도했던 방법입니다. C로 구현되었던 모시스템을 자바로
포팅(?)할때 시도한 방법입니다. 사실 포팅이라기 보다는 새로만들었지만......
* 개인적으로 아직도 자바는 별로 안좋아 하지만, 고객이 요구하면 어쩔 수 없는
경우가 있겠지요. 하여간 건승하시길~

------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.

dwkim70의 이미지

mach님 답글 감사드립니다.
과분하게 자세한 답글에 마음이 아주 뿌듯합니다. :lol:
즐거운 주말 보내세요.

댓글 달기

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