Overview C# 과.NET Environment 321190 2016 년가을학기 9/5/2016 박경신 2 Problem Statement 훌륭한프로그램을작성하는것은매우어려운일 어떤프로그래밍언어를사용해야하는가? COM/DCOM 을사용하면해결될수있지않을까? 필요한컴포넌트를자신의프로그램에 attach 하여사용하면편하기는하지만.. COM 은너무구체적인코딩지식을요구함 COM 은각응용마다부수적인인프라구조가필요함 예 ) Class Factory, Interface Marshaler COM 은클라이언트와서버가지리적으로멀리떨어져있다고가정하여구현상의문제발생 예 ) 문자열처리 개발자코드를다양한플랫폼에서수행시킬수있길원함 Platform-independent application 효율적인자동메모리관리의필요성 Garbage collection Problem Statement 소프트웨어버전관리 (version control) 의자동화필요 서버가프로그램의버전을자동으로감지하여최신버전을로딩? 서버가갖고있는프로그램의버전을알려줄수있는표준메커니즘이필요 객체지향프로그래밍을모든프로그램언어사이에서사용할수있길원함 예 ) VB 으로작성된 COM 객체를 VC++ 에서상속받아확장? 안정성 (safety) 을위해코드연산을제한할수있길원함 예 ) 다운로드한코드는로컬디스크에있는파일을읽을수는있어도쓰지는못하도록하고싶다면? OS 기능들을논리적으로연관된그룹으로나누어관리 원하는기능을쉽게찾아쓸수있도록하여 OS 를효과적으로이용 그리고, 기존의 COM 객체와문제없이상호연동되어야함!
란윈도우기반응용프로그램을만들기위하여서로다른프로그래밍언어와라이브러리들이같이개발되고수행되는환경 언어독립적 - 다양한언어사용개발가능 웹응용프로그램, GUI 등다양한 Windows 응용프로그램지원 방대한코드라이브러리로구성 & 용도와목적에따라다른모듈로구성.NET 응용프로그램은 상에서만동작 즉, 모든.NET 응용프로그램은 에의해서관리 상에서관리되어실행되는응용프로그램은 Managed Code 라하고, 기존 Windows 에서직접동작하는응용프로그램은 Unmanaged Code 라함 에의한서로다른기종들간의통합 현재 Windows 운영체제에서만실행, 차후 FreeBDS, Linux, Mac., PDA 등에서실행되는버전개발 특징 Garbage Collection 을통해자동으로메모리를관리해줌 표준화된소프트웨어버전관리기능제공 객체지향프로그래밍의특성을모든 Visual Studio.NET 에서지원하는모든언어에서사용할수있게해줌 시스템의기능을여러계층의네임스페이스로정리하여제공 코드에대한보안을지원함 (Code Access Security) COM 클라이언트나 COM 서버모두와의상호운용성 (Interoperability) 를지원 즉, COM 객체가.NET 객체인것처럼 wrapper 객체로둘러쌈 의단점 운영체제가무거워짐 시스템하드웨어요구사항이커짐 닷넷 (.NET) 구성도.NET Framework Visual Studio.NET Window Server System.Net Building Block Service Data & XML User Interface Base Class Library (BCL) COM Interfaces Visual Studio.NET : C# 등의닷넷언어로프로그램을만들기위한통합개발환경 닷넷프레임워크 : 닷넷을사용할수있는환경을제공 윈도우서버시스템 : 닷넷을이용한윈도우프로그램개발이나웹사이트구축시필요한윈도우요소를지원 닷넷빌딩블록서비스 : 닷넷의문제해결을위해설계된시스템 Service Common Language Runtime (CLR) XML Service
의구조 CLR 의구성 VB C++ C# Common Language Specification (CLS) JScript Class Libraries (FCL) Data and XML User Interface Base Class Library (BCL) Visual Studio.NET Type Checker Security Engine IL to Native Compilers Base Class Library Support Thread Support Code Manager COM Marshaler Exception Manager Debug Engine Garbage Collector Common Language Runtime (CLR) Class Loader CLR FCL 의구성 CLR(Common Language Runtime) Managed Code 응용프로그램을개발하기위한언어독립적인개발, 실행환경 Java 의 Virtual Machine 같은 Application 을실행하는데필요한실행엔진 응용프로그램실행시자동연결 실행 Visual Basic.NET, C# 등과같은닷넷언어는 Microsoft Intermediate Language (MSIL) 로컴파일 닷넷응용프로그램은윈도우에서바로실행할수없고, 닷넷프레임워크의 CLR 에있는 JIT (Just-In-Time) 컴파일러가 MSIL 코드를 Native Code 로변환해실행가능하게해줌 Class Libraries (FCL) User Interface Data and XML Basic Class Library (BCL) 11
FCL FCL (Framework Class Libraries) CLR 에서수행되기위해필요한기능을제공해주는클래스들의집합 BCL (Basic Class Library) 는클래스라이브러리중가장핵심적인기능을하는클래스의모음 ADO.NET 는데이터베이스를사용할때지원하는클래스 ASP.NET 는닷넷언어로웹프로그래밍을할때지원하는클래스 윈도우 UI 는닷넷언어로윈도우프로그램을만들때지원하는클래스 FCL 의구성 ASP.NET Description ADO.NET Discovery Protocols Caching Configuration ADO Design System. System.Data UI HtmlControls Controls Security SessionState SQL SQLTypes System.WinForms UI Design ComponentModel System.Drawing Drawing2D Printing Imaging Text System.Xml XSLT Serialization XPath BCL System Collections Configuration Diagnostics Globalization IO Net Reflection Resources Security ServiceProcess Text Threading Runtime Interop Remoting Serialization BCL Data & XML System System.Data Collections Security ADO SQL Configuration ServiceProcess Design SQLTypes Diagnostics Text Globalization Threading System.Xml IO Net Reflection Runtime Interop Remoting XSLT XPath Serialization Resources Serialization
Data & XML Forms & ADO.NET 은닷넷프레임워크의일부로 System.Data 네임스페이스와하위네임스페이스에서제공하는데이터접근기술로이루어짐 System.Data 네임스페이스는 ADO.NET 객체모델을구성하는클래스로이루어짐 System.Xml 네임스페이스는 W3C 호환 XML 파서와 XML 작성기 (XML Write) 그리고 XSLT 와 XPath 등많은 XML 관련기술을위한클래스로이루어짐 Description Discovery Protocols Caching Configuration System. UI HtmlControls Controls Security SessionState 17 Forms & Win Forms ASP.NET 은강력한웹응용프로그램을개발하기위한프로그래밍프레임워크 ASP.NET 웹폼 ( Forms) 은쉬우면서도강력한방법으로웹사용자인터페이스 ( UI) 페이지를생성할수있게함 Design System.WinForms ComponentModel System.Drawing Drawing2D Imaging Printing Text 19
Win Forms 닷넷프레임워크기반의윈도우응용프로그램을개발하기위한새로운플랫폼 윈도우 UI 클래스는 System.Windows.Forms 네임스페이스에포함되어있음 윈도우폼유형은크게표준윈도우, MDI 윈도우, 대화상자등으로나눌수있음.NET Language VB C++ C# JScript Common Language Specification (CLS) Data and XML Base Class Library User Interface Visual Studio.NET 21 Common Language Runtime.NET Language CTS 닷넷플랫폼은언어에중립적 (language neutral) 닷넷언어로 VB, C++, C#, Jscript, 등이있음 APL, COBOL, Pascal, Eiffel, Python, Smalltalk 등 third-parties 닷넷언어가현재개발되고있음 CTS(Common Type System) 상호운용성을위한데이터의기본적인특징정의.NET 언어가지원해야할타입과연산자들집합 CLS(Common Language Specification) 모든.NET 언어가최소한지원해야할 CTS 부분집합 무부호정수 (unsigned integer) 타입은 CTS 에는기술되어있지만 C# 등일부.NET 언어는지원하지않음 임의의.NET 언어에서사용가능한클래스를만들고 싶다면 CLS 를잘준수해야함 23 CTS 타입 CLS 타입여부 C# 타입 비고 System.Boolean Yes bool True/false System.Object Yes object 모든클래스의기반클래스 System.String Yes string 문자열 System.Double Yes float 32비트부동소수 System.Byte Yes double 64비트부동소수 System.Sbyte No byte 무부호 8비트정수 System.Int32 Yes int 부호 32비트정수 System.Uint32 No System.Int64 Yes long 부호 64비트정수 System.Uint64 No System.Char Yes char 16비트유니코드문자 System.DateTime Yes System.DateTime 날짜와시간 System.Decimal Yes decimal 10 진부동소수 24
C# C# Version C++ 를기반으로하고자바의장점을혼합하고닷넷의개념을도입해서만든언어 컴포넌트기반의객체지향적언어 여러개의컴포넌트화된코드가서로유기적으로연결되어사용자가원하는프로그램을쉽게개발할수있음 C# 언어의장점 개발속도가빠름 Windows API 를사용가능함 프로그램컴포넌트를사용하기간편함 닷넷프레임워크프로그래밍모델을가장잘반영함 빠른표준화작업 C# 의 Garbage Collector 객체를검사하여더이상사용되지않는객체를메모리에서 C# 2.0 C# Generics Anonymous Method Nullable Type Partial Type yield Keyword C# 3.0 Lambda Expression Anonymous Type Extension Method var Keyword (implicit type) C# 4.0 C# dynamic (late binding) Named Argument Optional Argument Indexed Property C# 5.0 C# async/await 25 26 자동으로제거함.NET Environment Visual Studio.NET 차세대운영환경을개발하기위한도구 가상위레벨로존재하는유연한구조 CLS(Common Language Specification, 개발언어인터페이스 ) 는 VB.NET, C# 에맞는런타임인터페이스제공 상위의언어 (C#, VB.NET, C++, Jscript 등 ) 는동일한하부구조의존재로자신에게맞는언어로프로그래밍 하나의프로그램을여러언어로작성가능 자유로운디버깅 통합개발환경 사용자를위한환경설정 MSDN 도움말활용가능 다양한기능이있는도구모음 시작페이지는웹형식으로구성 ( 웹브라우저기본내장 ).NET Environment Visual Studio.NET 2013 초기화면
Visual Studio.NET 설치하기 Component Update 컴포넌트 (Component) 프로그램을설치하기위한구성요소 Visual Studio.NET 설치의 1 단계과정 Windows Component Update 컴포넌트들을 VS.NET 에필요한수준으로업데이트 Visual Studio.NET 설치 설치를위한리소스임시디렉토리에복사 사용권계약 설치옵션설정 응용프로그램작성 C# 언어와 VS.NET 의추가적인도구사용 컴파일 2 단계의과정을통한실행가능한형태로변환 MSIL(MicroSoft Intermediate Language) 운영체제에국한되지않은중간언어, 직접실행불가능 JIT(Just-In-Time) MSIL 코드를원시코드로컴파일, OS 가실행할수있는응용프로그램의형태 Assembly.NET 이사용하는프로그램의실행및배포단위.NET run-time 이수행하는모든코드는어셈블리안에들어있음 응용프로그램코드와리소스를갖고있는실행파일 (.exe) 이나라이브러리파일 (.dll) 의논리적인집합 어셈블리는 Manifest( 어셈블리내부에들어있는코드와리소스를설명하는메타데이터 ) 목록도포함 어셈블리는단일파일또는다중파일로구성 Manifest 는어셈블리의 exe 파일이나 dll 파일중의하나에들어있을수있음 Managed Code CLR 에의한관리기능을이용하여실행되는코드 Garbage Collection 응용프로그램이사용하던메모리를해제 Linking 응용프로그램코드를여러개의소스코드파일로나눈후, 그것을단일한어셈블리로합쳐서컴파일하는것 코드를여러파일로나누어작업 완료시파일은코드단위 작업효율성증가 C# 응용프로그램코드 컴파일 어셈블리코드 컴파일 네이티브코드 네이티브코드 네이티브코드.NET CLR MSIL 코드로컴파일 결과는어셈블리형태 시스템런타임