C와 JAVA 비교

kash0921의 이미지

C와 JAVA를 비교 하고 싶습니다.

C로 생각하여 그 생각을 JAVA로 구현 하고 싶을때 JAVA의 특성상 그 생각을 정확하게 표현하거나 쓰지 못하는 경우가 어떤 때가 있을지 알아보고 싶습니다.

아니면 그 반대로 JAVA로 생각하여 C로 표현하고 싶을때 어떠한 문제점들이 있어 그 생각을 제대로 구현하지 못하는경우도 가능합니다.

어떤 경우들이 있을까요?
어떤 프로그램을 짜실때 C나 JAVA중 하나를 결정하려 할때 왜 그런 결정을 내렸는지도 이유가 되지 않을까 생각이 듭니다.

조금 추상적인 질문인지 아닌지는 잘 모르겠습니다만
생각하신바가 있으면 알려주시면 고맙겠습니다.

divetou의 이미지

C와 자바는 엄연히 다른 언어입니다.

가장 큰 차이점은 자바는 객체지향언어라는 것이지요.

객체지향언어가 어떻다.. 라는것을 설명하기는 힘들 것 같고, 관련정보를 한번 찾아보시기 바랍니다.

왜, 또는 어떨때 객체지향 언어를 이용해서 프로그래밍 하는지 찾으실 수 있을 것입니다.

그리고 자바는 J2SE, J2EE등으로 나뉘어져 있습니다. 아, J2ME도 있군요.

아뭏든, 자바는 J2EE로 엔터프라이즈 컴포넌트 영역에서 확고한 위치를 차지하고 있습니다.

이에 반해서 C는 고급언어이면서 가장 하드웨어에 가깝다는 장점을 가지고 있습니다. 따라서 높은 퍼포먼스가 필요한 프로그램들이나, 임베디드 환경에서의 프로그램들은 많은 수가 C로 만들어져 있죠.

음.. 주저리주저리 쓰다가 그만 써야 겠습니다.

제생각엔 이런식으로 C와 자바 두가지만 놓고 비교하는 것보다 먼저 OOP가 무엇인지 아는것이 중요하고, 그다음에 C, C++, JAVA, C#등 여러 언어에 관한 정보를 찾아보시는게 나을것 같습니다. ^^;

다른 분들이 좋은 답변 많이 달아주실 것 같습니다. :)

==============================
꿈꾸는소년

divetou의 이미지

관련 자료를 보다가 여러 언어들의 Performance를 비교하는 자료를 찾았습니다. (주제와는 조금 다른것 같지만요.^^; )

http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprt_computer2000.pdf

여러모로 Python은 참 매력적인 언어인 것 같습니다. ^^;;

==============================
꿈꾸는소년

kash0921의 이미지

안그래도 저도 Googling하면서 이 자료를 보기는 했습니다. ^^

근데 제가 찾는 답이랑은 살짝 빗나가는거 같내요.

저 글이 말하는 거는 performance쪽인듯 보이는데 (Intro만 살짝 읽었습니다)
제가 생각해 보고 싶은건 C프로그래머가 JAVA프로그램을 짤때 (혹은 그 반대 경우) C프로그래머 입장에서는 당연히 맞다고 생각되는 경우가 JAVA로 프로그램 할때 그 생각이 적용이 되지 않는경우입니다.

저두 두 언어를 써보기는 했는데 어떤때는 C를 쓰고 어떤때는 JAVA를 쓰고 그렇게는 해보지 않았던듯 싶습니다.

프로그램 언어 속성이나 그 usuage를 제대로 파악하지 못하고 있어서 그러지 않을까 생각이 듭니다. ㅠ.ㅠ..

vacancy의 이미지

우선 Performance 측면의 얘기는
그다지 의미가 없을 것 같고요.

제 입장에서 C는 Assembly어나 기계어보다는
고급언어라고 할 수 있지만,
다른 언어들과 비교했을 때는 고급언어라고 보기 어려운 것 같네요.

사람이 생각할 수 있는 일반적인 프로그램들은
Java든 C든 웬만하면 작성할 수 있겠죠.
다만 Java의 경우가 Productivity가 훨씬 높을 거라고 생각합니다.
언어 차원에서 코드에 가하는 제한이 크기 때문에,
코딩 시의 버그나 실수를 C보다는 훨씬 쉽게 잡아낼 수 있죠.
그리고 OO가 가능하다는 잇점이 있고요.

그러나 편법[?]이 많이 필요한 프로그램들의 경우는
Java로 코딩하기 어려운 점이 많이 있습니다.
포인터들도 참조자로만 쓰기보다는 직접 제어할수 있게 해주고,
Casting도 때에 따라 비교적 마구 할 수 있게 지원해주는 C쪽이
그러한 상황에서는 유리한 면이 많이 있겠죠.

제 생각에는 시스템 프로그램을 하실 계획이 아니라면,
굳이 C로 코딩하실 이유는 없는 것 같네요.
Java가 언어만이 아닌 프레임웍 차원에서의 지원도 훨씬 많으니까요.

익명 사용자의 이미지

kash0921 wrote:
C와 JAVA를 비교 하고 싶습니다.

C로 생각하여 그 생각을 JAVA로 구현 하고 싶을때 JAVA의 특성상 그 생각을 정확하게 표현하거나 쓰지 못하는 경우가 어떤 때가 있을지 알아보고 싶습니다.

아니면 그 반대로 JAVA로 생각하여 C로 표현하고 싶을때 어떠한 문제점들이 있어 그 생각을 제대로 구현하지 못하는경우도 가능합니다.

어떤 경우들이 있을까요?
어떤 프로그램을 짜실때 C나 JAVA중 하나를 결정하려 할때 왜 그런 결정을 내렸는지도 이유가 되지 않을까 생각이 듭니다.

조금 추상적인 질문인지 아닌지는 잘 모르겠습니다만
생각하신바가 있으면 알려주시면 고맙겠습니다.

퍼포먼스에 대한 과장에 대해서는 잊으세요. 퍼포먼스라는 것은 문제 도메인이 어떤 것이 되느냐, 그것을 얼마나 이해하느냐에 따라 로레벨 프로그래밍언어를 사용하지 않아도 향상시킬 수 있는 것입니다. 예를 들면, 두개의 프로그래밍 언어가 있다고 가정할 때, 조금 더 하이레벨 프로그래밍 언어를 사용한다면 문제 도메인을 더 많이 탐색할 수 있는 시간과 도구들을 얻게 되기 때문에 문제에 대해 최적화를 시도할 수 있으며, 상대적으로 로레벨 언어를 사용하면 그런 시도가 어려운 것입니다. 물론, 동일한 로직을 프로그래밍 한다면 로레벨 언어가 빠를 가능성이 있지만, 항상 그러한 것은 아닙니다. 대부분의 프로그래머들이 그런 단계에 까지 도달해보지 못했기 때문에 로레벨 언어가 더 빠를 것이라는 착각을 하는 경우가 대부분입니다.

C와 Java는 하나는 로레벨 하나는 하이레벨입니다. 프로그래머가 충분한 역량이 되고 문제가 충분히 복잡하다면 당연히 하이레벨 프로그래밍 언어가 유리합니다. 단순한 예로 에러 핸들링만 봐도 그러합니다. Java는 OO 언어이므로 당연히 OO 프로그래밍을 한다고 할 때도 유리할 것입니다. 또한, C의 메모리 관리는 프로그래머가 해야 하지만 Java는 GC가 해줍니다. 쉽게 말해서 두 언어를 비교한다는 것 자체가 무의미 합니다. 물론, 비슷한 급 - 이를 테면, C vs Pascal, Java vs 다른 OO 등은 의미가 그런대로 있겠지만, C와 Java를 비교하는 것은 C와 어셈블리를 비교하는 것과 비슷하고 하겠습니다.

익명 사용자의 이미지

kash0921 wrote:
C와 JAVA를 비교 하고 싶습니다.

C로 생각하여 그 생각을 JAVA로 구현 하고 싶을때 JAVA의 특성상 그 생각을 정확하게 표현하거나 쓰지 못하는 경우가 어떤 때가 있을지 알아보고 싶습니다.

아니면 그 반대로 JAVA로 생각하여 C로 표현하고 싶을때 어떠한 문제점들이 있어 그 생각을 제대로 구현하지 못하는경우도 가능합니다.

어떤 경우들이 있을까요?
어떤 프로그램을 짜실때 C나 JAVA중 하나를 결정하려 할때 왜 그런 결정을 내렸는지도 이유가 되지 않을까 생각이 듭니다.

조금 추상적인 질문인지 아닌지는 잘 모르겠습니다만
생각하신바가 있으면 알려주시면 고맙겠습니다.

질문이 상당히 모호하네요...
C로 생각하여 자바의 특성상 그생각을 정확하게 표현하지 못한다는게...
그런경우가 있나요? 그렇게 느껴지신다면 오히려 그게 잘못된것 같은데...
C와 자바는 전혀다른언어아닌가요?
예를들면 자바프로그래머가 K라는 문제를 해결하는 C코드를 참조하여
자바로 구현한다고 합시다. 자바프로그래머가 고민해야 될것은 C코드에서
I -> J를 거쳐서 K라는 추상적 문제해결 방식을 자바로 구현하는것이지
문제를 해결하는 C코드 자체의 표현방식을 흉내낸다면 그건 잘못된것 아닐까요?
영어의 사랑고백(?)을 한국어로 흉내내 애인에게 써먹는다고 칩시다.
당연히 그내용을 한국어로 옮기는것에 고민해야지
영어라는 언어의 구조(예를들면 어순)를 한국어로 흉내내서는 말이 안되죠..

mach의 이미지

**제 경험상 얘기(상당히 주관적인)를 잠시 하겠습니다.

* 웹인터페이스 프로젝트다.("내 주변에서는 소위, SI성 작업을 프로젝트라고 부른다.")
1) 코딩? 자바로 하자!
- 왜? 참여인력 뜨고 나서, 유지보수 걱정하려면 자바가 그래도 낫다. C로 소설쓰면 유지보수 못한다.(하기 무지 힘들다)
- C로 하자는 얘기 나온다? 나이로 누르건, 직책으로 누르건, 수단과 방법을 가리지 말고 눌러서 얘기 못하게 한다.
2) 아~ 시스템 의존적인, 또는 성능이 아주 크리티컬한 모듈이 필요하다? 이를 악물고, 눈물을 머금으며 C로 인터페이스 만든다. JNI 보다는 C서버로 만든다. 프로토콜(TCP/IP)로 인터페이스 만든다.
왜? 유지보수 땜시.
3) 서버프로그램인데, 성능 크리티컬하지만 웬만큼은 참을 수 있단다? 자바로 짠다.
-왜? 흠 그런데말야,....원래 서버는 자바로 짜야.....

* 패키지다("소위, 내 주변에서는 비 SI성을 이렇게 부른다.)
1) 코딩 ? C/C++로 한다.
- 왜냐고 묻는다? 그래도 소설은 C로 써야 재밌다고.....
- 자바로 하자고 한다? 나이로 누르건, 직책으로 누르건, 수단과 방법을 가리지 말고 눌러서 얘기 못하게 한다.
2) 아~ 시스템 의존적인, 또는 성능이 아주 크리티컬한 모듈이 필요하다? 지긋이 눈을 감고 C/C++로 만들어야지 한다.
왜? 이유를 모르냐고 되묻는다.
3) 서버프로그램인데, 성능 크리티컬하지만 웬만큼은 참을 수 있단다? 그래도 서버는 C/C++아니냐고 되묻는다.
-왜? 그렇지만, ...원래 서버는 C/C++로 짜야.....

*끝으로
- 자바의 최강점을 포터빌리티로 봅니다.(포팅? 그거는 Sun이 대부분 한다. 때로는 특정 플랫폼 JVM 제작사....)
- C의 최강점을 퍼포먼스라고 봅니다. (포팅? 당연히 개발자가 해야한다.)

- 자바는 유지보수가 C보다 쉽다고 봅니다.
- C는 유지보수하기가 자바보다는 어렵다고 봅니다.

- C프로그래머 고수는 메모리관리 고수라고 봅니다.(때문에 학생은 C를 해야 합니다.)
- 자바프로그래머 한테 메모리 관리 얘기하면 욕이라고 봅니다.(때문에 업자는 자바를 해야 합니다.)

- 비지니스 로직 자바로 구현한다면 좋아 보입니다.
- 비지니스 로직 C로 구현한다면 답답해 보입니다.

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

댓글 달기

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