C# 코딩

예전에 짜 놓은 C++ 코드를 C#으로 포팅할 일이 있어서 모처럼 비주얼 스튜디오로 C# 프로젝트를 만들어 봤다. 그렇게 거창한 건 아니고, 그냥 콘솔에서 간단하게 입출력만 주고받는 150~200줄 남짓의 정올 답안 정도 되는 규모의 프로그램이다.

public void 이런 식으로 멤버 함수를 선언하는 것이나, 클래스 안에다가 함수 몸체를 다 써 넣는 것은 자바를 닮았다.
전처리기 같은 게 없고 C++보다 소스 코드 파싱이 훨씬 더 용이한 것 역시 자바와 일치한다. 사실 이건 요즘 객체 지향 언어들의 보편적인 추세이기도 하니까.

이 언어 역시 자바처럼 생산성 하나는 정말 좋겠다는 생각이 들었다. 파싱이 쉽기 때문에 IDE가 굉장히 똑똑해질 수 있다. 소스 코드 자동 리팩터링이라든가 인텔리센스 자동 완성, 코딩 컨벤션 교정 같은 것을 월등히 더 지능적으로 구현할 수 있다는 뜻.
실제로 C++ 쓰다가 C#을 쓰면 정말 그 편리함에 감탄하곤 한다.
환상적인 빌드 속도도 큰 매력이며, precompiled header 나부랭이도 없다. delete 때문에 골머리를 썩을 필요도 없다.
네이티브 바이너리를 못 만들어서 낭패이긴 하지만 말이다.

자바와 C#에는 C++에서 ::와 ->에 해당하는 연산자가 없으며 이들의 기능을 .이 모두 맡고 있다. 일단 포인터라는 게 존재하지 않으니 ->가 필요 없고, . 가 개체의 멤버 참조뿐만 아니라 scope와 namespace 식별까지 모두 맡고 있는 것이다. 그렇게 해도 문법상으로 모호해지지는 않는다.

C에는 다차원 배열이 존재하지 않으며 오직 배열의 배열 내지 다차원 포인터만이 그 개념을 대신하고 있는 반면, C#은 자유롭게 다차원 배열을 선언할 수 있다. 무슨 얘기냐 하면 실행 시간에 임의의 값으로 x*y 크기의 동적 배열을 만들 수 있다는 뜻. (C/C++은 언어 차원에서 이 간단한 일도 바로 가능하지 않다.)

C#은 콤마 연산자는 존재하지 않는 듯하다. 그리고 int 같은 기본 타입을 reference로 전달할 수 있는데, 이때는 반드시 ref를 추가해야 한다. 함수를 선언할 때 ref를 붙이는 건 마치 파스칼에서 var을 붙이는 것과 비슷한데, 이뿐만이 아니라 그런 함수를 호출할 때도 func(ref a) 이런 식으로 ref를 붙여야 하는 게 무척 신기하게 느껴졌다.

앞으로 간단한 벡터 그래픽 데모 프로그램을 짤 일이 있을 것 같은데 이것도 간단하게 C#으로 짜면 딱일 것 같다. 복잡한 최적화 루틴 같은 거 필요 없고, 그냥 결과물이 마음에 들 때까지 빌드를 엄청 자주 해야 할 텐데 C++보다 생산성이 월등히 더 뛰어날 수 있기 때문이다.
하지만 그러려면 Win32 API와는 완전히 다른 그래픽 체계를 또 공부해야 되네. -_-;;

Posted by 사무엘

2010/02/12 22:20 2010/02/12 22:20
Response
No Trackback , 9 Comments
RSS :
http://moogi.new21.org/tc/rss/response/183

Trackback URL : http://moogi.new21.org/tc/trackback/183

Comments List

  1. 김재주 2010/02/13 05:27 # M/D Reply Permalink

    C#은 정말이지 잘 만든 언어가 맞습니다. 저는 C++과 JAVA의 장점들을 잘 골라서 취합했다는 느낌을 받았어요.

    JAVA는 아무래도 언어의 나이가 많은데다가, 지금처럼 생산성을 추구하는 여러 언어들이 경쟁하던 시기에 나온 것도 아니죠. 불편한 게 있더라도 언어 자체를 확장하기보다는 문제를 우회할 수 있는 라이브러리를 만들어서 표준에 포함시키는 방식으로 해결했기 때문에 더 그런 것 같습니다. 그래서 JRuby, Jython, Groovy 등이 요새 주목받는 것이구요. JVM 위에서 보다 세련된 언어를 사용해서 코딩할 수 있다는 장점이 있어요.

    다만 마이크로소프트가 다른 플랫폼에서 동작하는 .NET framework를 발표하질 않아서 문제지요. 게다가 내부 구현이 MS의 특허와 엮여 있어서 오픈소스 진영에서 제대로 구현하기도 어려운 노릇이고.

    1. 사무엘 2010/02/14 08:15 # M/D Permalink

      C#은 이거 뭐 비주얼 스튜디오가 버전업될 때마다 끊임없이 언어가 확장되고 있죠.
      partial도 2005던가 2008에서 새로 추가됐고, DB 연동을 쉽게 해 주는 것, 람다 대수학에 있던 개념도 새로운 문법으로 등등...
      정말 화려하더군요.
      다만.. 말씀하신 것처럼 단순히 C++ + MFC 쓰는 것보다도 MS 플랫폼에 더욱 종숙되고 발이 묶이게 되는 건 각오해야겠습니다.
      이 점에서는 비주얼 베이직과 비슷한 차원이겠네요. ^^

  2. 김 기윤 2010/02/13 23:14 # M/D Reply Permalink

    저는 여러 언어를 사용하지 않고 단일언어만 사용하다 보니까

    C# 을 사용하려고 하는데 적응이 잘 되지를 않아서 해메고 있습니다 (....)

    네이티브 바이너리 못만드는건 역시 낭패 (..)

    1. 사무엘 2010/02/14 08:16 # M/D Permalink

      사실은 좋은 프로그래머라면 기술, 플랫폼에 종속되지 않고 어느 환경에서든 잘 적응해서 자기의 사고방식을 코드로 잘 옮길 수 있어야 하지요.
      저도 고등학교 시절에 축적해 놓은 밑천인 Win32 API에 너무 묶여 있는 게 한계입니다.
      간단한 유닉스 내지 파이썬 스크립트로 해도 되는 일상생활의 자동화 작업조차도 다 C++ 프로그램으로. ㅋㅋ
      하지만 이게 윈도우 운영체제 하에서는 제일 원천적이고 강력한 기술이란 점은 다행임.

  3. 주의사신 2010/02/15 15:57 # M/D Reply Permalink

    C#은 리눅스에서 돌아갑니다.

    http://mono-project.com/Main_Page

    에 가시면 보실 수 있습니다.

    1. 주의사신 2010/02/15 16:00 # M/D Permalink

      아 그리고 C++ Refactoring이 사용하고 싶으시면,

      http://www.devexpress.com/Products/Visual_Studio_Add-in/Refactoring/

      확인해보시기 바랍니다. 저도 얼마 전에 알았네요.

    2. 주의사신 2010/02/15 16:07 # M/D Permalink

      http://www.devexpress.com/Products/Visual_Studio_Add-in/RefactorCPP/
      위 링크가 아니라 여기가 맞네요....

    3. 김재주 2010/02/16 01:03 # M/D Permalink

      mono를 몰라서 그리 적은 것은 아닙니다.

      mono는 물론 어느 정도 성공한 케이스이지만 결국 리눅스와 맥에서만 의미가 있고, 그나마 제한적이지요. MS .NET Framework와 호환되지 않으며, 버전이 올라갈 수록 완벽에 가까운 구현은 점점 멀어져만 갑니다. 게다가 위에 적었듯이, MS가 가지고 있는 특허들 때문에 100% 호환은 원천적으로 불가능하기도 하지요.


      그리고 mono의 최대 단점은 이거죠. Visual Studio에서의 편리함을 mono 기반에서 개발해서는 도저히 누릴 수가 없습니다. 그렇다고 맥이나 리눅스에 VS를 설치하게 되어서야... 차라리 윈도를 쓰는 게 낫습니다.

    4. 주의사신 2010/02/16 09:03 # M/D Permalink

      전에 Linux에 뭔가를 컴파일 하여 설치해야 할 적이 있어서 그냥 화면을 보고 있는데 C#이라는 문구가 떴던 적이 있습니다.

      그래서 많이 쓰는가 했는데 그것도 아니었는가 보네요.

      좋은 것 배우고 갑니다.

Leave a comment
« Previous : 1 : ... 2049 : 2050 : 2051 : 2052 : 2053 : 2054 : 2055 : 2056 : 2057 : ... 2204 : Next »

블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

Site Stats

Total hits:
3044385
Today:
1577
Yesterday:
2435