본문 바로가기

오래된 흔적/C#.NET 기초강좌 #1

[HOONS C#.NET 기초강좌 #1] 01. C#의 시작

hoons닷넷
[ C#.NET 기초강좌 #1]
01. C#의 시작
작성자 : NGong 작성일 : 2011-04-15 오후 4:13:56
E-mail : filmgdh골뱅이gmail.com Homepage : http://blog.daum.net/coolprogramming
C#("시샵")은 Microsoft에서 구현한 프로그래밍 언어로 .Net Framework에서 실행되는 응용 프로그램을 쉽게(?) 만들 수 있는 언어입니다.
C#을 시작하기에 앞서 간단한 .Net Framework와 몇 가지 주요 요소에 대해 공부하겠습니다. 자세한 내용은 다음에 공부하게 되며 여기서는 간단하게 정리만 합니다.
조금 재미가 없을 수도.... ㅡㅡ;

1, .net 바이너리와 win32(native) 바이너리

.net 바이너리 유닛(단위)의 확장자는 *.exe나 *.dll로 확장자 이름만으로는 win32(64) 바이너리 유닛(단위)과 구분할 수 없습니다.
또 .net 바이너리 유닛은 어셈블리라는 용어로 불리며 어셈블리는 .net에서 버전 관리되는 배포의 단위로 사용됩니다.

다음은 .net 응용 프로그램과 native 응용 프로그램이 실행되는 모습입니다. .net 응용 프로그램은 CLR이라는 실행환경에서만 실행되며 관리(메모리, 스레드, 원격 서비스, 보안, 형식 안정성 등의 관리)되므로 Managed Application(관리되는 응용 프로그램)이라고 합니다. CLR은 아래서 다시 설명하겠지만 .Net Framework의 핵심 요소로 자바의 JVM과 비슷한 역할을 합니다.
Managed_Application과_CLR의_관계.PNG
그림에서 파랑이가 .net 애플리케이션이며 빨강이가 native 애플리케이션입니다.

2, 어셈블리(Assembly)

어셈블리는 .Net의 컴파일된 모듈로 버전 관리되는 배포의 단위입니다.
어셈블리는 프로그램 시작 진입점(Main() 함수)을 갖는 *.exe와 다른 프로그램으로 시작(참조)되는 *.dll의 확장자를 갖습니다. 또 여러 파일로 이루어진 다중 파일 어셈블리와 하나의 파일로 이루어진 단일 파일 어셈블리로 나눌 수 있으며 하나의 응용 프로그램에서 사용하느냐 여러 응용 프로그램이 공유해서 사용하느냐에 따라 전용 어셈블리공용 어셈블리로 나눌 수 있습니다.
대부분의 어셈블리는 단일 파일 어셈블리입니다. 어셈블리도 다음에 자세히 공부할 기회가 있을 것입니다.

아래 그림은 어셈블리의 구조입니다.
어셈블리_구조.PNG
그림처럼 어셈블리는 크게 메니페스트, 형식 메타데이터, CIL, 리소스로 나뉩니다.
  • 메니페스트는 어셈블리 자체의 정보를 갖는 메타데이터입니다. 이 어셈블리가 또 다른 어떤 어셈블리를 참조하는가? 부터 자신에 대한 모든 정보가 기록됩니다.
  • 형식 메타데이터는 어셈블리에서 사용하는 모든 형식에 대한 구체적이고 너너너무나도 자세한 정보 가지고 있습니다. 요넘 때문에 리플랙션 기능이 가능합니다.
  • CIL 코드는 Common Intermediate Language로 모든 닷넷 언어들이 만들어 내는 중간 코드입니다. 이 중간 코드는 실행 시 Just-In-Time(JIT:Jitter)에 의해 Native 코드로 변환됩니다.

아래 그림은 각 닷넷 언어의 컴파일러Jitter 컴파일러의 구조를 보여주는 것으로 각 닷넷 언어의 컴파일러는 동일한 동일한 동일한 어셈블리를 만들어 냅니다. 또 이 어셈블리(*.exe, *.dll)를 Jitter 컴파일러가 어셈블리가 사용되는 시점(실행 시간)에 단 한번(캐싱) Native 코드로 변환합니다.
C__컴파일러와_Jitter_컴파일러.PNG

그림에 보이는 참조는 이 어셈블리가 사용하는 다른 어셈블리에 대한 참조이며 Base Class Library는 .Net Framework에서 제공하는 기본 클래스 라이브러리입니다.

3, .Net Framework

.Net Framework의 핵심 요소는 CLR, BCL, CTS, CLS로 정리할 수 있습니다.

  • CLR은 .Net Framework의 핵심 중의 핵심으로 코드를 실행하고 메모리를 자동 관리하며 형식의 안정성을 보장하는 등 여러 가지 실행시간 서비스(환경)를 제공합니다.
  • BCL은 .Net이 제공하는 여러 가지(보안, DB, Web, GUI, ...) 클래스 라이브러리입니다.
  • CTS는 .Net의 모든 데이터 형식이 기술되어 있으며 런타임 프로그래밍 구조가 정의되어 있습니다.
  • CLS는 .Net의 모든 언어가 지켜야 하는 형식에 대한 일련의 규약으로 CLS 규약을 지켜 만들어진 형식은 어떤 .Net 언어에서도 사용할 수 있다는 것을 말한다.

아래 그림은 .Net Framework의 구조입니다.
.Net_Framework,_Application의_관계.PNG

아래는 .NET 언어와 CLS, CTS의 관계입니다.
CLS,_CTS.PNG

4, 첫 번째 C# 프로그램

첫 번째 프로그램이므로 VS2010을 이용하지 않고 명령 프롬프트를 이용하여 컴파일하고 실행해 보도록 합니다.

Hello! 출력 프로그램
1) 윈도키+R을 눌러 '실행창'에서 cmd 명령을 입력하고 cmd 창을 띄웁니다.
2) cd\ 명령으로 C:\ 루트로 이동합니다.
3) md temp 명령으로 임시 폴더를 생성합니다.
4) 메모장을 실행하고 아래와 같이 간단한 코드를 입력하여 First.cs라는 파일로 temp 폴더에 저장합니다.
class First
{
public static void Main( )
{
System.Console.WriteLine("Hello!");
}
}

5) cd temp 명령을 temp 폴더로 이동합니다.
6) C:\temp>path=C:\Windows\Microsoft.NET\Framework\v4.0.30319 를 입력하여 csc.exe(C# 컴파일러)를 실행할 수 있도록 임시적인 path를 설정합니다. 이 폴더는 컴파일러가 위치한 폴더로 윈도우 탐색기에서 폴더명을 cmd 창에 드래그하면 경로를 쉽게 복사할 수 있습니다. 닷넷 버전에 따라 약간 폴더 명이 다를 수 있으며 물론 상관 없습니다. ^____^
7) dir 명령으로 First.cs파일이 temp에 잘 만들어졌는지 확인했다면...
8) csc First.cs 명령을 실행합니다. 그러면 First.exe .net 어셈블리가 만들어집니다.
9) First.exe를 실행하면 화면에 Hello!라는 문자열이 출력됩니다.

아래 그림은 cmd 창의 모든 명령 실행 모습입니다.
First.cs_예제(1).PNG


여기까지...
수고하셨습니다. ^^







이 글은 스프링노트에서 작성되었습니다.