[C#] C# 프로그램에 대하여

Flaming Bun·2025년 4월 13일

C#

목록 보기
4/35

🔥 컴파일러와 인터프리터

컴파일러

전체 소스 코드를 한 번에 번역해서 기계어(실행 파일)로 변경하는 프로그램

  • 컴파일러의 동작

소스코드(.cs) -> 컴파일 -> 실행파일(.exe) -> 실행

인터프리터

소스 코드를 한 줄씩 읽고 해석해 바로 실행하는 프로그램

  • 인터프리터의 동작

소스코드 -> 실시간 기계어로 해석(실행파일 X)



🔥 C# 단위

C# 프로젝트(.csproj)

C# 프로그램 개발을 위한 기본 단위

비주얼 스튜디오에서 복수의 소스파일과 기타 부속 정보를 함께 묶어 관리하기 위한 개념

솔루션(.sln)

비주얼 스튜디오에서 관련 프로젝트 여러 개를 함께 관리할 수 있는 단위



🔥 using, using static

using

using 키워드만 사용하면 네임스페이스 전체 사용

ex) using System;

using static

데이터 형식(예: 클래스)의 정적 멤버를 데이터 형식의 이름을 명시하지 않고 참조하겠다 선언하는 기능으로 코드를 보다 간결하고 직관적으로 만들 수 있다

ex) using static System.Math;

global using

global using을 한 번 선언하면 프로젝트 내 어디서든 해당 namespace를 참조한다.

ex) global using System.Math;


📌 정적 멤버와 비정적 멤버

  • 정적 멤버(static member)
    • 클래스 자체에 속한다.
    • 객체 생성 없이 사용 가능하다.
    • 모든 인스턴스가 공유한다.

메모리 - 한 번만 생성되어 공유 (프로그램이 시작 될 때 메모리의 데이터 영역에 올라가며, 프로그램이 종료될 때까지 유지된다.)

  • 비정적 멤버(instance member)
    • 객체(인스턴스)에 속한다
    • 객체 생성해야 사용 가능하다.
    • 객체마다 별개의 값과 동작을 한다.

메모리 - 객체마다 따로 생성됨 (힙 영역에 객체 정보와 함께 올라간다.)

class MyClass
{
	public static int staticCnt = 0; // 정적 멤버
    public int instanceCnt = 0; // 비정적 멤버
    
    public MyClass()
    {
    	staticCnt++;
        instanceCnt++;
    }
}

class Program
{
	static void Main()
    {
    	MyClass obj1 = new MyClass();
        MyClass obj2 = new MyClass();
        
        Console.WriteLine(MyClass.staticCnt); // 2 -- 정적 멤버 모든 객체가 같은 staticCnt를 공유
        Console.WriteLine(obj1.instanceCnt); // 1 -- 비정적 멤버 - 객체별 따로 존재
        Console.WriteLine(obj2.instanceCnt); // 1 -- 비정적 멤버
    }
}


🔥 namespace

네임스페이스는 성격이나 하는 일이 비슷한 클래스, 구조체, 인터페이스, 대리자, 열거 형식등을 하나의 이름 아래 묶는 일을 한다.

⚔ 네임스페이스를 만들 때

namespace 네임스페이스 이름
{
	// 클래스
    // 구조체
    // 인터페이스 등..
}
namespace Hello 
{
	class HelloClass
    {
    }
}

다른 네임스페이스에서 HelloClass를 사용하려면

using Hello; 문장을 이용해서 네임스페이스를 참조하거나, Hello.HelloClass 처럼 클래스가 소속되어 있는 네임스페이스와 클래스의 이름을 붙여줘야한다.

파일 범위 네임스페이스

한 개의 C# 소스 파일(.cs)는 여러 개의 네임스페이스를 가질 수 있다.

⚔ 한 개의 C# 소스 파일에 namespace가 여러 개 일 때

namespace Devices
{
	//...
}

namespace Softwares
{
	//...
}

하지만 대부분의 경우 파일 하나에 네임스페이스 하나씩만 선언해서 파일 범위 네임스페이스(File Scoped Namespace) 등장

파일 범위 네임스페이스는 namespace 선언 뒤에 {}없이 세미콜론;를 붙이면 그 파일의 모든 코드는 해당 네임스페이스 소속으로 들어가게 만든다.

namespace Devices;



🔥 Static void Main(string[] args)

이 메소드는 프로그램의 진입점(Entry Point)로서 프로그램을 시작하면 실행되고 이 메소드가 종료되면 프로그램도 역시 종료된다.

따라서 모든 프로그램은 반드시 Main이라는 이름을 가진 메소드를 하나 가지고 있어야 한다.

유니티의 Entry Point는 ?

유니티의 Entry Point는 유니티 엔진 내부에서 관리를 한다.

유니티의 Entry Point 참고: https://discussions.unity.com/t/where-is-the-entry-point-for-a-c-application/46541

0개의 댓글