본문 바로가기

class "Think"/"MSP"

[P] MSP 개인 프로젝트 1 - "C# 이 무엇인가요?"


MSP 활동을 시작하며 가장 먼저 접했던 기술이 "Silverlight"와 "C#"이라고 하면 다들 공감하실것 같습니다. 그만큼 MS사에서 현재 가장 활발하게 진행중이고, 주력으로 밀고 있는 기술이 아닐까 한데요

MSP로 활동하는 만큼, 이러한 기술들에 대해 어떤 기술인지 알고 있어야 하기 때문에, 저같은 암것도 모르는 기술 MSP뿐만 아니라, 컴퓨터 비 전공자 분들이 많이 계신 열정 MSP분들도 개략적으로 이해하실수 있게끔 쉽게 작성해보려고 노력 하겠습니다 ㅎㅎ




1. C# 이 무엇이고 왜 쓰나요?

C#에 대해 배우기에 앞서, C#이 무엇이고, 왜 다른 유명한 언어(C, C++, JAVA등)를 놔두고 C#을 배워야 하는지 알아보는 챕터를 준비했습니다.

먼저 'C#' 이라는 글자를 간단하게 해석해보자면,


정말 단순 무식하게 C, C++, C++++(#) 이라는 순서대로, C언어가 발전해 온 형태임을 나타내고 있습니다 (하지만 C#이 C++의 공식 후계(?) 버전이라고 하기는 어렵습니다. 여담입니다만 C++의 공식 후계 버젼은 현재개발중인 C++0x 라고 해야 맞습니다). 여기서 ++는 프로그래밍에서 '증감연산자'로 불리우는 것으로 어떤 다음의 값 (1++는 2)를 나타낼때 사용합니다. 

아무튼 저렇게 보면 대충 감이 오실겁니다. "아 C#은 C++에서 무언가 좀더 발전한 프로그래밍 언어구나" 라구요

C#은 아래와 같은 특징때문에, 많은 개발자들이 사용하고 있습니다.


C#은 정말 최근의 고급 프로그래밍 언어의 좋은점만을 골라 골라 만들었다고 할수 있습니다. 닷넷 환경이 지원되는 모든 플렛폼에서 수정없이 동일한 코드로 실행되어지는, 즉 플랫폼 독립적이고, 메모리 관리에 대한 부담이 없도록 가비지 콜렉터(Garbage Collector)을 가지고 있고, 개발자의 편리한 인터페이스 환경- 즉 엄청나게 많은 라이브러리를 통해 개발자의 개발환경 극대화를 추구하고, 타입(Type)과 문법이 엄격하며, 닷넷 프레임워크의 대표적 언어로 닷넷 프레임의 장점을 가지고 있다는것을 특징으로 둘수 있을것 같습니다.

이러한 특징으로 현존하는 고급언어중 가장 완성도가 높다는 평가를 받고 있고, 이러다 보니 많은 개발자들이 개발하기에 편리하다는 이유로 C#을 사용하고 있습니다. 하지만 역시나 장점이 있다면 단점이 있는법..
단점으로 해당 시스템에는 .NET 프레임 워크가 깔려 있어야 하고, 라이브러리의 남발(어쩔수 없지만..)로 코드 자체가 그리 깔끔해 보이지 않은것, 그리고 가장 큰 단점인 다른 언어 (C, C++)에 비해 속도가 느리다는 단점이 있습니다. (하지만 JAVA보다는 빠르다는 평이 지배적입니다)

위에 언급한것을 한마디로 줄여서 C#을 표현하자면
C#으로 프로그램 만들긴 정말 편하지만, 조금(?) 느리고 쪼금(??) 복잡하다.




2. 위에 적힌 C# 의 특징들이 너무 전문 용어인데, 비 전공자도 알수 있게 풀어서 설명해 주세요

예.. 그래서 준비했습니다. 저 나름 심여를 기울였는데, 혹시나 아래 설명을 보고도 잘 모르시겠다 하시는 분은 댓글로 ..;;

 1) 플렛폼 독립적

C#을 공부하며 가장 다른 언어들과 다르게 느껴졌던 부분입니다. JAVA도 JDK에 의해 플렛폼 독립적으로 작동하지만, 왠지 JAVA때는 공부를 제대로 하질 않았는지 크게 와닺질 않았다고 고백.. 합니다..(공부를 어떻게 했길래;;),  보 일반 프로그램들은 exe파일을 더블클릭하면 단순하게 운영체제(Operation System)에서 기계어로 컴파일된 프로그램을 구동하게 되는데, C#은 중간언어(Intermediate Language: 여기선 MSIL)로 컴파일된 exe파일이 CLR(Common Language Runtime)을 통해 다시 재 컴파일 되고 그것이 실행 됩니다. 그렇기 때문에 실행되는 운영체제와 플렛폼이 틀리더라도 CLR만 알맞게 설치되어 있다면 굳이 다른 플렛폼에 맞게 코딩을 새로할 필요가 없는 것입니다. 대신 재컴파일 하는 만큼 실행속도는 감수 해야겠지만요.


2) 가비지 콜렉터 (Garbage Collector)

C언어나 C++언어에선 힙 영역(프로그램 동작중에 메모리 할당이 이루어 지는)에 있는 메모리를 사용하게 되면 무조껀 그 사용했던 메모리를 반환해야 프로그램이 정상적으로 작동했습니다.
하지만 최근의 고급 프로그래밍 언어는 가비지 콜렉터를 지원해주기 때문에 메모리 반환을 하지 않더라도, 메모리를 사용하지 않는다고 판단하면 자동으로 반환하는 그런 기능을 가지고 있습니다. 더이상 개발자가 메모리 사용에 대해서 애지중지 하지 않아도 된다는 예기죠..
참고로 가비지콜렉터는 위에서 예기한 CLR에서 관리하고 있습니다.


 3) 편리한 인터페이스

사실 편리한 인터페이스라는 것이 제생각에는 Visual Studio 2010 덕분이 아닐까 하는 생각입니다만, .NET 프래임워크에 있는 위에서 설명한 CLR 과 더불어 중요한 클래스 라이브러리 덕분이 아닌가 합니다. 위 사진처럼 . 만 찍으면 해당 클래스에서 사용 가능한 모든 맴버변수와 함수가 출력되기 때문에, 굳이 클래스의 이름과 사용 용법을 다 외우지 않더라도 찾아서 적용할수 있기 때문에 개발자에게 공부할수 있는 양(?)을 획기적으로 줄여 주고 있습니다. 물론 클래스를 사용하기에 앞서 어떤 역할을 하는 클래스인지는 잘 알아두어야 겠지만요.. (모르면 그냥 MSDN 고고씽~!)
사설이지만 이건 거의 초등학교때 레고 조립하듯이 부품(클래스)만 역할에 맞게끔 조립만 해준다면 레고 조립체(프로그램)을 만들수 있는 수준까지 올라온것 같습니다.
이러한 인터페이스 때문에 프로그래밍 개발 속도가 획기적으로 빨라졌고, 아마 기획자는 개발자에게 더 많은것을 바랄지도.. (응?;;) 
아무튼 이또한 단점이 있다면.. 많은 DLL을 포함해야 하기 때문에 프로그램이 무거워 진다는 것을 단점으로 들수 있겠습니다.


 4) 타입과 문법이 엄격

사실 이부분은 약간 전문적인 부분이 들어가는데, C나 C++에서는 형 변환이 가능했습니다. 예를 들어 보겠습니다.
int* a = (int *)malloc(1024 * sizeof(int));
char* b = (char *)a;
C++에선 위와 같은 메모리 할당을 위한 형변환이 가능했지만, C#에서는 철저히 금지되고 있습니다. 위와 같은 형변환은 코드 해석에도 난해함을 일으키고, 디버깅 할때도 짜증만 나게 하는 부분중에 하나였지요..

또 하나로는 문법이 엄격합니다. 인터넷을 하면서 본의아니게 가장 많이 접하는 HTML, 즉 태그(Tag)라고 불리우는 문법을 간단하게 적어보겠습니다.
<HTML>
  <TABLE width=200 height="100">
    <TA>
      <TD></TD>
  </TABLE>
</HTML>
위 처럼 HTML 태그를 작성해도 웹에 띄어놓는다면 문제없이 표가 그려지는 것을 확인할수 있습니다. 이렇게 되면 최종 디버깅을 할때 프로그램이 이상이 없기 때문에 그냥 넘어가게 되지만 추후 분명 소스가 길어진다면 다른곳에서 오류가 생기게 되고, 따라서 오류부분을 찾을수 없게 되는 어려움에 빠지게 됩니다.
물론 위 상황은 HTML이라는 극단(?)적인 언어를 선택하게 되었지만, C#에서는 당연히(;;) 이러한 문법에 관해선 철저한 완성도를 요구하고 또 그렇게 작성하지 않으면 컴파일 조차 되지 않도록 구성 되어 있습니다.
(사실 이부분은 다른 왠만한 프로그래밍 언어의 특징이기도 하기 때문에 C# 의 특징이다 라고 하기 어려운것 같습니다 ;;)


 5) .NET 플렛폼의 대표적인 언어로써 .NET 플렛폼의 장점들

C#은 .NET 플렛폼의 대표적인 언어이고, 현재 MS에서 가장 강력하게 추진하고 있는 언어입니다. 따라서 .NET 플랫폼의 모든 장점을 총 망라하고 있는데요, 앞서 예기했던 CLR을 통한 플렛폼 독립성도 그렇고, 가비지 콜렉터를 이용한 메모리 관리도 여기에 포함됩니다. 뿐만아니라 많은 클래스 라이브러리들을 지원하는 것도 여기 포함되구요. 또 닷넷 프레임워크를 지원하는 언어 VB.NET, Managed C++, JScript.NET 등은 CLS(Common Language Specification) 규격을 만족하기 때문에 상호간의 호환이 가능합니다. 어떠한 언어라도 CLS만 만족하면 호환 가능한 언어가 됩니다. 예를들자면 .NET언어와 COM 간의 상호 운용성을 예로 들수 있겠네요.


뿐만아니라 언급하지 않은 많은 장점들이 있습니다만, 지면상 언급하지 못하였고, 이정도만 인지하고 있다면 충분히 C#의 특징을 알고 있다 라고 예기하셔도 될것 같습니다.


추가로 http://ko.wikipedia.org/wiki/C_%EC%83%A4%ED%94%84 링크는 위키백과인데 C#과 기존 C언어의 다른점을 나열하고 있습니다. 참고하실분은 많은 도움 되시길 :)






이번 개인 프로젝트에는 여기까지 알아보려고 합니다.. (계속 파보려고 하니 분량이 .. ㅜㅠ) 다음번에 2부가 가능하다면, 좀더 공부해서 이번에는 개념을 주로 살펴보았다면 다음엔 좀더 개발에 관련된 부분에 대해 설명하도록 해야겠네요 ㅎㅎ

여기까지 읽으시느라 수고하셨습니다!!

혹시 부족하거나 잘못된 부분이 있다면 꼭! 댓글을 통해 FeedBack 부탁합니다

참고: 소설같은 C# 3판, 위키백과