천상낙원

C와 C++의 차이란? -blitzerg-

IT이야기
1. C와 C++은 다른 언어이다.

C와 C++은 다른 언어입니다. 거의 비슷하다구요? 예! 정말 비슷합니다. 하지만 분명 C와 C++은 다른 언어입니다. 만약 C++이 C의 단순한 확장이었다면 모두가 C++을 써야하는게 맞는거겠죠. 대학교 다니시면서 프로그래밍 언어론을 배우신 분들은 아시겠지만 모든 언어는 각자의 장단점이 있고 그 장점이 퇴색하지 않는 이상 언어는 사장되지 않습니다. 만약 어디서든 "강력한" 언어가 있다면 모르겠지만 말이죠. 예를들면 똑같은 Microsoft에서도 VC++, VB, VJ++, VF 등의 많은 언어를 출시합니다. 물론 MS같은 경우에는 전략적인 목표로 인한 경우도 있지만 실제로 그런 언어들이 그 언어의 장점으로 인해 실제로 사용되고 있습니다.

2. 그럼 C와 C++이 어떻게 다른가?

C++을 배우신분들은 이미 답을 다 알고 있습니다. 기억이 안나거나 중요하게 생각하시지 않으셨겠지만요. C++은 OOP를 반영한 언어입니다. OOP는 큰 프로젝트나 대형의 프로그램의 설계시 코딩과 디버깅의 효율성을 높이기 위해 나온 개념입니다. 당연히 C++은 큰 프로젝트와 대형의 프로그램의 설계시 유용합니다. C는 당연히 C++에게 위의 사항을 뺏겼고 심지어 위의 사항이 단점이 되었습니다. 하지만 "아직까지 수많이 쓰이는" C는 위의 사항의 반대상황에서는 C++보다 더 강력하고 유용합니다. 실제로 저사양의 시스템이나 제어관련 시스템에서는 C++언어는 포팅되지 않은 경우도 허다합니다. 또한 작은 프로젝트와 저용량 프로그램의 설계시 C는 상당히 직관적이고 빠르고 훌륭한 프로그램이 됩니다. 이런 일에 C++을 사용한다면 10발자국 움직이려고 차를 움직이는 것과 같은 것이죠.

3. 그럼 C와 C++중 어느것이 더 유용한가?

"임베디드 시스템을 공부하는 사람과 범용 시스템을 공부하는 사람과 어느 사람이 더 성공할까요?" 이 질문은 옳은 질문이 아닙니다. 왜냐하면 경우에 따라 다르거든요. "C와 C++중 어느것이 더 유용하느냐? 좋으냐?"는 질문도 별다를바 없습니다. 써야하는 곳 쓰고싶은 곳에 쓰는 것이니까요. 하지만 일반적으로 "하드웨어 의존적이지 않은" 소프트웨어의 길로 나가실 거라면 C++이 조금 더 유용하다는 것을 말씀드리고 싶습니다.

4. C만할줄 아는 사람이 C++프로젝트에 참가했을때

아주 심각합니다. C만 할줄 아는 사람은 프로젝트에 참여하는게 아니라 코더로 전락할 가능성이 높습니다. OOP의 개념조차 서있지 않은 사람에게 프로그램의 설계를 맡길 수는 없죠. 그러니 메쏘드의 기능을 설명해주고 그런 부분을 짜라고 할 수 밖에 없습니다.

5. C++만 할줄 아는 사람이 C프로젝트에 참가했을때

이 경우는 전자보다 더 심각합니다. C는 C++의 중요한 문법을 받아들이지 못합니다. 때문에 C++프로그래머는 자신의 프로그래밍 방식을 포기해야합니다. 결국 프로그램은 번듯한 양복에서 반쪽짜리 너덜너덜한 거지옷이 되어버리기 일쑵니다.

6. 그럼 왜! C와 C++을 다 배워야 하는가?

이 질문을 저는 조금 더 확대하겠습니다. 눈을 좀 넓히셔야 될 것 같아서요. "왜! C, C++, Java, Python, Basic, Pascal, Lisp을 다 배워야 하는가?"라는 질문이 더 좋은 질문인 것 같습니다. 앞에서 말씀드렸다시피 언어는 각자의 특징이 있고 그 특징이 사라지지 않는한 그 언어는 죽지 않습니다. 여러분이 C와 C++의 단점을 그대로 지니고 프로그래밍을 하실거라면 어쩔 수 없지만 그런 단점을 조금이라도 극복하시고 싶다면 여러 언어를 익히는게 더 좋은 방법입니다. 만약 그런 언어들의 장점을 아시고 싶으시다면 프로그래밍 언어론 관련 서적을 읽으시든지 아니면 교수님과 진지한 대화를 한번쯤 나누시는게 좋을 듯합니다. 저도 저 잘난줄 알고 Java를 꼭 배워야 하느냐는 질문을 교수님께 던졌다가 정말 부끄러웠습니다.(패키지 게임만들 내가 Java는 배워서 어디다가 써먹냐는 생각이었쬬.) 교수님 말씀은 "언어를 배울때는 의심하지 마라. 거기서 무엇을 배울지 생각해라" 였죠...

7. 그럼 C와 C++ 어느걸 먼저 배워야 할까요?

여러분이 먼저 배우길 원하시는 방향으로 가닥을 잡으면 됩니다. 높이 나는 새(C++프로그래밍)는 멀리 보지만 가까운 것을 오히려 못볼 수 있고, 낮게 나는 새(C프로그래밍)은 나무는 보되 산은 못볼 수있습니다. 산을 먼저 보시고 싶다면 C++, 나무를 먼저 보시고 싶다면 C를 배우시면 됩니다.

8. 종합

김용의 무협지를 읽으면서 사람들이 토론합니다. 동방불패가 최강이냐 독고구패가 최강이냐? 벽사신검이 최강이냐 독고구검이 최강이냐? 제가 말합니다. 그들이 쓰여야 할 곳에서는 그들이 최강이다. 그들이 쓰여지지 않아야 할 곳에서는 그들은 아무것도 아니다.