.Net Framework/.NET2010. 1. 28. 09:04

.NET을 이해하기 전에~
-예전의 DOS는 File I/O와 Console I/O를 처리
-그때의 프로그래밍을 하였을 경우 *.LIB(모듈 단위,각각의 모듈에서 중복 되는 기능이 생겼음)
-*.c와 *.lib를 Compile & link(현재의 Build) 하여 *.EXE파일을 만듬 이것이 *.dll로 변경됨

ActiveX : 특정 웹 사이트에 들어 갈 경우 ActiveX를 설치하라고 하는데, 그것을 클릭하였을 경우
그시점에 .DLL 또는 .ocx를 시스템에 다운로드 및 설치를 한다. 그때 시스템 레지스터에 등록되어 지며 *.DLL이 동적으로 실행 된다. ActiveX--->Activate됨.
이때 .DLL이나 .ocx가 각각의 프로그래밍 언어 마다 다르게 만들어 졌는데 각각의 파일이 운영체제, 각 나라 등
인터페이스가 다른 것을 Framework에서 통합하여 처리를 한다. Framework 안에는 서로 다른 window API들로 구성되어 있음 Framework는 [Compact Framework 또는 일반 Framework][Framework(서로 다른 Window API 통합)]으로 구성

 


.NET은?
-Microsoft XML 웹 서비스 플랫폼.
-XML 웹 서비스 : 운영체제, 장치, 프로그래밍 언어에 관계 없이 인터넷을 통해 응용프로그램에서 데이터를 통신 또는 공유할 수 있게 해줌.

.Net 플랫폼?
-개발자에게 XML 웹 서비스를 만들고 이들을 서로 통합하는데 필요한 기술 제공.
-일반 사용자아게는 완벽하고 안전한 환경을 제공.

.Net 장점
-언제 어디서나 장치에 관계 없이 통신, 데이터 작업을 할 수 있음.
-분산 컴퓨팅 모델을 사용.
-XML과 같은 개방형 표준에 구축되어 PC 및 다른 스마트 장치를 연결

.NET의 특징
-Java 진영에 대한 전략적 대응책
-Ubiquitous 환경에 대응하기 위한 Any Div. Platform
-Win32, ActiveX기반의 Application 구동 방식의 개선
-개발 환경 및 실행 환경의 복잡성 해결책 요구

 

개발자 입장에서 바라본 .Net Framework
-JVM(Java Virtual machine)과 같은 안정된 구동 환경 제공.
-언어간 상속, Data교환이 자유로운 .Net언어들을 지원
-모든 시스템 자원(OS, DB)과 interface를 CLR(Common Language Runtime, CTS, CLS)에서 모두 제공
-시스템 레지스트에 등록(CLSID 등)하는 ActiveX가 존재하지 않음(DLL지옥에서 벗어남).
-Web환경, Web Service환경 구축이 .NET 개발 환경에 모두 통합.

*.NET Compact Framework : 스마트 디바이스(PDA 등)에 탑재 되어 동작하는 .NET Framework의 일반 Framework과 사용법은 동일하나 상당 부분의 기능이 제한


.Net CLR(Common Language Runtime)
-기본 Class Lib : 방대한 Lib. 형태 이므로 체계적인 System Namespace로 잘 분류되어 있음
(데이터 접근, GUI, 보안, XML/SOAP, Thread, File IO, Debugging, COM+ 등)
-CLR : CTS(Comm Type System), CLS(Common Language Specification) 두 가지로 구성되어 있음, JAVA의 VM과 같은 역할 수행, 두가지 요소는 .NET언어 들이 교차언어 상속 및 교차 언어 예외 처리를 지원하게 되는 근간을 이룸.
예) [C++]------(->)-------[VB] 두가지 다른 언어를 알아 볼 수 있도록 교차점(인터페이스 관계 설정)을 IDL이라고 한다. 그 역활을 CLR이 함!!

 

.Net Assembly
[C# Source]------->C# 컴파일러-----┐
[VB.NET Source]--->VB.NET컴파일러--->.NET Assembly(Intermediate Language(IL), Meta Data로 구성)----o
[M.C++ Source]---->C++컴파일러-----┘

o--->클래스 로더--->JIT(Just In Time)컴파일러--->플랫폼이 고려된 명령 바이너리(Xp, 98, 2000등에 맞춰서 설정)--->실행

-.NET기본 Class Lib.(mscorlib.dll) : System.Data, System.IO로 구성
-.NET실행 엔진(mscoree.dll) : 클래스 로더, JIT컴파일러, 플렛폼이 고려된 명령 바이너리로 구성

.NET Assembly의 특징
-Intermediate Language(MSIL) : 중간 바이너리 형태의 실행 코드 집합
-Meta Data : 바이너리 실행에 필요한 리소스, 버전, 기타 자기 설명적 요소
-전용 Assembly, 공용 Assembly : Xcopy를 통해 지역 디렉토리에 복사하여 사용하는 것을 기본
-Version 정책 : Version이 다르면 다른 Assembly로 인식

*GAC(Global Assembly Cache)
-*.DLL을 공유하여 사용하기 위해서 사용되는 공간
-System의 Local영역과 달리 동일한 이름으로 등록 가능, Key를 DLL마다 다르게 생성해주기 때문에 가능
-이름이 같고 버젼이 다르거나 Culture Code(KR, JP, US 등등)에 따라 동일한 이름으로 등록 가능

*Xcopy
-C# Source, VB.NET Source 등---> 컴파일 ---> *.DLL, *.EXE ---> 응용프로그램 실행
이때 응용프로그램 실행 시점에서 필요한 *.DLL 또는 *.EXE를 즉시 복사하여 사용하는 것을 말함.
-*.DLL에 Key등록(GAC)을 하였을 경우 프로그램 실행 시간이 지연됨(Key가 등록되면 실행 시 GAC영역을 검색하여 DLL을 찾고 없을 경우 다시 LOCAL을 검색 후 실행 시키기 때문)

*ildasm : *.dll, *.exe를 재 컴파일 해주는 프로그램, 그래서 .NET으로 보안프로그램은 만들지 않는다.

 

.NET OOP(Object Oriented Programming)
-캡슐화(Encapsulation) : 한정자(private, public 등)를 이용하여 필요한 것만 보여주도록 하는 것
-상속(Inheritance) : 상위 클래스에서 하위 클래스로 물려 주는 것. 매소드 상속 등
-다형성(Polymorphism) : 하나의 특성을 다른 형태로 변형하여 다른 기능을 수행 하도록 하는 것

-.NET언어들은 JAVA수준의 객체 지향 언어의 조건을 모두 갖추고 있음.
-.NET언어는 파생 Class를 구현 할 때 별도의 정보 파일을 필요로 하지 않음.
-.NET언어는 각 .NET언어 간의 교차 언어 상속이나 Custom Type 사용이 자유 로움.
-교차 언어간 사용을 위해 IDL과 같은 인터페이스 정의 명세가 필요 없음.(CLR을 사용)

 

.NET의 리소스 관리, Garbage(미아 상태 자원) collection
-리소스 : OS, DB상의 모든 자원들(파일, 메모리, 스크린 영역, Network자원, DB연결 세션 등)
-Garbage : 응용프로그램이 할당하여 사용한 리소스가 사용 후 반환하지도 사용하지도 않고 있는 미아 상태의 자원
-기존 언어들의 리소스 관리 방식 : 명시적인 할당 객체 해제 방식(C++ : Delete, VB : Nothing)

[00OO    Managed heep]
0 - Dispose() --> 명시적 자원 정리 대상(File Handle(close), DB Connection(close), Network Socket(disconnect), Bitmap, Icon(delete object))
O - Root가 끊어진 Resource(Garbage)


유용한 .NET Tools
-C:/>sn : 강력한 이름 유틸리티(공용 어셈블리를 만들기 위해서 Key 생성시 사용)
-C:/>regasm : .net Assembly를 타입라이브러리를 내보내어 레지스트리에 등록(.NET 어셈블리를 ActiveX로 변환)
-C:/>ildasm : .net Assembly를 디 어셈블 해주는 Tools(메니페스트 정보와 il Code를 볼 수 있음)
-C:/>gacutil : 공유(전역) 어셈블리 케쉬(Global Assembly Cache)에 어셈블리 등록하는 Tool

Posted by Tiwaz