본문 바로가기
프로그래밍/C# (WinForms)

C#, WinForms ] program.cs C# 프로그램 진입점

by eteo 2023. 5. 14.

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Appname1
{
    internal static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

 

 

using 문을 사용해 소스코드 내에서 사용할 네임스페이스를 지정한다.

 

  • using System; .NET Framework의 기본 네임스페이스
  • using System.Collections.Generic : 제네릭(Generics) 컬렉션 클래스를 포함한 네임스페이스, List, Dictionary 등
  • using System.Linq; Language Integrated Query(LINQ)를 지원하는 네임스페이스
  • using System.Threading.Tasks; 병렬 처리 및 비동기 프로그래밍을 지원하는 네임스페이스
  • using System.Windows.Forms; Windows Forms 애플리케이션을 만들기 위해 필요한 클래스들을 포함한 네임스페이스

 

Visual Studio에서 새 프로젝트를 만들면 프로젝트명으로 namespace가 만들어지고 그 안에 Program 클래스가 자동 생성된다. Program 클래스 안에 있는 Main 메서드는 C# 프로그램의 진입점(entry point)이다. 프로그램이 시작되면 Main 메서드 안에 작성된 코드가 순서대로 실행된다.

 

Program 클래스가 아닌 다른 클래스에 Main 메서드를 둘 수도 있지만 프로그램을 시작할 때 실행되는 메서드는 반드시 Main 메서드이며, 이 메서드는 static으로 선언되어야 한다. 따라서 Main 메서드가 속한 클래스도 static으로 선언되어야 한다.

 

 

  • [STAThread] : 이 애플리케이션이 단일 스레드 아파트(single-threaded apartment) 모델을 사용한다는 것을 지정한다. Windows Forms 애플리케이션에서는 대개 STA 모델을 사용한다.
  • Application.EnableVisualStyles() : 시각적 스타일을 활성화한다.
  •  Application.SetCompatibleTextRenderingDefault(false) : 애플리케이션에서 사용할 기본 텍스트 렌더링 모드를 설정한다. Windows Forms 애플리케이션에서 텍스트 렌더링에 대한 기본값을 설정하며, false 값을 전달하여 GDI+ 텍스트 렌더링 모드를 사용하도록 지정한다.
  • Application.Run(new Form1()) : Form1 클래스의 인스턴스를 만들어 실행한다. 이 메서드는 Windows Forms 메시지 루프를 시작하고, 이벤트를 처리하여 애플리케이션의 동작을 제어한다.