앞서서 이야기한 CLR(Common Language Runtime:공용언어런타임)과 .NET Framework Class Library 이 두가지가 프레임워크의 크게 2가지로 나뉘어진 부분이라 언급했는데 좀 더 자세한 설명을 추가하고 이야기를 하고자 합니다.
CLR
CLR은 코드 관리환경이며 여기서 실행되는 코드를 관리코드(Managed Code)라고 하였는데 이들은 CIL(Common Intermediate Language)라고 하는 중간언어로 구성되어있다. 일반적인 언어는 그 언어의 컴파일러를 통해 각 플랫폼에서 실행가능한 코드(Native Code)로 전환되는데, .NET Framework의 경우는 Managed Code에서 CIL로 변환되고 최종적으로 플랫폼에서 실행가능한 코드(Native Code)로 전환된다.
이러한 부분을 보았을 때 기존의 언어들로 이루어진 코드와 컴파일러를 통해 만들어진 프로그램에 비해 하나의 과정이 추가되어 있기 때문에 시간이 더 걸릴 것이라는 의구심을 가질 수 있다. (물론 사용해보면 알지만 역시 느리긴하다 -_-;) 때문에 MS의 개발자들은 JIT컴파일러의 최적화에 많은 시간을 할애 하였기에 최종 실행시간은 기존의 방법과 거의 동일하다는 결론을 내릴 수 있도록 되었다. (일반적인 인터프리터 코드처럼 느리지 않다)
.NET Code의 커다란 장점은 관리 코드를 만든다는 것이다.
몇가지 관리 코드의 잘 알려진 장점을 살펴본다면
Memory Leak(메모리 누수)가 발생될 수 있는 부분의 원천봉쇄 (예: 포인터 사용금지)
관리 스택, 관리 힙의 사용(불필요한 메모리 공간 사용이 없음)
보안에 대한 부분의 고려
메모리 공간의 자동적 관리기능(Garbage Collector)
등등등~
이런 것들이 주욱 있다 이는 개략적으로만 알아두고 후에 코드를 통한 구현을 하면서 느끼는 것이 낫다고 생각하여 여기까지만 적어둔다.
잠시 이야기가 샜지만; CLR과 관련된 개념은 개략적으로 여기까지이다. 앞에서 말했던 나머지 하나인 .NET Framework Class Library에 대해서 알아보자
.NET Framework Class Library
.NET Framework Class Library는 앞에서 이야기 한 부분을 다시보면
네 가지 요소로 구성되어 있습니다.
FCL에 들어있는 몇가지 네임스페이스를 훑어보고 이번 포스팅을 마무리 하도록 하겠습니다.
네임스페이스 | 내용 |
System | 핵심 데이터 타입과 보조 클래스가 존재 |
System.Collection | Hash테이블, 크기조절이 가능한 배열, 그 외의 데이터 저장소 |
System.Data 이하 | ADO.NET을 이용한 데이터 접근 클래스들 |
System.Drawing | 그래픽 처리를 위한 클래스들(GDI+) |
System.IO | File과 stream I/O 처리를 위한 클래스들 |
System.Net | HTTP등의 네트워크 프로토콜을 캡슐화한 클래스들 |
System.Reflection 이하 | 메타데이터를 조작하기 위한 클래스들 |
System.Runtime.Remoting 이하 | 분산 프로그램을 지원하는 클래스들 |
System.ServiceProcess | Windows 서비스를 지원하는 클래스들 |
System.Threading | 관리 스레드를 생성하는 클래스들 |
System.Web | HTTP를 지원하는 클래스들 |
System.Web.Services | 웹 서비스를 지원하는 클래스들 |
System.Web.Services.Protocols | 웹 서비스 클라이언트를 지원하는 클래스들 |
System.Web.UI | ASP.NET의 핵심 클래스들 |
System.Web.UI.WebControls | ASP.NET 서버 컨트롤 클래스들 |
System.Windows.Forms | GUI프로그래밍을 위한 클래스들 |
System.Xml 이하 | XML을 조작하기 위한 클래스들 |
코드가 안나오니까 지루하네요 다음 주 부턴 코드가 슬슬 나오는 포스팅을 시작하도록 하겠습니다~
Reference Book : Programming Microsoft .NET 정보문화사
p . s >
아..그리고 하나 시작할 때 목적을 빼먹었는데...
이 포스팅을 보면 다른 책 안보고 이해와 코드를 짤 수 있도록 하는 것이 목적입니다. (
HW만 전문적으로 하시는 분이나 이런 부분은 프로그래머가 아니면 모르는 부분이다 알려달라 하시는 분이 있으면 이미 했던 포스팅이라도 수정 추가를 하려고 했던 부분이라 이런 부분을 더 알고 싶다 등의 리플을 달아주시면 피드백이 되서 감사할 것 같습니다~