재밌고 어려운 IT를 이해해보자~!

Visual Studio, C# 컴파일 본문

C#

Visual Studio, C# 컴파일

언제나즐거운IT 2024. 6. 28. 20:27

콘솔 앱(.NET Framework) 프로젝트 생성 !

 

컴파일이란?

 

각각의 언어마다 별개의 컴파일러가 존재합니다. 우리가 C#로 작성된 소스 코드를 컴파일하면, C# 컴파일러에 의해 exedll 파일과 같은 출력 파일이 만들어집니다. 이렇게 만들어진 파일을 어셈블리(Assembly)라고 부릅니다. 그리고 이 어셈블리 안에는 CIL(Common Intermediate Language)와 메타데이터(Metadata), 매니페스트(Manifest) 정보가 포함되어 있습니다. 

 

여기서 CIL란 컴퓨터가 해석 가능한 원시 코드(Native Code)가 되기 전 중간 단계의 언어입니다. 우리가 작성한 소스 코드는 바로 CIL로 변환되는 것입니다. 여기에서 컴파일 과정은 끝이 납니다. 이후는, JIT(Just-In-Time) 컴파일러에 의해 컴퓨터가 이해할 수 있는 원시 코드로 다시 컴파일되어 우리가 만든 프로그램이 실행되게 됩니다.

 

이후 디버깅을 통해 출력 결과를 확인할 수 있습니다.

 

디버깅이란?

 

프로그램 내에 있는 기존의 논리적인 오류나 잠재적인 오류를 가리켜 버그(bug)라 하며, 이러한 오류를 수정해나가는 과정을 디버깅이라 말합니다. 우리가 프로그램을 만드는 과정에서 '반드시'라고 해도 될 정도로 많은 결함들이 생겨납니다. 프로그램이 실행 중에 비정상적으로 종료되거나, 우리가 생각한 결과와는 다른 잘못된 결과 값을 출력할 때 디버깅을 통해 근본적인 원인을 찾아낼 수 있습니다.

 

Hello world 코드분석

using System;

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

 

using은 말 그대로 '사용하다'라는 의미를 가지고 있습니다. 그렇다면 1행의 using은 무엇을 사용하는 것일까요?
using System;
바로 네임스페이스 System을 사용한다는 말과 같습니다. using을 이용하면, 전체 이름을 참조하지 않고 선언된 네임스페이스 내부 개체들에 접근할 수 있어 불필요한 타이핑을 막습니다.

 

 

네임스페이스란?


네임스페이스(namespace)는 관련된 구조체, 클래스, 델리게이트, 인터페이스 등을 그룹화 한것을 말합니다. 예를 들어서, System.Collections.Generic에는 제네릭 컬렉션을 정의하는 클래스와 인터페이스들이 들어있습니다. 또 System.Linq에는, LINQ를 사용하는 쿼리를 지원하는 클래스와 인터페이스들이 들어있습니다. 이처럼 네임스페이스는 사용하기 편리하게끔 성격이 비슷한 것들을 묶어놓는 것과 같습니다. 
 
Main 이란?
마지막으로 static void Main는 메소드(method)이며, 메인(main) 메소드는 그중에서 가장 중요한 메소드 이며, 프로그램의 최초의 진입점(Entry Point)을 나타냅니다. 모든 프로그램에는 메인 메소드가 반드시 존재해야하며, 메인 메소드가 시작되면 프로그램이 시작되며, 종료되면 프로그램도 같이 종료됩니다. 여기서 static는 한정자로 정적인 메소드를 의미하며, void는 반환 형식으로 반환 값이 없음을 의미합니다. 
 
또한 VisualStudio 2022버전 부터는 추가적인 코드가 없어도

 Console.WriteLine("Hello, world!"); 코드만으로도 콘솔 출력이 가능하다!

 

 
 
 

 

 

 

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

무한루프 제어문  (0) 2024.06.29
반복문  (0) 2024.06.28
조건문  (0) 2024.06.28
연산자(Operators)  (0) 2024.06.28
변수, 데이터 형식, 상수  (0) 2024.06.28
Comments