Programming2008. 12. 1. 12:27

C# vs JAVA
- 강력함과 다재다능함의 대결 -
 

1.     서문

내가 작년 초에 크게 고민한 부분이 있다. 과연 JAVA를 배우는 것이 효과적일까, 아니면 C#을 배우는 것이 효과적일까에 대한 것이다. 두 언어 모두 IT업계의 뜨거운 감자로 취급되는 것들이었고, 지금도 그렇다. JAVA가 지금의 선두자라고 한다면 C#은 미래의 선두자가 될 수 있는 가능성을 가지고 있었다.

 그렇지만 두 언어는 각각의 장점과 단점을 갖고 있었다. 프로그래밍 언어론에서 말하 듯, 완벽한 언어는 없으며 각 그 언어의 장점이 있다면 그에 상응하는 단점을 가질 수 밖에 없는 것이다. 강력한 성능의 언어는 복잡한 문법을 가지거나 Perfomance가 떨어질 수 밖에 없듯이, 그런 장단점이 있었다.

하지만 결론적으로 나는 C# JAVA 두 언어를 모두 공부하게 되었고, 두 언어를 C++만큼 깊게 파보진 않았지만 두 언어의 장단점을 파악할 수 있을 정도는 되었다고 생각한다. 그래서 두 언어를 비교해보자고 한다.

 

2.     C#의 특징

A.     C#에 대한 간단한 소개

C# Microsoft(이하 MS) .NET Framework와 함께 사람들의 곁으로 다가왔다. 많은 개발자들은 C# JAVA를 잡기 위해 MS에서 내놓은 언어라고 평한다. 실상 그런 것이 C#을 이용해보면 JAVA와 흡사하다는 느낌을 떨칠 수가 없다. 아래에서 다시 언급하겠지만 C# C++ VB의 특징을 조합하고, JAVA의 강점까지 포함한 언어라고 볼 수 있다. 어떤 사람들은 ‘MS JAVA 킬러라고 부를 정도로 JAVA를 이기기 위한 MS의 각별한 노력이 돋보이는 언어라고 할 수 있다.

 

B.      기본적으로 제공하는 강력한 기능

C#의 기능은 기본적으로 강력하다. JAVA Utility Class 들이 강력한 기능을 갖고있듯 말이다. 물론 요즘은, C++ STL을 넘어서 Boost 등의 강력한 라이브러리를 갖고 이것을 표준안으로 채택하는 방향으로 가고 있다. 그러나 기본적으로 갖고 있고, MS에서 직접 개발한 것과는 다르다고 생각한다. 기본적으로 제공하는 강력한 성능은 C#의 큰 장점이라고 할 수 있다.

 

C.      편리한 개발환경을 제공하는 IDE

언어의 강력함이나 사용의 편의성만큼, 그 언어의 성패를 결정짓는 것이 IDE라는 것은 불보듯 뻔한 일이다. C# IDE는 누구나 알고 있고, 누구나 한번쯤은 사용한 적이 있으며, 게다가 Direct X API관련 개발을 하며 누구나 썼던 Visual Studio(이하 VS)이다. 우선 이것으로 반은 먹고 들어갔다고 볼 수 있는데, 사람들에게 익숙한 VS를 개발환경으로 사용하면서 익숙하고 편리한 개발환경을 제공한다. 게다가 VS는 날이 갈수록 강력해지고 있으며, 그 기능을 십분이용할 수 있는 것이 바로 C#이다.

 

D.     컴포넌트 기반 언어

C# C/C++ 기반 언어 중에 최초의 컴포넌트 기반 언어이다. C# C/C++ 에서파생되며 간단하고 현대적이며 객체지향적이고 형 안정성을 갖는 언어이다. 또한C# Visual Studio의 높은 생산성과 C++의 강력한 힘이 합쳐진 언어이다.

 

E.      CLR(Common Language Runtime) / CLS(Common Language Specification)의 강력함

  CLR은 높은 수행 능력을 갖고 있다. 실행 엔진, 가비지 컬렉터, 실시간 컴파일러, 보안 시스템, 그리고 .NET Framework가 포함되어 있다. 여러 언어를 지원할 수 있도록 설계되어 었다.

CLS는 언어 기능에 대한 공통의 기준을 규정한다. 그 기준은 까다롭지만, 여러 언어를 묶어주는 역할을 한다. 이 그룹에 속한 언어들은 .NET Framework의 기능을 이용할 수 있으며 상호 호환기능을 갖는다. , C# Class VB에서 상속받거나, 오버라이딩 할 수 있다는 말이다.

사실 CLR을 기반으로 만들어진 언어는 상당히 많으나, 우리가 아는 VB, VC++ 등등 또한 CLR기반의 언어라 할 수 있다.

 

3.     JAVA의 특징

A.     JAVA에 대한 간략한 소개

JAVA의 특징들을 열거하자면 상당히 많다. 하지만 특징들을 몇가지 살펴보자면, JAVA는 간단하고, 객체지향적이고, 분산처리되고, 인터프리트되며, 강건하고, 컴퓨터 하드웨어에 영향을 받지 않고, 보안성이 있으며, 포팅하기 쉽고, 성능이 우수하며, 멀티쓰레드를 사용하고, 동적인 언어라고 표현이 된다. 사실 저기에 써있는 것 중에 C#이 더 우월한 강점을 갖고 있는 부분도 많다. 하지만 일반적인 관점에서 JAVA를 볼 때 JAVA는 이와 같은 강점을 갖고 있다.

우선 JAVA Sun Microsystem(이하 SUN)에서 가전제품 시장에 관심을 갖고, 가전 제품을 제어할 S/W를 개발하기 위해 만들어진 언어이다. 많은 가전제품들이 CPU를 사용하고 있으며, CPU가 자주 바뀌거나 다양한 종류의 CPU를 사용하는 전자 제품들을 위해 CPU에 무관하게 돌아갈 S/W가 필요했다. 초기엔 C++을 확장하는 것으로 목적을 이루려 했지만, 그것으로는 역부족이라 느껴 Oak란 언어를 만들었다. 그리고 이 Oak에 다양한 기능을 추가해서 나온 것이 JAVA이다.

 

B.      플랫폼 독립적이다.

JAVA JAVA VM(Virtual Machine)을 통해 플랫폼 독립적이다. 이것은 다양한 Edition을 갖고 있는 JAVA의 특징이 이루어 낸 강점인데, JAVA에는 다양한 에디션이 존재한다. 일반 S/W 개발을 위한 J2SE(Standard Edition), 임베디드 기기를 위한 JSME(Micro Edition), 그리고 워크스테이션 등을 위한 J2EE(Enterprise Edition)이 있다. 하지만 이 모든 것들은 VM을 통해 새로 컴파일 되며, 그래서 기기의 성능이나 상태에 연연하지 않고 개발할 수 있다는 것이 큰 강점이다.

 

C.      JAVA가 업계에서 독보적인 선두에 위치하는 이유

                     i.         많이 쓰인다.

우선 JAVA는 많이 쓰인다. 그 이유는 위에서 쓰인 플랫폼 독립적이다와 같은 이유지만, C#이나 C++에 비해 클래스의 재활용성에 대해 우수함을 갖고 있기 때문이다. 또한 다양한 Edition을 통해, 여러 플랫폼을 지원하며 각 플랫폼에 대한 재활용 성이 높으니 당연하다고 볼 수 있다. Web이나, 일반 Application 등에도 얼마든지 사용할 수 있음이 JAVA가 업계 1위를 차지하는 것에 영향을 갖게 한다.

 

                    ii.         다양한 IDE를 이용할 수 있다.

JAVA는 여러가지 IDE를 갖고 있으나, 대표적으로 2개의 IDE를 갖고 있다. SUN에서 제공하는 NET Beans , 많은 사람들이 이용하는 Open Source IDE Eclipse이다. 내가 VS.NET Net beans 그리고 Eclipse를 모두 사용해봤지만, Eclipse만큼 강력한 IDE는 없었던 것 같다. 하지만 익숙한 VS를 따라가진 못했지만, Eclipse는 익숙해진다면 엄청나게 강력한 기능을 발휘할 수 있을 것 같다.

 

                   iii.         다양하고 강력한 Utility Class

JAVA는 언어 자체에 강력하고 다양한 Utility Class를 갖고 있다. 게다가 단순한 Syntax JAVA를 더욱 강력한 언어로 만들어준다. Utility Class Language Processing 부터 UI, 통신 관련까지 모든 Class를 제공하고 있다.

 

 

4.     JAVA vs C#

A.     두 언어의 공통점에 대하여

사실 두 언어는 객체지향 언어라는 점부터 공통점을 갖고 있다고 볼 수 있다. 또한 C# JAVA를 이기기 위해 만들어진 언어고, 둘 다 뿌리가 C++이니 비슷한 언어라고 할 수 있지 않을까 싶다. 강력한 기본 Class, 그리고 좀 더 객체지향적인 언어 지향, 이런 것들 것 두 언어를 비슷하게 하면서도 어느 언어가 더 강력한 언어인지 고심하게 만든다.

B.      IDE vs IDE

                     i.         JAVA IDE

1.     Net beans
Net beans는 많은 사용자를 확보하고 있는 성공적인 오픈 소스 프로젝트이다. 2000 6월에 활성화 프로젝트가 시작되었다. 대규모 데스크탑 Application을 개발할 때 뼈대로 사용할 수 있는 기반 소프트웨어로써의 모듈화가 잘 되어있고 확장성이 매우 높다.  

 

2.      Eclipse

Eclipse는 자바 기반의 확장할 수 있는 개발 Platform이다. 그리고 Eclipse에는 JDT(Java Development Tools)를 포함한 표준 Plugin set이 포함된다. IBM 4000$를 들여 시작한 프로젝트이다. 국내외 많은 사용자들에게 많은 호응을 받고 있으며 내가 여태까지 사용해본 IDE중에 가장 강력한 기능을 갖고 있는 것 같다.

 

                    ii.         C# IDE

1.      Visual Studio .NET

C# IDE하면 이것이 가장 먼저 떠오르고, 이것밖에 없지 않나 싶다. Windows용 프로그램을 개발하기에는 VS만한 것이 없으며, 이것만큼 강력한 것도 없다. 게다가 MS에서 C# 개발자들을 위해 Inside C#, 2E VS.NET 2008 Express Edition for C#을 무료 배포하고 있으니 더할 나위 없지 않나 싶다.

 

C.      VM machine vs .NET Framework

VM .NET Framework를 비교하려면 비교할 수 있지만 약간은 다른 속성을 갖고 있지 않나 싶다. VM은 이종의 Architecture,  Platform에 무관하게 프로그램을 구동시킬 수 있는 것이며, .NET Framework는 강력한 기능들로 구성된 Library라고 볼 수 있지 않나 싶다. 그러나 이것은 개발의 편리성을 지원하기 위한 도구라는 점에서 비슷하게 볼 수 있지 않나 싶다. JAVA VM은 웹 상의 환경 등에서 손쉽게 구동될 수 있는 환경을 지원하지만, .NET Framework Windows 기반의 프로그램들이 좀 더 가볍고 쉽고 강하게 개발하기 위해 이용된다. 가장 대표적인 예를 들자면, .NET Framework Direct X 를 이용할 수 있기 때문에 3D 가속을 확실히 지원해 게임 개발에 좀 더 강점을 갖고 있는 것은 사실이다.

그런데, JAVA의 또 다른 강점을 이야기해보자면, 다양한 아키텍처(Architecture)에서 동일한 작동을 구현해낸다. C언어라면 16bit 환경과 32bit 환경에서 많은 차이점을 보이지만 JAVA JAVA VM을 이용하기 때문에 , 이종의 아키텍처에서 동일한 구현을 프로그래머가 크게 고민하지 않아도 할 수 있다. 그렇지만 이것은 다른 부분에서의 Perfomance에 크게 작용을 하게 된다. 그것은 다음을 보자.

 

D.     성능 vs 성능

많은 JAVA 개발자들은 JAVA의 성능은 C#에 뒤떨어지지 않으며, C# 뿐만이 아니라 다른 언어에 크게 뒤떨어지지 않는다고 얘기한다. 그리고 사실 언어로써의 성능은 H/W의 엄청난 발전으로 묻힐 정도가 되어가고 있다. 많은 JAVA 개발자들은 JAVACompiler를 이용하기 때문에 성능에 크게 차이가 없는 것이라고 얘기한다.

 그러나 JAVA가 아직까지 real-time rendering 등에서 아쉬운 성능을 가지고 있는 것은 분명하다. 나는 게임 분야의 개발을 해왔기 때문에, 이것은 최소한 나에게는 매우 중요한 문제이다. 그래픽 프로그래밍을 할 때 floating-point 연산을 많이 하는데, floating-point 연산이 자바에서는 현저하게 떨어짐은 사실이다. 그래픽 프로그래밍에서 rendering 하는데 쓰이는 연산은 거의 다 floating point 연산이기 때문에, 그런 부분에 대한 성능은 JAVA가 많이 떨어진다.
 그러나, 게임 프로그래밍등, 그래픽 프로그래밍에 치우치지 않고, 일반적인 사용을 위한 rendering엔 사용하기엔 문제가 없을 것 같다. 그렇지만 전체 시장으로 봤을 땐 임베디드쪽이나 엔터프라이즈 같은 쪽에서 보편적으로 JAVA가 사용할 수 있는 범위가 많다. 대체적인 성능이 떨어져도 그만큼 컴퓨팅 파워가 좋아졌기 때문에 가능한 일이며, JAVA도 계속 발전하고 있기 때문이다. 초기의 JAVA와 지금의 JAVA를 생각한다면 그 속도의 차이는 엄청날 것이다. JAVA가 Intepreter의 한계를 넘고자, Complier를 도입했던 것 처럼 JAVA도 계속 발전해나가고 속도를 개선하겠지만, 결국 그래픽 프로그래밍계열에선 JAVA가 C#을 이길일은 엄청난 시간이 지나지 않는 이상은 없을 듯 하다.

 

E.      활용성 vs 활용성

C#뿐만이 아니라 .NET Framework는 다양한 활용성을 가지고 있다. 우선 WPF, WF, Cardspace, WCF, silverlight, 그리고 마지막으로 XNA까지! C#으로 할 수 있는 일은 무궁무진하다. 그것은 다 .NET Framework기반으로 이루어진 일이지만, C#도 엄연히 .NET Framework의 기반이고 XNA같은 경우는 C#을 통해서만 개발할 수 있기 때문이다. 게다가 일반 Application 개발에서도 C#은 강력한 기능을 갖고 있으며, 쉽게 이용할 수 있다. XML과의 연동등의 편리함이 C#을 더욱 강력한 언어로 만들어준다.

JAVA VM하나로도 엄청난 성능과 활용성을 가지고 있다. 플랫폼에 구애 받지 않고 개발할 수 있다는 점 자체로도 엄청난 코드의 재활용 성을 갖기 때문이다. JAVA는 위에서 언급했 듯 여러가지 Edition을 갖고 있기에 JAVA를 공부하면 다양한 플랫폼을 통한 개발을 할 수 있기 때문에 JAVA의 활용성은 상당히 크다고 할 수 있다.

C#의 활용성이 MS Windows OS 기반으로 가지는 여러가지 강력함을 장점으로 둔다면, JAVA는 다양한 플랫폼을 쉽고 강력하게 활용할 수 있는 활용성을 장점으로 둔다고 할 수 있을 것이다.

 

F.      발전성 vs 발전성

두 언어의 발전성은 무궁무진하다. 사실두 언어의 우월성을 가리는 '어느 언어가 더 훌륭할까?'라는 것은 합당하지 못한 주제일지도 모른다. 두언어는 각자의 다른 방향을 갖고 발전할 것이다. C#은 결국 원하던 목표인 JAVA를 이길 수 없겠지만, C#나름의 방향을 갖고 강력하게 발전해 나갈 것이다. 그리고 JAVA는 다양한 활용성을 가지고 IT의 각종 업계에서 이용할 수 있는 지금의 상황을 더욱 굳히고 강력하게 자리매김할 것이다.

 

5.     마치며

사실 이 두 언어는 MS SUN의 대결이라고 해도 모자라지 않다. 기술적인 측면보다 다른 부분이 언어의 점유율과 성공에 영향을 미치지 않나 싶다. MS는 사실 돌아보면 선발주자기업이 아니라 투자를 하고 M&A를 해서 선점을 노려왔다. 앞으로 어떻게 될지는 생각해봐야겠지만 둘중 하나가 없어지거나 할 것 같지는 않고 MS Platform에서는 C#이 나름대로 편의성을 지원해주니까 C# , .NET 계열이 꾸준히 사용될 것이다.

여타플랫폼에서는 JAVA계열이 사용될 것이다.  플랫폼 독립적이니까 일관성 있게 사용할 수 있다.

 두 가지 언어를 모두 공부했지만, 이런 식으로 평론을 하기엔 부족하지 않았나 싶다. 하지만 이것을 적으면서 두 언어의 장,단점을 좀 더 확실하게 파악할 수 있었던 것 같다. 두 가지 언어 모두 강력한 만큼 익혀두는 게 좋지 않나 싶다.

 프로그래머에게 언어는 도구가 아닌가 싶다. 다양한 도구를 능숙하게 다룰 수 있는 프로그래머는 강력한 실력을 보장할 수 있지 않을까 싶다. 물론 기본기가 가장 중요하지만, 기본기가 받쳐준다면 자만하지 않고 새로운 기술과 언어를 습득하여 자신의 가치를 갈고 닦는 것이 중요하다고 생각한다. 그런면에서 이 두가지 언어는 모두 배워도 손색이 없을 정도로 강력한 도구이다. 누군가가 나에게 두 언어 중 어떤 것을 선택하여 공부해야하냐 묻는다면, 나는 그 사람이 하고자 하는 일을 상세히 듣고 추천을 해주게 될 지도 모르겠다. 두 언어 모두 강력하고 훌륭한 언어이기 때문이다. 하지만 혜안은 두 언어 모두 공부하는 것이 아닐까?

출처 : Tong - hanna84님의 c#통

Posted by Mocker