[정보 및 잡담] C, C+, JAVA, C#의 차이


Development note/Etc.  2012. 9. 15. 22:02

안녕하세요 명월입니다.


이번 포스팅에서는 대표적인 언어 C, C++, Java, C# 의 차이에 대해 설명하겠습니다.
먼저, 개인적인 생각과 경험에 나온 기술이기에 제 설명이 틀릴 수도 있습니다.


프로그램 언어의 탄생은 C -> C++, Java, C# 순서입니다. 여기서 C#이 가장 나중에 개발된 프로그램 언어라 하겠습니다만, 그렇다고 C#이 가장 우수한 언어, 좋은 언어라고 하기에는 오류가 있겠습니다.
먼저 기술적, 개념적으로 언어적 특성이나 언어의 처리속도는 차이가 없습니다..다만 문법적으로는 차이가 조금씩은 있습니다.


기술적으로는 차이가 없는 이 언어들을 구분을 지어보겠다면 C, C++(MFC)와 Java, C#으로 나뉠 수 있습니다. 혹자는 1세대, 2세대 언어라고도 표현합니다.
이 두 언어의 가장 큰 차이점은 C, C++은 소스레벨의 코딩이 가능하고, Java, C#는 클래스는 동적으로 움직이며 클래스 기반의 언어(?)라고 할 수 있습니다.
또 다른 큰 차이는 프레임워크(Java에서는 JVM)이 있고 없고의 차이도 있습네요


그렇다면 왜 C, C++, Java, C# 언어들은 각기 나뉘어져 있고 또 개발자들은 나뉘어서 개발할까요??


제 생각의 가장 큰 이유는 돈 때문입니다. 소프트웨어 공학 등의 학문도 그렇고 실무 프로젝트 구성도 보면 결국 전부 돈과 직결되어 있습니다.
개발할 시에 언어를 선택하는 것도 결국은 돈때문에 선택을 하고 나뉘게 되겠습니다.
단지 C는 오픈언어, Java는 오라클사(과거 Sun), C++, C#은 MS사의 소유권 문제만은 아닌 듯싶네요.


개발 단가로 살펴보면 C와 C++(MFC)의 프로그램 단가가 가장 비쌉니다. 그리고 C#이 비싸고 Java가 가장 싼 프로그램이 되겠네요.
물론 프로그램이 비싸다고 해서 우수한 프로그램은 아니고 Java가 가장 싼 프로그램이라고 해서 허접한 것은 아닙니다. 또 반대로 C와 C++ 개발자라고 해서 보수가 높은 것도 아니고 Java개발자라고 해서 싸구려 개발자라는 뜻도 아닙니다. 그럼 왜 이런 단가가 나누어져 있을까요?


먼저 프로그램 기간을 살펴보면 C와 C++(MFC)은 개발기간이 깁니다. 반대로 C#과 Java는 C,C++에 비교해서 개발기간이 짧습니다. 그렇다 보니 프로그램 가격의 차이가 나옵니다. 이런 생산성을 가진 C#과 Java인데도 불구하고 아직 시장에는 C와 C++개발 건이 많이 있습니다. 그 이유는 Java와 C#은 프레임워크를 벗어난 네이티브적인 개발은 불가능 하나 C와 C++은 네이티브 개발도 가능하기에 운영체제의 커널이나 하드웨어, 드라이버 등의 개발에 용이하기 때문입니다.
그럼 왜 이런 차이가 생기는 지에 대해 자세히 설명하겠습니다.



1990년대 초, 중반에 과거 Sun사에서는 Java라는 언어를 발표 헀습니다. Java의 프로젝트 목표는 어떠한 플랫폼에서도 개발할 수 있는 언어가 목표였습니다.이건 지극히 제 생각인데 C언어도 어떠한 플랫폼에서 개발할 수 있지 않았나 싶은데?? 모르겠네요.
다시 돌아와서 Java가 발표되고 어떤 언어였나 싶으면 C, C++개발자가 보기엔 획기적인 언어였습니다.
현재는 하드웨어, 컴퓨터, 통신회선 등이 1990년대에 비해 비약적으로 향상되어 대충 만들어도 빨리 전송이 되지만, 1990년대에는 전화모뎀을 쓰는 열약하고 느린 환경에서 정보통신을 하는 것은 매우 느리고 버그가 많았습니다.
그런 시기에서 자바는 JVM머신을 이용해 통신속도와 버그 등이 개선된 것처럼 보였는데 개발자들은 이 자바의 아이디어에 놀라웠습니다.

그리고 또 자 당시 전 세계의 소프트웨어 시장을 잠식하고 있었던 MS에 압박할 수 있었던 무기는 오픈소스 정책이 있었습니다. 기존의 C언어 C++를 생각해 보면 개발자들이 소스를 공유, 모듈을 공유한다는 것에 대해 개념도 없었지만, 서로 정해 놓은 개발서의 형식, 개발 표준이 정해지지 않아서 소스 공유의 에로 사항도 많았습니다. 아니 소스 공유에 대한 인식 조차 없었다고 하는 게 맞겠네요.
또 프로그램을 보더라도 라이브러리는 DLL로 묶여있어서 해당 모듈 개발자가 아니면 거의 손댈 수 없는 형식이어서 프로젝트가 시작되면 하나부터 열까지 다 개발해야 하는 형식이었습니다. 즉 프로젝트를 할 때마다 똑같은 반복작업이 엄청나게 많다는 뜻이지요.


그러나 Java는 오픈소스정책, 즉 자주 쓰는 모듈은 공유, 자바 독으로 프로그램 사용하는 방법에 관한 기술이 공개되고, 또 자바는 개발하는 규칙을 일목요연하게 정리를 해 놓아서 누가 봐도 알 수 있는 소스 식으로 나오면서 인기가 얻기 시작합니다.


프로그램을 시작하는 사람으로서는 접근하기 쉬우니 자바에 관심이 가고 기존 개발자들은 반복되는 작업을 생략하고 좀 더 창의적이고 생산적인 개발환경에 마음이 들어 많은 개발자가 C, C++에서 Java로 갈아타기 시작합니다.


요즘에야 C, C++도 개발 규약이 많이 생겨서 많이 정리됐지, 가끔 돌아다니는 90년대 초반 개발 소스를 보면 알아먹을 수가 없습니다. 뭐 이리 복잡하게 만들었는지..


그에 압박을 느끼기 시작한 MS사가 90년대 말 Basic의 생산성, C++ 성능, 델파이의 개념이 결합한 언어인 C#를 내놓습니다. (자바 언급은 없어요.. 내가 보기엔 자바 판박인데 말이죠..). C#은 그렇게 탄생이 되었습니다.

그렇게 언어들은 탄생이 되고, 90년대의 또 하나의 큰 이슈는 WWW라고 하는 월드 와이드 웹이라는 개념의 웹이 등장하게 됩니다. 이 웹의 등장으로 채택된 언어는 Asp, PHP가 있으나 Java의 등장으로 웹과 Java가 만나게 됩니다.
이는 Java의 폭발적인 인기를 얻게 되는 또 하나의 이유가 되기도 하는데 웹의 발전 상승과 Java의 발전 상승과 맞물리게 됩니다. 그렇게 등장한 Java와 2000년도 초반의 C#은 인터넷 기반, 웹 기반의 프로젝트에서 서로 경쟁하듯이 발전을 하게 됩니다.
C# FrameWork 1.1에서 3.5까지는 Web기반의 프레임워크가 많은 발전을 했습니다.


그런 상황에 놓이다 보니 C와 C++은 90년대 후반부터 입지가 조금씩 밀리기 시작했습니다. Java로 갈아탄 개발자들이야 프로젝트가 많이 지니 좋지만 갈아타지 못한 사람들은 프로젝트가 줄어드니 달갑지는 않지요. 개인적인 생각이지만 이때부터 MS개발자와 Java는 원수가 되는 듯….ㅎㅎ 여담입니다.


그렇게 입지가 좋아진 C, C++은 웹과 인터넷 기반의 프로그램이 아닌 Java와 C#이 접근하기 힘든 커널과 하드웨어, 모바일쪽으로 특화가 되기 시작합니다. 90년대 후반부터 핸드폰의 보급이 시작되는데 이때 들어가는 언어가 심바오C++로써 C언어와 C++개발자들은 그쪽으로 특화가 되기 시작합니다. 지금은 모바일도 Java 안드로이드가 점령해서 이제는 아예 드라이버, 임베디드, 커널 개발 등으로 특화가 되어 이제는 시스템적인 언어로 인식이 박히게 되지요..


다시 돌아와서 2000년대 초반에 Java와 C#은 인터넷의 패권으로 경쟁하게 됩니다.
여기서부터 Java와 C#의 차이가 나기 시작합니다.
Java는 개발하기 위해서는 비용이 들지 않습니다. Java언어 자체도 무료고, 대표 개발툴(IDE)인 이클립스도 무료입니다. 기동 되는 서버는 Linux인데 RedHat을 많이 사용합니다. RedHat자체는 유료(서버에 대한 과금이 아닌 서비스 제공에 대한 과금)이나 그와 같은 무료버전인 CentOs가 있으므로 실질적으로 무료로 개발이 가능합니다. 또 데이터베이스는 Sun사의 오라클인데 오라클은 가격이 있지만, 또 무료로 사용 가능한 Mysql, postgre 가 있으므로 이 부분도 비용절감이 가능합니다.
즉 개발에서 릴리즈까지 돈을 한 푼도 안쓰고 개발이 가능하다는 뜻입니다. 개발자 인건비, 서버 회선비 정도가 들겠네요.


그에 비해 C#은 C#자체는 무료입니다만, 대표 개발툴인 Visual Studio는 고가의 개발툴입니다. 또 기동 되는 서버는 Window Server인데 이것도 상당히 비싸지요. 데이터베이스는 MSSQL입니다. 뭐 이건 Mysql로 전환이 가능합니다만 C#은 보통 Mssql를 사용하지요. 자바와 같이 개발자 인건비, 서버 회선 비용이 든다는 것입니다.


여기까지 오면 프로그램을 만드는 입장에서는 어떤 언어를 선택하게 되는 것일까요?
품질의 아주 큰 차이가 있지 않은 이상은 가격이 싼 Java를 선택하게 되어있습니다. 그래서 그런지 C#은 초반에는 상당한 분전을 하다가 웹 계통은 상당히 밀린 듯한 모습을 보입니다.


그럼 C#을 누가 쓰냐? 하는 질문이 생기게 되겠습니다. C#를 배포하는 MS사는 Java를 압도할 수 있는 무기가 무엇이냐하면 점유율입니다.
웹 쪽에서는 밀리는 듯하지만 CS 인터넷 기반 프로그램에서는 완전한 강세를 보이고 있습니다.개인적으로도 Java Swing은 사용도 어렵고 메모리 릭도 많고 호환성도 떨어지더라고요. 그렇지만 같은 MS계열의 윈도우와 C#은 이야기가 다름니다..


단가는 비쌀지언정 확실한 품질 차이가 있으므로 WindowForm의 윈도우개발은 C#이 강세를 가져갈 수밖에 없습니다.


그러나 최근에는 안드로이드와 IOS 애들의 강세로 MS도 많이 주춤거리고 있습니다. Window Mobile도 많은 전략을 내세웠으나 뚜렷한 성장세를 보이지 않는 듯 하고요..


앞으로는 언어대결은 어떻게 흘러갈까요?? 개발하는 입장에서 이를 지켜보는 것도 또 하나의 즐거움이겠습니다.