티스토리 뷰

이 글은 닷넷 프레임워크와 관련된 용어들을 정리하는 글입니다.

평소 C#을 쓰면서 닷넷 프레임워크라는 말을 많이 들었지만 정확히 어떤 뜻인지는 잘 알지 못했습니다.

 

최근 시간을 들여 책을 읽고 검색을 하면서 닷넷 프레임워크에 대해 알아보았습니다.

배운 내용을 토대로 닷넷 프레임워크가 무엇인지, C#과 닷넷 프레임워크가 어떤 관계인지 간략하게 나마 설명해보겠습니다. 

 

닷넷 프레임워크

닷넷 프레임워크는 마이크로소프트웨어에서 발표한 응용 프로그램 개발 환경입니다.

 

사실 위 문장만 보면 닷넷 프레임워크를 이해하기가 쉽지 않습니다.

자세한 내용은 차차 알아보기로 하고 가장 먼저 기억해야 할 것은 닷넷 프레임워크는 환경이라는 것입니다.

 

일반적인 네이티브 언어(예를 들어 C++)로 만들어진 프로그램들이 운영체제에서 곧바로 실행되는 것과 달리,

닷넷 프레임워크를 기반으로 만들어진 응용 프로그램은 반드시 닷넷 프레임워크가 미리 설치된 환경에서만 실행됩니다.

따라서 C#으로 프로그램을 만들고 배포하면 사용자들은 해당 버전에 맞는 닷넷 프레임워크를 설치해야 프로그램을 돌릴 수 있는 것이죠. 보통 윈도우를 설치하면 기본적으로 닷넷 프레임워크가 설치된다고 합니다.

 

이렇게만 보면 닷넷 프레임워크가 왜 존재하는지 의문이 들 수 있습니다.

닷넷 프레임워크가 미리 설치된 환경에서만 실행된다면 오히려 더 불편한거 아닌가?라는 생각이 들 수 있죠.

하지만 사실 닷넷 프레임워크는 다른 네이티브 언어(C++등)가 가지고 있는 문제를 보완하기 위해 나왔습니다.

 

C++등의 언어는 프로그래머에게 많은 기능을 제공하지만 반대로 보안, 메모리 관리 등 민감한 부분도 프로그래머가 직접 컨트롤 해야 합니다. 이는 프로그래머에게 많은 부담을 안겨주죠.

그래서 이런 부분들은 또 다른 뭔가를 만들어서 자동으로 관리해주도록 하자라는 아이디어가 나왔고 그것이 구현된 것이 닷넷 프레임워크인 것입니다.

 

Common Language Runtime

닷넷 프레임워크 관련된 문서를 보다 보면 CLR(Common Language Runtime)이라는 것을 많이 볼 수 있습니다.

CLR은 닷넷 프레임워크의 굉장히 큰 부분을 차지하는 것으로 특정 역할을 하는 프로그램이라고 보시면 됩니다.

 

CLR의 가장 큰 두 가지 기능은

1. 중간 언어(CIL: Common Intermediate Language)를 JIT(Just In Time) 컴파일러를 이용해 기계어로 변환하는 것

2. 가비지 수집기(GC: Garbage Collecor)를 제공해 동적 메모리 할당 및 회수를 지원하는 것

입니다.

 

또 새로운 단어들이 많이 나왔습니다. CIL, JIT와 GC이죠

GC, JIT는 할 이야기가 좀 많기 때문에 따로 알아보기로 하고 일단 CIL에 대해서 알아봅시다.

 

Common Intermediate Language

CIL(줄여서 IL)은 말 그대로 일종의 중간 언어입니다.

Java에서 말하는 바이트 코드와 비슷한 개념이라는 말이 있더군요.

Java로 만들어진 프로그램이 바이트 코드로 한 번 바뀐 후 다시 기계어로 번역된 후 실행되는 것처럼

C#으로 만들어진 프로그램은 IL로 바뀐 후 CLR에 의해서 기계어로 번역된 후 실행됩니다.

 

CIL이 특이한 점은 C# 외에도 다른 언어들도 CIL로 번역될 수 있다는 점입니다.

당연히 모든 언어들이 CIL로 번역이 가능한 것은 아니고 미리 CIL로 번역될 수 있도록 만들어진 언어만 가능합니다.

그리고 이렇게 CIL로 번역될 수 있는 언어들을 닷넷 호환 언어라고 합니다.

닷넷 호환 언어에는 C#, VB.NET, J# 등이 있다고 합니다.

 

닷넷 호환 언어로 만들어진 프로그램이 실행되는 과정을 표로 한 번 알아봅시다.

닷넷 프레임워크에서 만들어진 프로그램은 총 2번 컴파일됩니다.

 

첫 번째 컴파일은 Source Code를 IL로 바꾸는 것이고 두 번째 컴파일은 IL을 Native Code로 바꾸는 것입니다.

 

여기서 Source Code는 C#,VB.NET 등 닷넷 호환 언어이고 Language Compiler는 각 언어에 맞는 컴파일러를 뜻합니다.

위에서 보이다시피 첫 번째 컴파일은 각 Language Compiler가 담당하고 두 번째 컴파일은 CLR(JIT)가 담당합니다.

 

대체적으로 첫 번째 컴파일이 더 느리고 두 번째 컴파일이 더 빠릅니다.

배포될 때는 이미 첫 번째 컴파일이 끝난 채로 배포되게 됩니다.

 

닷넷 호환 언어로 만들어져 배포된 프로그램이 실행되는 과정을 표로 표현하면 아래와 같습니다.

사용자는 단순히 .exe 파일을 더블 클릭해서 실행하지만 사실은 이런 식으로 실행되는 것이지요.

 

참고 책: 시작하세요 c# 7.3 프로그래밍

 

위 그림에서 설명하는 것처럼 빌드를 통해 소스 코드는 EXE 파일로 바뀌고 C# 소스 코드는 CIL로 만들어지게 됩니다.

 

빌드가 끝난 후 EXE 파일을 실행하면

1. 같이 탑재된 CLR 로드하는 코드를 통해 CLR을 메모리에 적재시켜 실행합니다.

2. 그 후 CLR이 IL 코드를 기계어로 컴파일하고 실행되게 됩니다.

 

사용자 입장에서는 빌드가 끝난 결과를 받기 때문에 외형상으로는 EXE/DLL로 기존 프로그램과 동일한 구조이지만 내부적으로는 CLR이 실행되고 EXE/DLL에 있는 닷넷 코드가 실행되는 형태인 것입니다.

 

결말

여기까지 과정을 통해 닷넷 프레임워크 용어들에 대해서 알아 보았습니다.

 

이 외에도 많은 용어들이 있지만 그 중 빈도가 높게 등장하는 "닷넷 프레임워크", "CLR", "CIL", "닷넷 호환 언어" 등에 대해 알아봤습니다.

 

C#과 닷넷 프레임워크의 관계에 대해서도 알게 되었고 닷넷 호환 언어로 만들어진 프로그램이 어떤 방식으로 실행되는지 간단히 알아 보았습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함