1. .Net Framework
닷넷 프레임워크는 2002년 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 프로세스 가상 머신에 속한다.
닷넷 프레임워크를 기반으로 만들어진 응용 프로그램들은 반드시 닷넷 프레임워크가 설치된 환경에서만 실행할 수 있다.
2. CLR
***공용 언어 런타임(Common Language Runtime)***은 CLI 사양을 따르는 가장 대표적인 VM으로서 마이크로소프트가 개발하였다. CLR은 IL을 JIT 컴파일러를 이용해 기계어로 변환하고, ***가비지 수집기(Garbage Collector)***를 제공해 동적 메모리 할당 및 회수를 지원한다.
3. CTS
***공용 타입 시스템(Common Type System)***은 닷넷 호환 언어가 지켜야 할 타입의 표준 규격을 정의한 것이다. CTS는 런타임에 형식을 선언하고 사용 및 관리하는 방법을 정의하고 있다.
- 닷넷 호환 언어 : IL(CIL 또는 MSIL)코드로 컴파일 가능한 언어.
4. 어셈블리
C#으로 프로그램을 하는 경우, 대게 EXE 또는 DLL 파일을 만들게 된다. 닷넷에서는 이런 실행파일을 ***어셈블리(Assembly)***라고 한다.
5. Managed, Unmanaged
Managed 코드 는 닷넷 프레임워크 환경에서 개발된 코드를 지칭한다.
닷넷 프레임워크의 핵심인 CLR은 어셈블리가 실행되는 동안 형식 안전성, 메모리 관리, 쓰레드 실행 및 코드 실행 관리 및 시스템 서비스를 하는데 닷넷 프레임워크 환경에서 개발된 코드는 모두 CLR 기반으로 동작하기 때문에, CLR에 의해서 관리되는(Managed) 코드라고 한다.
Unmanaged 코드는 닷넷이 발표되기 이전의 코드와 Unmanaged Code로 컴파일된 코드를 지칭한다.
IL과 같은 중간언어가 없고, 실행파일(어셈블리)의 메타데이터에 CLR 헤더가 없다. CLR에 의해서 관리되지 않는 코드라서 비관리(Unmanaged) 코드라고 한다.
6. C#, .NET Framework, Visual studio
C# 버전별 추가 기능
Q) 프레임워크란?
소프트웨어의 구체적인 부분에 해당하는 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것
Q) 라이브러리와 차이는?
라이브러리는 자주 쓰일 만한 기능들을 모아놓은 클래스들의 모음집.
라이브러리는 기반 설계가 없음.
라이브러리는 새로운 기능 구현을 위해 클래스들의 상관관계를 몰라도 되고, 특정 패턴에 따라 구현할 필요가 없다.
프레임워크는 구조화되고 확장 가능한 기반 코드를 제공하고, 공통 문제 해결을 위한 라이브러리를 제공
Q) 왜 프레임워크를 사용하는가?
맨땅에 헤딩하지 않기 위해, 반복적인 작업을 없애기 위해, 개발 생산성 증대, 어플리케이션 품질 향상.
프레임워크에서 제공하는 코드 패턴을 통해 개발수준을 평준화하고 좋은 성능을 유지 할 수 있다.
Q)프레임워크의 단점?
프레임워크에 대한 이해와 익숙해지는 시간이 필요함.
Q) 닷넷?
마이크로소프트가 인터넷 기능을 강화한 소프트웨어로 디지털 세상을 하나로 묶는다는 계획을 발표. 개별적으로 실행하던 인터넷과 각종 프로그램을 유기적으로 연결하는 일련의 소프트웨어 개발 + 웹서비스 계획을 일컫는 말. 닷넷의 넷은 인터넷을 이용한 네트워크를 뜻한다.
닷넷의 핵심 목표는 웹 서비스를 운영체제, 장치, 언어에 관계없이 인터넷을 통해 응용 프로그램에서 데이터를 통신하고 공유하려고 하는 것. 마이크로소프트는 닷넷의 전략을 실현하기 위해 '닷넷 프레임워크' 플랫폼 개발. 마이크로소프트는 2000년 11월 첫베타 버전 출시후 2002년 닷넷프레임워크 1.0을 정식 출시하였고, 현재까지 계속 버전 업.
Q) 출현 배경?
인터넷 등장, 모바일 기기에서 개발 편의성 증대, Java에 대항.
Q) 닷넷 프레임워크?
마이크로소프트의 닷넷 전략을 위해 개발된 플랫폼. 여러 기술들이 집약됨.
운영체제, 장치에 관계없이 응용 프로그램 실행이 가능한 공통 언어 런타임(CLR:Common Language Runtime).
CLR 기반에서 동작하기 위한 프로그래밍 언어의 최소 규칙인 공통 언어 명세(CLS:Common Language Specification).
닷넷 프로그래밍 언어 간에 호환성을 위한 공통 타입 시스템(CTS:Common Type System).
Q) 어떻게 개발하는지?
닷넷 프레임워크를 기반으로 하는 응용프로그램 개발도구 Visual Studio.NET을 발표 현재 Visual Studio 2015까지 버전 업.
Q) 프로그램은 어떻게 동작하는가?
닷넷 프레임워크 환경에서 코드를 작성하고 컴파일하면 실행파일(EXE, DLL)이 생성된다. 이 실행파일은 PE32(또는 PE32+) 헤더와 CLR 헤더, IL(또는 CIL, MSIL로 불림) 코드, 메타데이터, 어셈블리 매니페스트, 리소스 등으로 구성되어 있다. 이렇게 생성된 실행파일(EXE, DLL)을 어셈블리(Assembly)라고 부른다.
이 어셈블리를 실행하게 되면 어셈블리에 포함된 CLR 헤더 정보를 기반으로 해당 버전의 닷넷 프레임워크의 CLR이 구동된다. CLR은 어셈블리에 포함된 메타데이터에 클래스와 멤버 속성, 함수, 변수 정보등을 읽고 JIT(Just-In-Time) 컴파일러를 통해 IL 코드를 현재 프로세서 환경에 적합한 기계어 코드로 변경하여 프로그램을 실행한다.
JIT 컴파일러를 통해 기계어 코드로 변경하기 위해서는 CLR을 지원하는 모든 컴파일러에서 일정한 형식의 메타데이터를 어셈블리에 포함하여야 한다. 어셈블리에 포함된 메타데이터는 자신의 코드 정보를 설명하는 정보를 포함하고 있기에 자기 서술적인(Self-descriptive) 메타데이터라고도 불린다.
- PE 포맷 : 윈도우 로더가 실행 가능한 코드를 관리하는데 필요한 정보를 캡슐화한 데이터 구조체. (닷넷에서 생성한 PE32 포맷의 실행파일은 기존 PE32 형식의 실행파일에 .NET Metadata 관련 섹션 정보가 추가되어 있다)
Q) 매니페스트?
어셈블리는 1개 이상의 모듈로서 구성되는데, 여러 개의 모듈이 하나의 어셈블리를 구성하고 있다면 그중 하나는 반드시 다른 모듈의 목록을 관리하는 매니페스트 정보가 포함되어야 한다. 어셈블리 매니페스트는 어셈블리들 간에 요소의 연관관계를 설명하는 정보가 포함되어 있다.
(어셈블리 이름, 버전 번호, 문화권, Strongly Name 정보, 어셈블리에 포함된 파일 목록, 형식 참조 정보)
여러개의 모듈로 어셈블리를 구성하려면 모듈로서 사용되는 파일은 netmodule로 컴파일 하여 사용하여야 한다. netmodule로 컴파일 할 경우 매니페스트가 포함되지 않는다.
예를들어,
비주얼 베이직 .netmodule로 컴파일 : vb.netmodule 생성 (매니페스트 정보 없음)
C# EXE로 컴파일 : test.exe 생성 (매니페스트 정보 있음, 컴파일 옵션을 통해 netmodule을 포함하고 컴파일 하여야 한다.)
위와 같이 2개의 파일이 하나의 어셈블리를 구성하고 있다면 CLR은 test.exe에 있는 매니페스트 정보를 이용하여 vb.netmodule의 클래스를 정보를 알 수 있다.