2 분 소요

[C#01] C# Base&Struct

기반

사전 용어

  • C# : C# 프로그램은 .NET 프레임워크를 기반으로 개발한 프로그래밍 언어이고, JAVA와 유사한 구조를 가진 객체 지향 프로그래밍 언어입니다.

  • .NET : 마이크로소프트의 개발 플랫폼, 다양한 언어와 도구를 사용하여 어플 개발하고 실행하는 데 사용됩니다. (.NET Framework, .NET Core)

  • CIL(Common Intermediate Language) : 인간이 이해할 수 있는 가장 낮은 수준의 프로그래밍 언어입니다. 객체지향 어셈블리어이며 완전한 스택 기반입니다.

  • CLR(Common Language Runtime) : 실행환경 전반을 관리하는 핵심 엔진 자바의 JVM 같은 역할을 합니다. 실행될 때 다양한 형태의 서비스를 지원합니다. 함수가 호출될 때 현재 프로그램이 돌아가는 컴퓨터의 환경에 적합한 기계언어를 만들어 냅니다. 그리고 만들어진 기계언어 코드를 캐시에 저장한다. 이것이 JIT(Just In TIme)컴파일링이라 불리는 기법입니다. 이렇기에 크래스 플랫폼에 유리합니다.

  • ManagedCode(관리코드) : CLR에서 컴파일되어 실행됩니다. (객체지향모델, 언어독립적, 형안전성, 가비지컬렉션, 단일통합라이브러리 등) C#, JAVA 등에 사용합니다.

  • NativeCode(네이티브코드) : 컴파일을 하게 되면 OS에서 해석 가능한 기계어로 바로 번역합니다. 즉 컴퓨터 아키텍처에 직접 실행되는 기계어 코드입니다. 일반적으로 C/C++언어가 네이티브 코드에 해당합니다. 소스코드가 해당 플랫폼의 기계어로 직접 변환되어 실행됩니다. 네이티브코드는 특정 OS와 H/W에 종속적이며, 이식성이 상대적으로 낮습니다. C/C++ 등에 사용합니다.

C# 컴파일 과정

소스코드를 중간언어(IL)로 변환

  1. 코드 작성

  2. C# 컴파일러 컴파일 수행

  3. C# 컴파일러 중간 언어 CIL 혹은 MSIL 코드를 생성 (IL 중간언어로 작성된 파일 생성)

중간언어 => 기계어 컴파일

  1. CIL을 실행환경 CLR에 올림

  2. 어셈블리를 원시코드로 변환 이 역할을 수행하는 것이 JIT 컴파일러다.(JIT 컴파일러에서 해당 컴퓨터 아키텍처에 맞는 기계어 코드로 변환 )

  3. 기계어 실행

  4. 모니터 출력

c#의 컴파일 과정


구조

기본 구조

using System;

namespace MyNamespace
{
    class MyClass
    {
    }

    struct MyStruct
    {
    }

    interface IMyInterface
    {
    }

    delegate int MyDelegate();

    enum MyEnum
    {
    }

    namespace MyNestedNamespace
    {
        struct MyStruct
        {
        }
    }

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

클래스

클래스는 C# 프로그램의 주요 구성 요소입니다. 클래스 내에서는 필드, 속성, 메서드 등의 멤버가 정의됩니다.

class MyClass
{
    // 필드 (멤버 변수)
    // 생성자
    // 메서드 (함수)
    // 속성 (프로퍼티)
}

네임스페이스

네임스페이스는 코드를 논리적으로 그룹화하고 충돌을 피하기 위해 사용됩니다. 기본적으로 C#은 System 네임스페이스를 기본으로 포함하며, 필요에 따라 사용자 정의 네임스페이스를 추가할 수 있습니다.

  • using : 다음 예제와 같이 전체 이름이 필요하지 않도록 (Keyword)를 사용할 수 있습니다.

  • namepsace : 고유한 네임스페이스를 선언하여 프로젝트에서 클래스 및 메서드 이름의 범위를 제어할 수 있습니다.

using System;

namespace MyNamespace
{
    class MyClass
    {
        void MyMethod()
        {
            // 메서드 내용
        }
    }
}

메서드

클래스 내에서 특정 작업을 수행하는 코드 블록입니다. 매개변수와 반환값을 가질 수 있습니다.

class MyClass
{
    void MyMethod()
    {
        // 메서드 내용
    }
}

메인 메서드

C# 프로그램의 진입점 프로그램 실행 시 처음 호출되며, 일련의 작업을 시작합니다.

class MyProgram
{
    static void Main(string[] args)
    {
        // 프로그램 진입점
    }
}