본문 바로가기

Programming/C#/Xna/Kinect/WPF

[C#] 컴파일러와 dll파일


출처 초천재의 블로그 | 초천재
원문 http://idkhs04.blog.me/40108862362

1. 컴파일러

 

프로그래밍 언어를 한답시고 컴파일러를 모른다는것은

영어알파벳 자체를 모르는 사람이 가이드없이 영어권 나라에 가는 경우입니다.

물론.....사람사는것은 워낙 변수가 많아서 바디 랭귀지가 가능하긋지만 그냥 받아들였으면 합니다.

 

a. 컴파일러란 대체 뭔가?

 1. 프로그래밍을 한다는것은 컴퓨터 cpu에게 명령을 하기위해서 인데,

    실제적으로 은밀하게 보자면 우리는 cpu에게 우리가 직접적으로

    명령문을 내리기 위해서가 아닙니다

    그럼 누구에게 알아듣는 코드를 작성한다는것일까요?

    컴파일러입니다. 컴파일러가 없는 프로그래밍 랭귀지는 거의 없을겁니다.

    물론....초저급언어(low level language)인 어셈블리어나 기계어는 작성해서

    바로 넣지만 말이죠. 코드가 16진수나, 0,1로만 이뤄져있지요

    가끔 컴파일에러가 나서 디버깅 창을 열면 볼수가 있습니다. 어셈블리코드;;

    마치....암호같습니다...

 

2. 이 컴파이일러는 워낙 똑똑해서 사람이 치는 코드도 인식하고 이것을 기계어로 바꿔줍니다.

   한국사람이 한국어로 통역관한테 말을 하면, 잘 번역해서 영어로 번역해서 말해줍니다.

 

     결론은 우리는 컴파일코드를 작성한다고 해도 과언이 아니죠

 

b. 닷넷에서의 컴파일러란?

   하지만 C#.NET은 좀다릅니다.

   바로 MicroSoft에서는 통합솔루션이라는 개념으로 닷넷 프레임워크에서 동작하는

   실행파일을 만들기 위한 닷넷언어들만의 컴파일러를 만들었지요

   그것이 CLR입니다. 즉, Common Language Runtime 인데,

   우리가 C#으로 작성한 코드를 IL(중간언어)로 바꿔줍니다.(CIL, MSIL 이라고도 합니다)

 

   그리고 이 IL언어로 실행파일로 저장을 하고

   우리는 닷넷프레임워크상에서 실행을 하는거죠

   여기서 끝이면 좋겠지만 이 IL자체로써 cpu에게 명령을 내릴순 없습니다.

   이 변환된 코드는 다시 JIT(Just In Time) 컴파일러로 변환을 하게 되어 직접적인 기계어로 만들어져

   cpu에게 인식됩니다. 물론 이것도 CLR로 컴파일이 되는거죠

 

  C#코드  -> (CLR컴파일)  -> IL 코드  -> JIT 컴파일(CLR)  ->  기계어(네이티브어)

 

우리가 C#프로그램을 만들려면 C#컴파일러를 사용해야하며,

상대방에 컴파일러 뭐 쓰냐란 질문이 나온다면,,,,

 1. C#컴파일러

 2. CLR컴파일러

 3.  비쥬얼 스튜디오 닷넷  버전

 이 3가지 말은 거의 같다고 생각해도 무방하겠네요

 

 

2. dll 파일 (Dynamic Link Library) : 동적링크라이브러리 파일

 

가끔씩 윈도우의 이상한 폴더(?)ㅋ 폴더를 이리저리 다니거나, 간단한 게임을 받으면

dll 파일이라고 있을겁니다. 이것이 없으면 실행파일이 실행이 되지가 않지요

물론 더블클릭해도 내용을 볼수가 없습니다.

즉...코드가 은닉되어 있기때문에, 어떻게 구현되있는지 알수가 없지요.

이것은 다른관점으로 볼때, 프로그래머의 능력을 은폐시킨것과 같습니다.

나아가 프로그래머의 재산을 보호한것이기도 합니다.

 윈도우 운영체제에만 있는것으로 기능적으로 본다면 참으로 괜찮은것 같습니다.

 

2-1. dll파일의 정의

  소프트웨어를 몇개의 파일로 나누어 따로 저장해서, 필요한것만 메모리에 로드시켜 사용합니다.

  이것은 기능이 특정기능이라면 다른 응용프로그램에서 사용이 가능합니다.

  다른 프로그램인데 똑같은 기능을 쓴다면, 또 다시 코드를 작성해야하는데, 이는 시간과,

  메모리 등을 절약이 가능하고,  경제적인 프로그램 작성이 가능하다는것입니다.

 

1. 프로그래머의 코드 은닉, 재산보호

2. 효율적인 프로그램

    - 코드의 재사용, 메모리/시간 절약