Creative Commons License
"세상 뭐라해도 자바만큼 편한 프로그래밍 언어가 또 어디 있을까?"

지극히 주관적인 견해이다만, 사실 자바는 여러모로 굉장히 편하다. 플랫폼을 가리지 않는 가상 머신의 존재는 윈도우만 써온 우리네 가슴에 불을 지피진 못하지만, 적어도 리눅스 환경에서 뭔가 만들어내야 할 처지에 놓였을 때만큼은 진가를 발휘한다. 비주얼 스튜디오를 이용해 GUI 어플리케이션을 만든 몇몇 연구실들이 "플랫폼은 리눅스로 확정되었습니다" 는 말에 얼마나 고생했는가를 본 적이 있다. 물론 이 때 자바 어플리케이션 개발자들은 회의 참가 대상에서 제외되었다. 뿐만 아니라 풍부한 기본 라이브러리!! 어떻게 말로 다 표현할 수 있으랴-

그런데 C# 이라고요?

C#은 .NET 프레임워크의 출시와 함께 등장한 새로운 프로그래밍 언어이다. 첫 인상은 '이거 MS가 자바까지 먹으려 하는구만?' 이랄까? 실행 구조라던가 언어 특성이 굉장히 닮았다고 생각했다. 책을 두 권이나 샀고, 표지만 읽은지 벌써 4년이 지났다.

책은 여전히 뒹굴고 있지만 어떤 계기로 C#을 다시 접하게 되어 C#에 대해 간략하게 정리된 문서를 읽었다. 그리고 생각했다. '오? 이거 이거-!!' 자바가 갖고 있는 장점은 그대로 수용하면서 C++의 편의성을 이어 받았다. 그것도 위험 요소를 최대한 해결한 상태로!! 그리고 자바 언어와 별반 다를게 없을 것 같던 초반의 생각도 많이 바뀌었다.

C#의 대략적인, 그리고 적어도 내가 이해한 수준의 특징들을 살펴보면 다음과 같다.


  • Value/Reference: 각각 명확하게 구분되어 있으며, 사용 시 크게 신경써야 할 부분을 최소로 하되 잘 알고 쓰면 퍼포먼스를 높일 수 있는 고급 프로그래밍을 가능하게 한다.

  • Namespace: 자바의 package와 비슷하지만 자바처럼 폴더 구조까지 제한하지는 않는다. 그리고 using 구문을 쓸 때 자바의 import 구문과는 달리 클래스가 아니라 namespace를 명시한다.

  • Assemblies: 배포 단위로 자바의 jar와 유사해 보이지만 버전 관리가 가능한 장점이 있다.

  • Exception: 자바와 굉장히 유사하지만 자바의 throws 구문과 달리 try-catch를 강제하지 않는다. 이것은 편의로 작용할 수도 있지만 부실한 결과물을 생성할 위험성을 갖고 있다.

  • Goto: 어처구니 없어보이는 goto 문은 switch 문에서 큰 활약을 보일 것으로 예상된다. State transition을 구현하기가 훨씬 수월할 것 같다. 더불어 switch 구문이 string을 허용하는 것은 굉장히 편리하게 작용할 것이다.

  • Boxing/Unboxing, ref/out: Boxing/unboxing은 자바 이상의 수준을 보이는 듯 하며, 레퍼런스 수준의 파라미터 전달은 C++의 장점만을 취하고 사용 시 반드시 명시하게 함으로써 안정성을 확보했다.

  • Delegate/Event: 이것은 함수 포인터 이상의 의미를 갖는다. Event 처리의 강점은 길게 말할 필요가 없을 정도로 깔끔한 코드를 생산할 수 있다.

이제 막 C#의 소개글만 읽고, 실제로는 Hello World 수준의 코딩만 해 놓고는 이렇다할 글을 쓰는 것 자체가 조금 우습다. 그래도 새로운 언어에 대한 호기심은 이미 한창 상승세에 있고, 새로운 언어가 주는 새로운 관점은 하나의 개발 언어만 고집해오던 개발자의 두뇌를 자극한다.

C#은 분명 흥미로운 언어이다. 자바와 C++의 장점만을 수용해 만든 덕분에 이도 저도 아닌 듯 한 인상은 어쩔 수 없지만 편견을 버리고 새로운 마음으로 접근하면 분명 그 매력을 발견할 수 있을 것이다. 시장이 아직 C#을 얼마나 받아들일지는 모르겠지만, 호기심만으로도 일단 배우는 데에는 크게 무리가 없을 듯 하다.
이 글의 트랙백 주소는 http://semix2.tistory.com/trackback/341 입니다