Main 메서드는 클래스가 실행될 때 어떤 작업을 수행할지 정의하는 역할을 하며, 필요에 따라 다른 객체나 변수를 생성(instantiate)하기도 합니다.
C#에서 Main 메서드가 static으로 선언되는 이유는 프로그램이 시작되는 시점에 곧바로 호출될 수 있어야 하기 때문입니다. Main은 프로그램의 진입점(Entry Point)으로, 클래스의 인스턴스를 생성하지 않아도 런타임이 직접 호출하여 실행할 수 있습니다.
만약 Main이 static이 아니라면, 프로그램을 시작하기 전에 해당 클래스의 객체를 먼저 만들어야 하는데, 이 과정 자체가 프로그램 실행을 위해서라면 모순이 됩니다. 따라서 CLR(Common Language Runtime)은 별도의 객체 생성 없이 static 메서드인 Main을 바로 호출하는 방식으로 프로그램을 시작합니다.
예제 코드
using System;
namespace Demo {
class HelloWorld {
static void Main(string[] args) {
Console.WriteLine("Bingo!");
Console.ReadKey();
}
}
}실행 결과
Bingo!
위 예제에서 Main 메서드의 시그니처를 살펴보겠습니다.
static void Main(string[] args) {각 구성 요소의 의미
static — 객체(인스턴스)를 생성하지 않고도 정적 멤버에 접근할 수 있습니다. 즉, CLR이 클래스 인스턴스 없이 Main을 직접 호출할 수 있습니다.
void — 메서드의 반환 타입입니다. 값을 반환하지 않음을 의미합니다.
Main — 모든 C# 프로그램의 진입점으로, 프로그램 실행이 이 지점부터 시작됩니다.
string[] args — 명령줄에서 전달된 인수(command-line arguments)를 담는 문자열 배열 매개변수입니다.
참고로 Main 메서드는 int 반환 타입을 사용해 종료 코드를 반환할 수도 있으며, 비동기 프로그램의 경우 async Task Main 형태로 선언하는 것도 가능합니다.