|
|
1번 주제는 닷넷프레임워크 및 개발 환경에 대한 이해입니다.
|
|
|
## 1. .Net Framework
|
|
|
닷넷 프레임워크는 2002년 마이크로소프트에서 발표한 응용 프로그램 개발 환경으로서 프로세스 가상 머신에 속한다.
|
|
|
닷넷 프레임워크를 기반으로 만들어진 응용 프로그램들은 반드시 닷넷 프레임워크가 설치된 환경에서만 실행할 수 있다.
|
|
|

|
|
|
|
|
|
.Net Framework, CLR, CTS, 어셈블리, Managed, Unmanaged
|
|
|
## 2. CLR
|
|
|
***공용 언어 런타임(Common Language Runtime)***은 CLI 사양을 따르는 가장 대표적인 VM으로서 마이크로소프트가 개발하였다.
|
|
|
CLR은 IL을 JIT 컴파일러를 이용해 기계어로 변환하고, ***가비지 콜렉터(Garbage Collector)***를 제공해 동적 메모리 할당 및 회수를 지원한다.
|
|
|
|
|
|
등에 대한 정리를 해주시구요.
|
|
|
## 3. CTS
|
|
|
***공용 타입 시스템(Common Type System)***은 닷넷 호환 언어가 지켜야 할 타입의 표준 규격을 정의한 것이다.
|
|
|
CTS는 런타임에 형식을 선언하고 사용 및 관리하는 방법을 정의하고 있다.
|
|
|
|
|
|
C#버전, .Net Framework 버전, Visual Studio 버전 간의 상관 관계도 정리해주시길 바랍니다.
|
|
|
* 닷넷 호환 언어 : 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의 클래스를 정보를 알 수 있다. |