목차

    닷넷(.NET) 이란?

    닷넷 프레임워크(.NET Framework)는 마이크로소프트사에서 제공하는 윈도우 프로그램 개발 및 실행환경입니다. 네트워크 작업, 인터페이스 등의 많은 작업을 캡슐화하여 코딩의 효율성을 증대시켰습니다. .NET의 특징은 CLS(닷넷 프레임워크의 언어가 반드시 지켜야 하는 언어 스펙)을 따르는 언어라면 어떠한 언어라도 닷넷 프레임워크에서 실행 가능하며 CLR이라는 가상 기계 위에서 작동하기 때문에 플랫폼에 독립적이며 궁극적으로 프로그래머가 코딩(특히 윈도우 프로그램)을 하는데 더 편한 환경을 제공해줍니다.

    닷넷(.NET)이 나온배경 

    2000년대 들어서며 썬마이크로시스템즈(현오라클)의 자바가 새로운 차세대 언어로 각광받으면서 마이크로소프트측에서도 자바의 장점을 수용하여 새로운 언어를 만들었는데요. 이것이 바로 C#이라는 언어입니다. C#이라는 언어와 .NET이라는 개발 프레임워크를 한데 묶어 자바진영에 대항하려고 했던것이죠. 결론적으로는 절반의 성공을 이루었지만 결과적으로 자바진영을 이기는데는 실패하였습니다.

    현시대에서의 닷넷(.NET)과 C#언어 

    마이크로소프트에서 배포한 C# 언어가 현시대에서는 많이 소외된 부분이 있는점은 사실입니다. 이미 자바가 웹으로는 JSP, 모바일에서는 Android등 여러방면에서 압도하고 있는점이 사실이죠. 파이썬이 인공지능등의 4차혁명이슈를 타고 최근 급격히 상승세인 점도 큰 부담일 것입니다. 더 입지가 좁아들 수 밖에 없죠 하지만! C#의 장점도 물론 있습니다. 바로 윈도우 프로그램 개발에 있어 최적화 되어있다는 점이죠. 현시대 대부분의 컴퓨터 OS는 윈도우를 사용합니다. 윈도우는 마이크로소프트사에서 제작하였고 그렇기에 C#는 윈도우 프로그램개발에있어 최적의 효율을 자랑합니다. 대부분의 윈도우 프로그램개발자들이 .NET프레임워크를 사용하고 있습니다. C#언어의 입지가 좁아짐에 따라 C#개발자들의 입지도 좁아진것도 사실이긴 하나 그와 동시에 요새 프로그래밍 교육과정도 대부분 자바중심으로 이루어져있어 자바 개발자들이 공급이 많이 되는 추세입니다. 윈도우를 이길만한 OS가 나오지 않는 이상 C#의 사용처는 분명히 있을것입니다. 앞으로는 자바개발자들이 분명 더 경쟁력이 있는 것은 부정할 수 없으나 C#개발자들이 희소성이 생기는 시점도 분명히 올 것 이라고 저는 생각하고 있습니다.

     

    그렇다면 C# 이란?

    마이크로소프트는 닷넷 프레임워크를 출시하면서 잘 표현할 수 있는 언어가 필요했고, 그에 따라 탄생한 언어가 C#입니다.
    C#은 닷넷을 위해 태어났고, 닷넷과 함께 발전해 나갑니다. C#의 시작은 Visual Studio.Net 2002,와 함께 릴리즈된 C# 1.0 입니다. 현재는 C# 8.0 까지 나온 상태입니다.
     
    C#은 닷넷 프레임워크를 기반으로 IL코드(C#코드와 기계어 사이의 중간언어)를 생성하는 컴파일러에 불과합니다. 따라서 '문법적인 요소'를 제외하고는 닷넷 프레임워크의 영역에 해당하기 때문에 C#을 배운다는 것은 즉, 닷넷 프레임워크를 배운다는 의미입니다. 이말은 C#을 배우면 응용 프로그램의 유형에 따라 다양한 선택권을 가지게 됩니다.

    닷넷 프레임워크 - Windows Form, WPF
    닷넷 코어 - 콘솔, 웹 앱, 클라우드, 윈도우 폼
    자마린 플랫폼 - 모바일(IOS, Android) 앱, 윈도우 스토어 앱
    Unity 게임 엔진 플랫폼 - 모바일 게임 개발

    .NET Framework 구조

    • ASP.NET Web Forms Web Services : Web service, Web apps 개발
    • Windows Forms : 윈도우용 응용 프로그램 개발
    • ADO .NET and XML : XML 및 데이터베이스 활용
    • Base Class Library : CLR 지원을 위한 핵심 클래스 라이브러리

    Common Language Runtime(CLR)

    .NET 언어로 작성된 프로그램을 실행하고 관리하는 실행환경이며 Java의 Virtual machine과 비슷합니다.

    CLR은 .NET에서 동작하는 프로그램을 적재하고, 프로그램의 동적 컴파일, 프로그램의 실행, 메모리관리 (Garbage Collection), 프로그램의 예외처리, 언어 간의 상속 지원, COM과의 상호 운영성 지원 등을 가능하게 합니다. .NET 언어 즉, C#뿐만 아니라 위에서 나열하였던 VB .NET 등 .NET 표준을 따르는 다양한 언어들은 CLR을 통해 프로그램을 실행할 수 있게 됩니다.

    이것이 가능한 이유는 Intermediate Language (IL, 중간언어) 라는 기계어로 변환하기 쉬운 중간 단계의 언어로 .NET에서 실행되기 위해 IL 형태로 컴파일을 하는데 IL을 기계어로 바꾸는 번역기만 제공되면 어떤 플랫폼에서도 실행가능합니다. JIT (Just-In-Time) 컴파일러를 통해 IL을 동적으로 컴파일하는데 .NET 에서는 이와같이 프로그램을 2번 컴파일 합니다. Assembly는 이 때 IL로 컴파일된 결과 파일들을 패키징 한 것을 말합니다.

     

    또 .NET 언어가 지켜야 하는 스펙으로 Common Language Specifications (CLS)로 다른 .NET 언어로 작성된 것도 호환되어 동작 가능하게 합니다. 이 과정에서 Common Type System(CTS)라는 .NET 언어마다 Data type이 다를 수 있는데 이를 언어나 시스템 환경에 관계없이 동일한 Data type을 유지하기 위한 규약이 사용되기도 합니다.

    간단히 요약하면, C# 컴파일러는 우리가 작성한 코드를 IL로 작성된 실행파일을 만들게 되고, 이 파일을 실행시키면 CLR이 IL을 읽어 다시 OS에 이해할수 있는 코드로 컴파일하여 실행시킵니다. 이렇게 서로 다른 언어가 만나는 지점이 IL언어이고, CLR이 다시 자신이 설치되어 있는 플랫폼에 최적화시켜 컴파일한 후 실행하게 됩니다. 이를 통해 플랫폼에 최적화된 코드를 만들어 내는 장점이 있으나, 실행시에 이루어지는 컴파일이 부담일 수 있습니다.

     

     

    Referece

    출처: https://2-nan.tistory.com/40 [이난의 개발자 블로그:티스토리]

    https://laboputer.github.io/csharp/2018/06/07/create-a-installer/

    + Recent posts