C++은 C의 확장?

mastercho의 이미지

관리자 알림 메시지: 이 글은 RisaPapa님의 http://bbs.kldp.org/viewtopic.php?t=27203 로부터 분리한 글입니다.

Quote:
C++은 위험적인 요소나 불필요한 요소를 많이 포함하고 있다고 생각됩니다. 제가 말하는 위험적인 요소는 프로그램 설계를 할때 후에 유지 보수면을 함께 고려하는 것이 쉽지 않고 한번 결정한 것으로 인해 유지보수를 할 수 없어 페기할수밖에 없는 최악의 상황이 나오지 않을까 하는 염려입니다. 아직까지 실력이 부족한 탓인지도 모르겠습니다. 반면에 C의 구문은 상대적으로 단순하고 특별히 고려해줄 필요가 없습니다. 하지만 C++에 비하면 재활용성이 아무리 고려를 하고 구상을 해도 많이 떨어지는 것 같습니다. 두 언어 모두 현재 널리 쓰이고 다른 언어가 굳이 필요할 만큼 나쁘지는 않지만 개선의 여지가 있고 약간 개선되었으면 하는 바램이 있습니다.

이말씀은 C++를 잘 몰라서 하는 말씀으로 이해하겠습니다

위에서 주장하신 말씀은 너무나 답답한 말씀이어서 ,
말이 튀어나갓다간 , 감정이 섞일수 있는 관계로 그만두겠습니다만

C++를 스스로 거의 잘 모른다고 말씀하시면서 너무나 잘아시는것처럼
단점을 꼽으셨는데 , 사실 그런 단점이 있는지 제대로 아시는지 궁금하네요
[꼽은셨던 단점은 오히려 C의 단점으로써 C++에서 오히려 극복이 된점입니다]

모르면 차라리 말을 하지 않는것만 못하다고 생각합니다

[원하시면 하나 하나 인용해서 반박해 드리겠습니다]

그럼

File attachments: 
첨부파일 크기
PDF icon J16.pdf193.41 KB
PDF icon n1457.pdf1.15 MB
파일 main.c72바이트
파일 lib.cpp3.53 KB

댓글

세벌의 이미지

voider wrote:

그 이름 어려운 아저씨는 c 에 많은 부분을 추가 해서 괴물 같은 언어를
만들었습니다.

만들때부터 처음 프로그래밍을 시작하는 사람이 c++을 배우려고 할것이라고는
전혀 예상 못했다고 생각합니다

숙련된 프로그래머에게 보다 강력한 언어를 제공하겠다는 야심찬 계획이었다고
생각됩니다.


이름 어려운 아저씨? Bjarne Stroustrup 말씀이신가요? C 와 C++ 중 어느 것을 먼저 배워야 하느냐는 질문에 그 분은 C++ 이라고 답한 것으로 알고 있습니다만...
cdpark의 이미지

akbar wrote:

따지고 보면 Scott Meyers 의 말과 매 한가지입니다.
문제는 위와 같이 오브젝트 파일이나 실행파일에 초기화 혹은 종료코드 들어갈 수 있도록 플랫폼이(플랫폼의 파일 시스템이) 보장하냐는 것이겠지요. 열악한 임베디드 환경을 제외한다면 이런 보장이 안되는 상황이란 그리 많지 않을 것 같습니다.

porting에 대한 문제의 대부분과 찾기 힘든 버그의 많은 부분이 이런 상식적으로 옳은듯한 가정"에서 시작됩니다.

굳이 C 쪽에 main 함수를 두고 싶다면...

prog.c:
   int CMain(int argc, char **argv)
   {
       blahblah...
   }

caller.cpp

   extern "C" int CMain(int, char **);

   int main(int argc, char **argv)
   {
      return CMain(argc, argv);
    }

식으로요.

버그헌터의 이미지

:(
저는 C++ 골수팬입니다.
C++은 C++일뿐입니다.
C++보다 C가 더 낫다고 하시는 분들에게 말하고 싶습니다. C++을 얼마나 아냐고?

C++을 실무에서 적용하며 설계때 적용한 패턴을 제대로 이해하고 유지보수를 하시는 분이라면 C 와 C++을 논하는 어리석은 일은 하지 않을 것입니다.
C는 C대로 C++은 C++대로 상황에 맞게 쓰면 그걸로 그만입니다.

소프트웨어 개발에 있어 language는 개발을 위한 툴에 불과한것이지..
뭐 대단하게 생각할건 아니라는것이지요...
하지만 개발을 위해서 툴을 극대화 시키는게 실력이 아닐까 하네요..^^;
(뭐~ 저의 주관적인 생각이긴 하지만 말입니다.)

woolary의 이미지

어떠한 언어를 사용하던 개발환경에 마추어서 최대의 개발 속도를 내는것이 가장 이상적이겠죠.의미없는 논쟁입니다. 단지 시스템 프로그램에서 C를 더 선호하는 것은 안정성의 문제아닐까합니다. 저도 C++을 이용해서 프로젝을 진행하다가 업체에서 반대를 해서 C로 다시 전환한 경우가 있습니다. 딱 한마디하더군요.
"이거 안정성 검증되었어요?, 어느 사이트에서 사용했어요?" -> "@@;"
알고 보면 C++도 안정적인데, 업체에서는 편견을 가지더군요. 물론 돈처리하는 곳이라서 이해는 하지만. 쩝. 그래서 그냥 생각접었습니다. 쩝.. ㅡㅡ;

kdoll의 이미지

일반적으로 C++을 사용하는 이유가
객체지향적 프로그래밍 부분의 상속때문에 사용할것이라고 생각이 됩니다.
(솔직히 상속부분을 제외하면 객체지향을 쓸의미가 없다고 생각합니다.)

C로도 이러한 객체지향적 모델의 상속성을 구현이 가능합니다만
문제가 되는것이 클래스 상속 계층을 만들듯 C로 그런한 구조 계층을 만들면서
작업하는 것이 상당히 많은 코드의 양을 동반해야 하기 때문에
그부분을 편리하게 작성할수 있는 C++을 사용하는 것이 좋곘지요

즉 일반적인 복잡한 클래스계층구조 (UI부분이 가장 적합한 모델이 되겠군요)
를 직접 작성하거나 그러한 C++라이브러리를 불러다 쓸 일이 없다면
굳이 C++을 사용할 필요가 없다고 생각합니다.

C++에 비교하여 C로 작성된 코드의 가장큰 장점은 속도보단
(C++컴파일러도 충분히 좋아졌다고 생각합니다.)
C++로 작성된 라이브러리는 반드시 C에서 불러다 쓰지 못하지만.
C로 작성된 라이브러리는 C++에서 얼마든지 쉽게 불러다 쓸수 있단 점
아닐까요
해서 시스템내에서도 C++보다는 C형태로 코드를 작성하는 것이겠죠.
제 짧은 생각이였습니다.

akbar의 이미지

...

saxboy의 이미지

the return of the flame war...

I'll be back 이라는 유명한 대사가 언뜻 떠오르는군요.
조만간 자바와 C++도 또 나오겠지요? ;-)

Darkcircle의 이미지

쭉 읽고 놀랬습니다 ㅡ0ㅡ;;
C나 C++이나 뭐 그렇다고 하지만 두 언어는 뭐든지 장점이 있고 단점이 있는법입니다. 흠 . . 전 그냥 자기손에 C가 익었다 그러면 C로 하면되고 C++이 익었다 그러면 C++로 짜면 되지 않느냐 하고 생각합니다.

여기 5페이지에 걸쳐서 열심히들 설명해주신 내용으로는 굳이 C++이 나쁘다 C가 나쁘다 할 하등의 이유를 발견할 수 없습니다. 오히려 다들 열심히 주장하신 내용들이 맞는 말보다는 모순점이 더 많다고 봅니다. 맞는말을 하기 위해서 그대로 모순적인 증거를 내놓으시니 분쟁이 끝이 없을 수밖에 없다는거죠. 서로 반박하는데 혈안이 되어있으니까요 :)

다들 잘 아시는 딱 두가지의 경우를 내뱉어보기로 하죠 :)
게임같은 경우 C++로 짜는건 이쪽으로 라이브러리가 많이 나왔기 때문에 편리성을 걸고 넘어가면서 일의 양을 줄이기 위해 하는겁니다. . . 이것들은 얼마든지 C로도 짤 수 있습니다. 단 할 일 없이 이짓을 또 할 필요가 없다는거죠 :)
물론 UNIX . . C로 짜여져 있습니다. 하지만 스트루스트럽의 인터뷰 글을 보신분들 아시듯이 UNIX . . . C++로도 짤 수 있습니다. 물론 미친 삽질을 할 필요가 없기 때문에 안하는겁니다. :)
어떤 상황이냐에 따라 C가 더 좋을 수도 있고 C++이 더 좋을 수 있다는거죠. 굳이 C 가 더 좋다 C++이 더 좋다 하는 식으로 양분화 되는 모습을 보니 좀 곤란하네요 . . . ㅡ_-) . . . ;;

이렇게 주저리주저리 떠들 바에야 차라리 그럴 시간에 책을 더 읽어보는게 낫다고 봅니다. 실전경험이 풍부한 사람의 경우 이론지식이 부족할 수 있기 때문입니다. :) 안 그런가요?

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

이한길의 이미지

수다맨 wrote:
쭉 읽고 놀랬습니다 ㅡ0ㅡ;;

저는 ... 이글을 읽으셨다는 것에 놀랬습니다.

이 글이 씌여지게 한 것은 제가 Risapapa님의 글에...
답글을 단 것에.. mastercho님이 이의를 제기하시어 시작되었는데...
저와... mastercho님은 이미 서로 한 오해를 해결하였는데...

이 글이 명예의 전당으로 오고.... 또 심심찮게 리플 달아주시는 분들이..
아직까지 있음이 참으로 놀랍습니다..

----
먼저 알게 된 것을 알려주는 것은 즐거운 일이다!
http://hangulee.springnote.com
http://hangulee.egloos.com

akbar의 이미지

...

rhizome의 이미지

음... 토론의 주제에서 좀 어긋나는 것인지 모르겠지만 여기에 올려서 많은 분들의 의견을 들어보는 것이 여러가지로 유익할 것 같아 글을 올립니다.

이전 까지는 그냥 재미로 책을 한 권(Jesse Liberty가 쓴 Teach Yourself C++) 읽고 어떻게 생긴 언어인가만 알고 있다가 재사용성에 잇점이 있다는 얘기가 많이 들려 오길래, 제 일에 한 번 써볼까 하고 요즘 Koenig와 Moo가 쓴 Accelerated C++이란 책을 아주 재미있게 보고 있습니다.

그런데 이쪽(객체지향과 C++) 관련 책들을 보는 중에 한 가지 이상한 점을 발견했는데, 그것은 이런 책들 속에는 객체지향의 단점에 관한 언급이 거의 없어 보인다는 것이었습니다.

이런 와중에 Eric Raymond가 쓴 The Art of UNIX Programming의 C++ 관련 부분(http://www.faqs.org/docs/artu/ch14s04.html#cc_language)을 읽다가 참고 문헌에서 재미있는 제목의 논문을 발견했습니다. 그 제목은

Does OO Sync With How We Think?(http://www.leshatton.org/Documents/OO_IS698.pdf)

인데 Les Hatton(http://www.leshatton.org/)이란 분이 IEEE software에 기고한 논문입니다. 내용 역시 상당히 흥미로운 것 같습니다.

한 번만 읽었기 때문에 그리고 제가 컴퓨터 공학 전공자가 아니라서 이 논문을 잘 이해했다고 장담할 수는 없지만 논문의 내용에 관해 짧게 정리하면, 이 논문에서는 비슷한 일을 하는 두 프로그램을 두 개의 독립된 그룹이 각각 C와 C++로 상당기간 개발하며 쌓인 자료를 근거로 두 언어의 장단점을 전체 소프트웨어 개발 기간 중 가장 비중이 높은 유지, 보수에 촛점을 맞춰 비교했는데 그 결과는 C++에 불리한 것으로 나와 있습니다. - 그냥 설을 푼 것이 아니라 측정을 통한 통계 수치를 근거로 제시하고 있네요. 특히 제가 C++을 일에 사용하는 것을 고려하게 된 이유였던 재사용성의 관점에서 볼 때에도 저자는 C++이 유리하지 않다고 주장하고 있습니다.

아울러 제목에서 암시된 것처럼 기억에 관련된 심리학 이론에 견줘볼 때 객체지향은 좋지 않은 방법론이라고 다소 암울(?)하게 까지 보이는 견해를 피력하고 있습니다.

이 논문을 읽고 나서 객체지향에 관해 약간의 의구심을 갖게 됐습니다. 객체지향 방법론에 익숙한 분들은 이 논문의 내용에 대해 어떻게 생각하시는지 궁금하네요.

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

vacancy의 이미지

OO가 여러모로 도움이 되는 것 같기는 합니다만,
현재 많은 OO의 요소들이 정말 쓰는게 좋은가, 하는
의구심을 학계에 남겨주고 있기도 하다고 알고 있습니다.
특히 클래스 상속의 경우가 심하다고 하더군요.

소프트웨어 공학쪽에서도 inheritance 보다는
많은 경우에 class내에 class를 포함하는 구조로 가는게
더 낫지 않은가 하는 얘기가 있는 것 같고요.

사실 inheritance 깊이가 깊어지면 디버깅 아주 피곤하죠. -_-
위의 논문도 주로 디버깅과 관련된 통계가 나온듯 하고요.
뭐 어쨌든 쓰기 나름이겠죠.
여러 OO의 요소가 코딩 자체와 가독성 면에서는 많이 도와주는 편이니까요.

사족을 달자면 C++이 아니고 Java나 C#이었으면
조금은 나은 결과가 나오잖았을까 싶기도 합니다.

Darkcircle의 이미지

akbar wrote:
수다맨 wrote:

...
물론 UNIX . . C로 짜여져 있습니다. 하지만 스트루스트럽의 인터뷰 글을 보신분들 아시듯이 UNIX . . . C++로도 짤 수 있습니다. 물론 미친 삽질을 할 필요가 없기 때문에 안하는겁니다. :)

UNIX 를 C++ 로 짜면 미친 삽질이라니...
도데체 이정도 수준으로 C++ 을 바라보다니...
장님이 코끼리 만지는 격인데
제가 만약 코끼리라면 그런 장님을 냅다 걷어찼을 겁니다.

이외 비슷하게 웹사이트를 제작하면서
PHP 나 ASP 처럼 스크립트언어로 하지 않고
C++ 로 제작하는 사람을 미친 놈 취급하는 글도 있는데
이런 식의 우물안 개구리 소견은 편견의 극치를 보여준다 하겠습니다.

전 C++ 자체에 대해 편견을 가지고 있지 않습니다.
왜 미친삽질이라는 과격한(!) 표현을 썼냐 하면 굳이 C로 이미 짜여져 있는 플랫품을 처음부터 다시 C++로 다시 짤 필요가 없기 때문입니다.
사실 기존의 소스코드에 대해 함수를 일일히 찾아다니면서 클래스화하고 public private protected 속성을 부여할 필요는 없습니다.
물론 재미삼아서라도 한다면 오히려 다른 개발자들에게 훨씬 이득이 될 수도 있겠지요. 어떤점에서 이득이 될지는 님이 더 잘 아실겁니다.
클래스로 구조화 하면서 얻는 이점은 단순지식으로는 함부로 말할 수 없음을 전 잘 알고 있습니다.

전 직접적으로 PHP나 ASP 같은 스크립트로 말고 C++로 웹 어플리케이션을 짠 것을 봤습니다.
C++로 짜는걸 미친놈 취급하는걸로 보는건 저도 님 생각대로 좀 문제가 있다고 봅니다. :)
C++로 짜게 되면 PHP, ASP로 짜는 그 이상의 수준에서 좀더 신경써야 할 부분을 섬세하게 짤 수 있다는 점에서
훨씬 이득입니다. 물론 기존에 필요한 라이브러리가 없다면 직접 코딩해서 만들어야 하는 문제점이 있긴 하겠지만요 :)
사실 지금 상황에서 C++에서 다룰 수 있는 라이브러리들이 얼마든지 있다는 것을 감안하였을때,
라이브러리에 대한 문제는 일단 없는것으로 봐야 하는것이 옳은것 같습니다. :)

문장을 객관적인 시각에서 그냥 편하게 보셨으면 좋았을것을 . . .
너무 한쪽에서 바라보셔서 울컥! 하신것이 아닌가 싶습니다.
어쨌든 한구절에 흥분하게 해드려서 죄송합니다. :)
화나게 해드릴 의도는 없었습니다.
갠적으로 C++ 자체에 대해 감정은 없습니다. C/C++을 다 쓰기 때문입니다.

---------------------------------------------------------------
폐인이 되자 (/ㅂ/)

yundream의 이미지

전 C든 C++이든 상관하지 않습니다.
얼마나 더 안전하냐, 얼마나 더 버그를 가질 수 있느냐도 마찬가지 입니다.
제품을 만들어내는 입장에서 "충분히" 안전하고, "충분히" 쓸만하면 그만입니다.
그런점에서 C와 C++모두 "충분한" 수준을 만족하기 때문에 상관하지 않습니다.

윈도우는 리눅스보다 보안에 취약하다.
리눅스는 프비보다 취약하다.
어쩌고 해도 저는 리눅스를 사용합니다.
설사 취약하다 하더라도 리눅스의 사용용도인 "개발"과 웹브라우징,
멀티미디어 데이터의 사용에 있어서 문제가 될 정도는 아니기 때문입니다.
리눅스가 손에 충분히 익기도 하구요.

C++이 C보다 취약하든, 유지보수가 쉽든 어렵든..
C++로 C처럼 코딩하든 C로 C++처럼 코딩하든지 간에
원하는 제품을 너무 늦지 않은 시간에, 충분히 완성도를 가진 수준에서
협업하는데 문제가 되지 않는 정도로 만들 수만 있으면 됩니다.

버그헌터의 이미지

흠.. C++이라.. 내 수년간 날 먹여살려주고 있는 녀석인데..
대부분 사람들이 수박겉핡기를 하고 있다죠?
C++로 라이브러리 한두개 큰넘으로 만들어보면 C++이 어떤 넘이라는걸 알게 될것입니다.

간단하게 wrapper class를 만들어보는것도 괜찮고..

페이지

댓글 달기

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