// C#언어의 개요//
C++언어 기반 + java의 장점을 더한것 = C# 언어 ->C언어가 되어있어야 한다.
C#은 포인터를 사용하지 않는다. ->메모리 관리자(안전하지 않다고 생각되서 , 존재하긴 하지만 거의 사용하지 않는다.)_delete/free()를 사용해서 메모리는 삭제(해제) 해주는 소멸자가 존재 헀으나 C#부터는 소멸자가 없어졌다. 이런 사용하지 않는 메모리를 처리하도록 가비지 컬렉터라는 것이 생겼다. new로 생성에만 신경을 써도 상관 없게 되었다.
- 속도 향상
- 포인터 걱정x
- 많은 라이브러리
//Net Framework//
운영체제(OS)와 닷넷 프레임워크가 하나가 되었다.(예전에는 넣고 뺴고가 가능 했지만 현재는 하나의 운영체제가 되어있다.)
운영체제에 하드웨어가 탑제 되면서 관리 하기 쉬워졌다.
<구성 요소>
Net Framework(CLR과 클래스 라이브러리로 구성되어있다.) 위에서 돌아간다
*CLR(공용 언어 런타임) * //컴파일된 C#코드(*.exe 파일) 를 실행하는 역할
//MSIL과 IL은 < *.exe , *.dll >어셈블리어 이다. -> "중간언어"라고 부른다.
자바에서 JVM에 해당하는 닷넷에서의 실행 엔진이다.
- 메모리관리, 데이터관리, 보안관리 등을 한다.
- 지원되는 언어로 작성된 프로그램이 공통의 객체지향형 클래스를 공유할 수 있도록 해주는 실행 관리 프로그램
-가지비 컬렉터
//CTS : 공통 데이터 형과 형식 정의(예) int -> System.int32 / float->System.Single
CLS : 공통 언어 사양 정의, 닷넷 언어가 지켜야할 최소 코드 규칙
*클래스 라이브러리*
- BCL: 기본 클래스 // 클래스 라이브러리
Window Form : 윈도우 응용 프로그램 제작을 위한 클래스 라이브러리
ASP.NET : 웹 클래스 라이브러리
ADO.NET : 데이터베이스 클래스 라이브러리
- 클래스와 인터페이스들의 조합
- 데이터 수집, 파일 접근, 문자 작업 과 같은 공통 프로그래밍 작업을 가능하게 하는 값의 형태 이다.
//C#언어의 사용 범위//
XML,Web Network, 데이터베이스, 게임, IoT 등...
//C#프로그램 실행 과정//
C#언어 -> 컴파일 | MSIL | -> CLR -> 실행(OS와 상관없이 실행)
(Visual Studio) (*.exe//결과물 )
/*
C#코드는 기계어로 컴파일 되지 않고 C#컴파일러는 C#소스코드를 어셈블리(MSIL)파일로 변환 시키고 필요한 메타데이터를 생성한다.
그다음 JIT컴파일러는 MSIL와 메타데이터를 검사하여 코드가 안전한지 확인 한 후에 네이티브 기계어 코드로 변환 시켜서 실행시킨다.
* CLR(공용 언어 런타임)을 기반으로 빌드 되는 모든 언어에서는 MSIL을 파일을 생성한다. *
*/
정리)
//BCL, IL, CLR, JIT, CTS 등 닷넷 프레임워크의 구성 요소와 역할을 이해하기
//컴파일 부터 실행까지의 과정 이해하기
이미지 참고: http://blog.daum.net/_blog/BlogTypeMain.do?blogid=0iJRy
https://docs.microsoft.com