안녕하세요 삽잡이입니다.
이번 시간에는 기본적인 닷넷 프레임워크의 기본에 대해서 알아보도록 하겠습니다.
자... 간단하게(?) .Net에 대해서 얘기를 해보도록할까요?
닷넷이란 용어는 굉장히 추상적인 단어입니다. MS사에서 뭔가 새로운 변화를 시도한 작품이지요...
닷넷은 99년대 말에 나와서 2000년대에 발표를 했죠...
뭐... MS사에서 자바 및 오픈 소스 진영에 위협을 느껴서
한번 '싹다 바꿔보자!' 하면서 MS사가 지향하는 발전 방향을 바꿔보자하며 나온 것이 .NET이지요...
닷넷이 2000년대 발표가 됬는데, MS의 비전으로써 발표가 됬습니다.
뭐... 추상적으로 개발과 관련된 여러 사항의 조합 및 통합을 가리켜서 '닷넷'이라고 부르는데요,
닷넷에 포함되어있는 것중 하나가 바로 우리가 알아볼 '닷넷 프레임워크'라고 부릅니다.
컴퓨터 프로그램과 관련있는 내용...
즉, 닷넷의 여러 내용 중 컴퓨터 프로그램 개발과 관련된 내용의 닷넷이라고 하면
바로 '닷넷 프레임워크'를 말하는 것입니다.
닷넷이 뭔지 정의를 내리기에는 어렵지만,
우리에게는 개발과 관련된 여러 사항들의 조합 및 통합을 가리켜
닷넷이라고 부른다고 했었습니다.
자... 그러면 생각해봅시다...
개발을 하려면 기본적으로 뭐가 필요한가요?
개발에 필요한 여러가지 사항들이 있어야되는데 기본 중 기본은 바로 '개발 환경(IDE)'입니다.
통합된 개발 환경을 말하는 것이지요...
이 개발 환경의 정식 이름은 바로 Visual Basic .Net이라고 부릅니다.
자... 아무튼 개발환경에 .Net 프레임워크가 들어갑니다.
닷넷에서는 OS 위에서 동작하는 가상 머신이 있습니다. 이를 닷넷에서는 CLR이라고 부릅니다.
그리고 VS.NET에서 프로그램을 실행시키려면 CLR에서 동작할 라이브러리가 필요합니다.
이는 BCL이라고 부르지요...
CLR에서 동작 할 라이브러리를 통해 어플리케이션들을 개발하는 것입니다.
이 처럼 닷넷 프레임워크의 핵심이라고 하면 크게 세가지라고 말할 수 있습니다.
우선, 개발을 하기 위한 'VS.NET'.
이곳에는 예외처리, 디버깅, 소스 관리, 형상 관리 등 여러 컴파일러들을 내장하고 있습니다.
그리고 'CLR'. 이 CLR은 OS 위에서 동작하는...
즉, 어플리케이션이 어떤 OS에서든지 동작할 수 있도록 추상화 레벨을 제공해줍니다.
뭐... 가상 머신을 제공해주는 것이지요...
마지막으로 'BCL'.
우리가 API라고 불렀던 프로그램과 인터페이스를 하기 위한 라이브러리입니다.
예전에 Window API에 대해서 배울 때 사용했던 그 API 함수가
닷넷에서는 BCL에 해당된다고 생각하시면 됩니다.
닷넷은 모두 다 클래스로 만들어져있습니다.
한마디로, 닷넷은 객체 지향 언어를 위한 라이브러리를 가지고 있다 이겁니다...
객체지향 언어가 아닌 언어들을 어떻게되는것인가요?
사실은... 중간에 인터페이스를 통해서 사용하는 것일 뿐 실질적으로는 모두 클래스를 사용할 수 밖에 없습니다.
아무튼... 이 셋이 핵심이라고 볼 수 있습니다.
우리가 보통 닷넷을 설치하라고 하면 여기서 말하는 닷넷은 CLR을 말하는 것입니다.
예를 들어 OS에 닷넷 프레임워크 4.0을 설치하라고 하면 CLR을 설치하라는 것이지요...
개발자에게는 개발과 관련된 사항들을 통합해서 .Net Framework라고 부르는데,
일반 사용자들에게는 .Net Framework란 CLR을 말하는 것이지요...
이건 뭐... Java에서 JVM을 설치하는 것과 같습니다...
이 CLR을 설치하는 이유는
우리가 만든 어플리케이션을 닷넷 어플리케이션이라고 부르는데 이를 동작시키기 위해서 설치하는 것입니다.
닷넷 어플리케이션은 CLR이 있어야 동작할 수 있기 때문이죠...
이 CLR이 없으면 이를 동작시키기 위한 놈을 따로 만들어줘야합니다...
CLR에도 버전이 있습니다.
뭐 현재는 최신 버전이 4.5인데요... 만약 CLR 3.0 버전을 장착하고 있다면,
어플리케이션이 3.0버전의 호환성을 가지고 있다면 상관없겠지만
4.0 버전의 호환성을 가지고 있다면 문제가 생깁니다...
왜냐하면 어플리케이션이 4.0 호환성을 가지고 있다면,
어플리케이션은 4.0 버전의 기능을 가지고 있다는 것인데...
3.0 버전의 CLR에서는 사용을 할 수 없기 때문입니다...
모르지요... 3.0이 더 업그레이드된 4.0을 어찌 알겠습니까...
아무튼... 여담으로 말씀드리자면, CLR의 최신 버전은 현재로써는 4.5입니다. (2015-10-21 기준)
C#은 5.0 버전이 CRL 4.5버전의 내용을 지원한다고 보시면 됩니다...
닷넷의 경우 OS위에 CLR이 있고 그 위에 어플리케이션이 있을 수 있습니다...
이 어플리케이션은 기존 OS 위에서 동작하는 APP과 차이가 있지요...
CLR 위에서 노는 어플리케이션은 .Net 어플리케이션이고,
기존 OS위에서 동작하는 어플리케이션은 Native 어플리케이션이라로 부릅니다...
Native 어플리케이션이나 .Net 어플리케이션이나
둘 다 실행파일은 .exe, 라이브러리는 .dll의 확장자를 가집니다.
즉, 외형적으로 구분을 할 수 없습니다... 외부를 까봐야 구분할수 있게 되는 것이지요...
닷넷에서는 어플리케이션을 하나 만드는데 수 많은 언어를 통해 개발할 수 있습니다.
C++, J#, C#, Python 등등... 대략 50여개의 프로그램 언어로
닷넷 어플리케이션을 개발할 수 있다는 것입니다.
그런데 사실 C#이 80%, VB.NET이 20% 정도 차지합니다...
처음 .NET이 나왔을 때에는 아주 기가 막혔습니다...
C++ 잘하는 개발자는 C++로, Python 잘하는 개발자는 Python으로
닷넷 어플리케이션을 개발하면 됬었기 때문입니다...
그런데 말입니다... 사용하는 문법은 똑같지만, 문법만 잘 안다고 프로그래밍 언어를 잘할까요...
언어만 아는 것과 언어로 프로그래밍을 하는 것은 다릅니다.
예를 들어 Java를 사용해서 프로그램을 잘 짰다고 생각해봅시다..
문법 공부를 하지 않고 Java 만을 가지고 .Net 프로그램을 할 수 있다는 소리인데...
지금까지 Java언어로 프로그램을 구현하며 자바 라이브러리를 써왔지 않겠습니까..
그런데 .Net으로 오면 이게 똑같겠냐 말입니다...
라이브러리를 .Net에서 제공하는 것을 써야되지 않겠습니까...
문법만 제공하면 뭐하냐 이겁니다...
기존에 익숙하게 다루던 라이브러리 및 개발 경험을 토대로 개발을 하는데 탄력을 얻는것이지...
즉, 의미가 없다 이겁니다...
결론을 말씀드리자면, 모든 언어로 .Net을 사용할 수는 있겠지만... 뭐... 쓰겠습니까..
MC++ 이라고 해서 Managed... C++....
뭐.. 성능에 민감했던 어플리케이션을 개발 할 때에는
닷넷의 이점을 얻으면서 C++의 성능을 얻고자 해서 만든 언어가 있었지요...
그런데 뭐... 사용을 했었어도...
지금은 결국 C#과 VB.NET만 사용한다고 보셔도 무방합니다.
C#은 .NET이 만들어지면서 이를 통해 개발을 하려고 만들어진 언어입니다.
C#은 Native 어플리케이션을 개발할 수 없지요...
오직 .NET 어플리케이션만 개발 할 수 있다 이겁니다.
그런데 이 닷넷 환경에서 만들어 놓은 어플리케이션의 비중을 보면
우리가 만들어 놓은 것 10%
그리고 BCL 이라고 하는 닷넷에서 기본적으로 제공하는 라이브러리가
나머지 %에 해당할것입니다.
API를 배울 때 생각해봅시다... 우리도 제공해주는 API를 무지막지하게 쓰지 않았습니까...
아무튼... 우리가 실질적으로 개발하는 부분은 일부이고
나머지는 BCL에서 가져와서 어플리케이션을 개발하게 되는 것입니다.
그렇다면 여기서 알 수 있는 사실은, BCL 없이는 닷넷 어플리케이션이 동작하지 않는 다는 것입니다.
우리는 가져다 써서 개발하는 것이기 때문이지요...
그러다 보니 어떤 언어로 만들던지 .Net 어플리케이션은 CIL이라고 해서
명령어가 CIL 코드로 만들어집니다.
OS의 명령어가 아닌 중간 언어라는 것이지요...
즉, 공용 일반적인 중간 언어라는 CIL 코드가 만들어지는 것입니다.
중간언어는 뭔데 그럴까요...
이 중간 언어라는 놈은 CLR이라는 가상 머신 위에서 해석이 되어 진짜 OS의 명령으로 바뀝니다...
뭐.. OS에 맞는 명령으로 변환된다 이거지요...
CLR도 컴파일러라고 부릅니다. Gitter라는 컴파일러라고 부르지요..
정리해봅시다...
언어로 어플리케이션을 만들면 이 어플리케이션의 확장자는 .exe나 .dll 입니다.
이 확장자는 프로그램 언어로 만들 때 컴파일을 통해 만들어지지요...
따라서, 각 언어에 맞는 컴파일러가 필요합니다.
컴파일을 통해 .Net 어플리케이션이 만들어지는 것이지요...
그리고 이 .Net 어플리케이션에 들어있는 명령어들을 CIL, CIL 코드라고 부르지요...
닷넷을 배우기 이전을 생각해봅시다...
우리가 API라던가 MFC에서 컴파일을 하면 .exe, .dll 파일이 만들어졌었습니다.
이 안에 들어있는 명령어 및 코드들을 어셈블리, 바이너리 코드라고 불렀지요...
.Net 환경에서는 바이너리이긴 하지만 .Net 바이너리라고 부릅니다.
기존에는 OS 바이너리를 어셈블리를 불렀는데
닷넷의 어셈블리는 용어 자체가 달라진것입니다...
비슷한 개념을 갖고 있어도 특정 분야나 특정 플렛폼에 가게 되면
그에 맞게 해석되는 경우에 의해서 이렇게 용어가 달라지는 것이지요...
뭐... 원천적인 개념은 바뀌지 않더라도 구체적으로는 의미가 조금씩 바뀌어지는 것이지요...
아무튼... C#, VB.NET 언어를 통해 어플리케이션을 만들고 나면
.exe ,.dll 확장자의 파일을 우리는 닷넷 어플리케이션이라고 부릅니다.
C# 컴파일러에 맞는 이진 코드로 변환이 된것이지요...
그런데 OS는 해석하지 못합니다. 닷넷에서 해석할 수 있는 것이지요...
이는 CLR에서 컴파일이 되는 것이구요...
C#으로 어플리케이션을 만드려면 C#에 맞는 컴파일러,
VB.NET으로 어플리케이션을 만드려면 VB.NET에 맞는 컴파일러가 필요합니다.
그리고 이들에 의해서 닷넷 어플리케이션이 만들어지는 것이지요...
OS 위에서 이 명령어들을 어셈블리 코드, OS 바이너리 코드라고 부르는데
.NET 위에서는 CIL 코드라고 부릅니다.
자바와 비슷합니다...
그런데 자바는 자바 언어로 동작하는 가상 머신에서 동작하는 것이구...
닷넷은 여러 언어로 개발을 하더라도 CLR이라는 가상 머신을 통해 동작할 수 있다 이겁니다...
이번 시간은 여기까지 하도록 하겠습니다.
이상 삽잡이였습니다!
<참고 : C# and the .Net 4 Platform>
'삽질의 현장 > - .NET' 카테고리의 다른 글
#006_닷넷(.NET)_.Net Framework 기본 - namespace & 타입 & 가시성 (0) | 2015.10.22 |
---|---|
#005_닷넷(.NET)_.Net Framework 기본 - 문자열 (1) (0) | 2015.10.22 |
#004_닷넷(.NET)_.Net Framework 기본 - 인터페이스 (0) | 2015.10.22 |
#003_닷넷(.NET)_.Net Framework 기본 - 어셈블리 (0) | 2015.10.21 |
#002_닷넷(.NET)_.Net Framework - 기본 & BCL & CTS & CLS (0) | 2015.10.21 |