본문 바로가기
ETC/C#

C# 프로그램 뜯어보기

by 빡구동동 2021. 1. 7.

C#  프로그램 뜯어보기 


using System;

namespace Csharp_210107
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

 

static  한정자
(Modifier)
메소드나 변수 등을 수식
C# 프로그램의 각 요소는 코드가 실행되는 시점에 비로소 메모리에 할당되는 반면, static 키워드로 수식되는 코드는 프로그램이 처음 구동될 때부터 진작에 메모리에 할당됨
void 반환형식  
Main 메소드 이름  
string[] args 매개 변수  
CLR Common Language Runtime C#으로 만든 프로그램이 실행되는 환경
이 런타임이 지원하는 언어는 C#뿐만 아니라 CLS(Common Language Specification) 규격을 따르는 모든 언어로 작성된 프로그램을 지원
CLR은 단순히 각 언어로 작성된 프로그램의 실행뿐 아니라 서로 다른 언어로 작성된 언어 사이의 호환성을 제공

프로그램이 실행되면 CLR은 프로그램을 메모리에 올린 후 프로그램의 진입점을 찾는데, 이 때 Main() 메소드가 static 키워드로 수식되어 있지 않다면 CLR은 진입점을 찾지 못하여 에러 메시지를 출력

+) 기능 
1. 프로그램 예외 처리
2. 언어간 상속 지원
3. COM과의 상호 운영성 지원
4. 자동 메모리 관리(가비지 컬렉션, Garbage Collection)

CLR에 대하여


Common Language Runtime

CLR은 .NET 프레임워크와 함께 OS 위에 설치된다. 

네이티브 코드로 작성되어 있는 프로그램들은 운영체제가 직접 실행할 수 있지만, C# 컴파일러가 만들어낸 실행 파일은 하드웨어가 이해할 수 없는 코드로 구성되어 있기 때문에 실행할 수 없다.

 

C# 컴파일러는 C# 소스 코드를 IL(Intermediate Language)이라는 중간 언어로 작성된 실행 파일을 만들어내는데, 사용자가 이 파일을 실행시키면 CLR이 중간 코드를 읽어 다시 하드웨어가 이해할 수 있는 네이티브 코드로 컴파일한 후 실행시킨다.

=> JIT (Just In Time) 컴파일 = 적시 컴파일

즉, 실행에 필요한 코드를 실행할 때마다 실시간으로 컴파일해서 실행한다는 뜻

 

WHY ?

그냥 실행 코드를 만들어 놓고 쓰지 않고 두 번씩이나 컴파일을 할까?

C#이 동작하는 환경이자 엔진인 CLR은 C#뿐만 아니라 다른 언어도 지원하도록 설계되어 있다.

서로 다른 언어들이 만나기 위한 지점이 IL이라는 중간 언어이고, 이 언어로 쓰여진 코드를 CLR이 다시 자신이 설치되어 있는 플랫폼에 최적화시켜 컴파일한 후 실행.

 

장점

  1. 플랫폼에 최적화된 코드 생성

단점

  1. 실행 시에 이뤄지는 컴파일 비용의 부담

 

 

'ETC > C#' 카테고리의 다른 글

데이터를 가공하는 연산자  (0) 2021.01.11
C# 문자열 다루기  (0) 2021.01.10
C# 데이터 보관하기 (3)  (0) 2021.01.10
C# 데이터 보관하기 (2)  (0) 2021.01.09
C# 데이터 보관하기  (0) 2021.01.08

댓글