트랙백 주소 : http://www.tipssoft.com/bulletin/tb.php/FAQ/1256 |
팁스소프트에서 제공하는 프로그래밍과 관련된 자료나 정보들을 무단으로 복제하거나 게재하는 행위는 상호간의 신뢰를 무너뜨리는 행위이며, 법적인 문제를 야기할 수 있으므로 각별한 주의를 당부드립니다. * 팁스소프트 저작권 정책 보기 - http://www.tipssoft.com/bulletin/tb.php/FAQ/637 이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다. * 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406 * 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft ) C# 은 원래 Microsoft사 에서 JAVA 에 대항하기 위한 목적으로 J++, J# 을 개발하면서 나오게된 언어입니다. 처음 J# 이 개발되었을 때, JAVA 를 개발한 SUN 사에서 MS사의 J# 을 저작권 소송을 하게되었고, 이 분쟁에서 MS는 SUN 사에 패소하게 됩니다. ( J++ 은 2000년 이후로 제공되지 않으며 J# 은 Visual Studio 2005 이후로 제공되지 않습니다.) 그래서 MS사에서 J# 을 보완하여, C/C++ 및 JAVA 의 대표적인 장점들을 모아서 새롭게 선보인 언어가 바로 C# 입니다. 그런만큼 C# 은 다양한 장점들을 가지고 있지만, 이로 인해 오히려 여러가지 단점도 가지게 되었습니다. 이 강좌에서는 C# 이 가지고 있는 특징과 그 구조에 대해 간략히 살펴보겠습니다. 1. C# 의 특징 C# 구문은 표현력이 뛰어나면서도 단순하기 때문에 배우기 쉽습니다. 또한 C# 은 C/C++ 에서 파생되었기 때문에, C/C++ 언어에 익숙한 개발자는 일반적으로 매우 짧은 기간 내에 C#을 사용하는데 어려움이 없을 것입니다. 그리고 C# 도 C++ 와 같은 객체 지향 언어이기 때문에 캡슐화, 상속 및 다형성과 같은 개념을 지원합니다. 이러한 기본적인 객체 지향 원리 이외에도 C#은 다음과 같은 여러 가지 혁신적인 언어 구문을 통해 프로그램을 쉽게 개발할 수 있는 환경을 제공합니다. 이러한 C# 의 특징을 아래와 같이 정리하였습니다. - C# 의 데이터 타입 시스템에는 자동 메모리 관리가 포함되어있습니다. 이를 통해 C/C++ 에서 개발자가 직접 메모리를 관리해줘야했던 작업들을 더 이상 C# 에서는 하지 않아도 자동으로 메모리가 관리되는 가비지컬렉션(Garbage Collection)이 지원됩니다. - C# 에서도 C/C++ 의 포인터와 같은 객체 주소에 대한 직접적인 조작이 가능합니다. - C/C++ 과 마찬가지로 윈도우 API 를 사용할 수 있습니다. 대부분의 윈도우 API 함수가 C 형태로 작성되어 있기 때문에 함수의 인자를 포인터로 전달하는 경우가 많습니다. 그렇기 때문에 포인터를 지원하는 C# 에서도 대부분의 윈도우 API 들을 사용할 수 있습니다. 이에 반해 JAVA 의 경우에는 이러한 API 의 사용이 아주 제한적입니다. - .NET Framework 프로그래밍 모델을 잘 반영합니다. C# 은 MSIL(Microsoft Intermediate Language) 형태로 컴파일 되는 .NET Framework 프로그래밍 모델을 가장 잘 반영하고 있으며, .NET Framework 의 의도를 언어적인 차원에서 가장 많이 지원합니다. - 컴포넌트 기반의 언어로서 COM 을 쉽게 사용할 수 있습니다. C# 은 COM(Component Object Model)을 프로그램의 기본 단위로 생각하기 때문에 여러 개의 언어와 도구에서 범용적으로 사용할 수 있습니다. 특히 C# 은 기존의 COM 을 .NET Framework 에서 원활하게 사용할 수 있고, 여기에 .NET Framework 에서 개발한 각종 컴포넌트도 COM 으로 쉽게 변환할 수 있습니다. - 개발 작업 C/C++ 에 비해 간단하며, JAVA 보다 유연합니다. C#의 개발 절차는 C와 C++에 비해 간단하며 Java보다 유연합니다. 별도의 헤더 파일이 없으며 메서드와 형식을 특정 순서대로 선언해야 할 필요도 없습니다. 보다 자세한 사항들은 앞으로 진행되는 강좌를 통해 하나하나 소개해나가도록 하겠습니다. 그리고 C# 에 대해 이야기하면서 빠뜨릴 수 없는 것이 바로 .NET 입니다. .NET 에 대해 전반적인 내용을 다루자면 상당히 방대하기 때문에 여기서는 C# 소스코드가 실제적으로 .NET Framework 에서 어떠한 과정을 거쳐서 컴파일이 되는지에 대해 간략히 다루어 보겠습니다. 본 내용은 앞으로 C# 을 공부하는데 있어서 C# 에 대한 이해를 돕기 위함에 목적이 있으므로 보다 깊은 내용을 공부하고자 하실 경우에는 별도의 .NET 서적을 통해서 공부하시기 바랍니다. 2. C# 및 .NET Framework, CLR 간의 상관 관계 C# 프로그램은 CLR(Common Language Runtime)이라는 가상 실행 시스템 및 통합된 클래스 라이브러리 집합이 포함된 Windows 필수 구성 요소인 .NET Framework에서 실행됩니다. CLR은 다양한 언어와 라이브러리가 매끄럽게 함께 작동하는 실행 및 개발 환경을 구축하는 데 기준이 되는 국제 표준 CLI(Common Language Infrastructure)를 Microsoft 에서 상업용으로 구현한 것입니다. C#으로 작성된 소스 코드는 CLI 사양을 따르는 MSIL(Microsoft Intermediate Language)로 컴파일 됩니다. MSIL 코드와 리소스(예: 비트맵 및 문자열)는 일반적인 확장명이 .exe 또는 .dll 형식의 파일 로 디스크에 저장됩니다. 해당 파일에는 형식, 버전 및 보안 요구 사항 등에 대한 정보를 제공하는 manifast(매니페스트)가 포함되어 있습니다. C# 프로그램을 실행하면 MSIL 코드와 리소스가 저장된 파일이 CLR로 로드되고 CLR은 매니페스트에 포함된 정보를 기반으로 다양한 작업을 수행합니다. 그런 다음 보안 요구 사항이 충족되면 CLR은 JIT(Just In Time) 컴파일을 수행하여 MSIL 코드를 Native Code(기계어)로 변환합니다. CLR은 또한 자동 가비지 수집, 예외 처리 및 리소스 관리와 관련된 기타 서비스를 제공합니다. CLR을 통해 실행되는 코드를 "Managed Code"라고도 하며, 이는 특정 시스템을 대상으로 하는 네이티브 기계어로 컴파일되는 "unmanaged code"와 대조적인 의미입니다. 아래 그림은 C# 소스 코드 파일, .NET Framework 클래스 라이브러리, 어셈블리 및 CLR의 컴파일 타임 및 런타임 상관 관계를 표시한 그림입니다. C# 소스 코드가 어떻게 실행가능한 프로그램으로 변환되는지를 이해하는데 도움을 주고자 작성했습니다. << [그림 1] C# 소스코드 와 .NET Framework 클래스 및 CLR 간의 상관 관계 >> 언어 상호 운용성은 .NET Framework의 핵심적인 특징입니다. C# 컴파일러에서 생성하는 MSIL 코드는 CTS(Common Type Specification)를 따르므로 C#에서 생성하는 MSIL 코드는 Visual Basic, Visual C++ 및 20개 이상의 기타 CTS 규격을 따르는 언어의 .NET 버전에서 생성하는 코드와 상호 작용할 수 있습니다. 이렇듯이 .NET Framework 는 .NET 기반의 다양한 언어로 작성된 여러 개의 모듈을 하나의 프로 그램 내에 포함시킬 수 있고, 서로 다른 프로그래밍 언어로 작성된 코드들을 마치 하나의 프로그래밍 언어로 작성된 것처럼 서로 참조할 수 있습니다. 또한 .NET Framework에는 File I/O(파일입출력), String Manipulation(문자열 조작), Windows Forms Control 등의 유용한 기능을 제공하는 방대한 수의 클래스들을 네임스페이스로 구조화하여 구성한 라이브러리가 포함되어 있기 때문에 개발자의 작업 편의성을 향상시켜줍니다. 이와 같이 일반적인 C# 응용 프로그램에서는 .NET Framework 클래스 라이브러리를 다방면으로 사용하여 다양한 기능들을 쉽고 간편하게 구현할 수 있습니다. |
'Program > C#' 카테고리의 다른 글
[C#] Visual Studio에서 프로그램이 끝나고 콘솔 창 유지하기 (0) | 2019.01.15 |
---|---|
[C#] C#에서 MySQL 연동 사용하기 (0) | 2014.10.31 |
4.C# System.Console (0) | 2014.10.23 |
3.C# 네임스페이스 (0) | 2014.10.23 |
2.C# 프로젝트 만들기 (0) | 2014.10.23 |