다음을 통해 공유


C# 콘솔 앱 템플릿은 최상위 문을 생성합니다.

.NET 6부터 새 C# 콘솔 앱용 프로젝트 템플릿은 Program.cs 파일에 다음 코드를 생성합니다.

// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");

새 출력에서는 프로그램에 대해 작성해야 하는 코드를 간소화하는 최신 C# 기능을 사용합니다. .NET 5 이하 버전의 경우 콘솔 앱 템플릿은 다음 코드를 생성합니다.

using System;

namespace MyApp // Note: actual namespace depends on the project name.
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

이 두 가지 양식은 같은 프로그램을 나타냅니다. 둘 다 C# 10.0에서 유효합니다. 최신 버전을 사용하는 경우 Main 메서드 본문을 작성하기만 하면 됩니다. 컴파일러는 진입점 메서드를 사용하여 Program 클래스를 생성하고 모든 최상위 문을 해당 메서드에 배치합니다. 생성된 메서드의 이름은 Main이(가) 아니며, 코드에서 직접 참조할 수 없는 구현 세부 정보입니다. 다른 프로그램 요소는 포함할 필요가 없으며 컴파일러가 해당 요소를 생성합니다. C# 가이드 기본 사항 섹션의 최상위 문에 관한 문서에서 최상위 문을 사용할 때 컴파일러가 생성하는 코드에 대해 자세히 알아볼 수 있습니다.

.NET 6+ 템플릿을 사용하도록 업데이트되지 않은 자습서로 작업할 수 있는 두 가지 옵션이 있습니다.

  • 새 프로그램 스타일을 사용하여 기능을 추가할 때 새 최상위 문을 추가합니다.
  • Program 클래스와 Main 메서드를 사용하여 새 프로그램 스타일을 이전 스타일로 변환합니다.

이전 템플릿을 사용하려면 이 문서 뒷부분에 나오는 이전 프로그램 스타일 사용을 참조하세요.

새 프로그램 스타일 사용

새 프로그램을 더 간단하게 만드는 기능은 ‘최상위 문’, ‘전역 using 지시문’, ‘암시적 using 지시문’입니다.

최상위 문이라는 용어는 컴파일러가 기본 프로그램에 대한 클래스 및 메서드 요소를 생성한다는 의미입니다. 컴파일러에서 생성된 클래스와 진입점 메서드는 전역 네임스페이스에 선언됩니다. 새 애플리케이션의 코드를 보고 이전 템플릿에서 생성된 Main 메서드 내부의 문이 전역 네임스페이스에 포함되어 있다고 상상할 수 있습니다.

기존 스타일의 Main 메서드에 문을 더 추가할 수 있는 것처럼 프로그램에 문을 더 추가할 수 있습니다. args(명령줄 인수)에 액세스하고, await를 사용하고, 종료 코드를 설정할 수 있습니다. 함수를 추가할 수도 있습니다. 만들어진 진입점 메서드 내에 중첩된 로컬 함수로 만들어집니다. 로컬 함수에는 액세스 한정자(예: public 또는 protected)가 포함될 수 없습니다.

최상위 문과 암시적 using 지시문을 모두 사용하면 애플리케이션을 구성하는 코드를 단순화할 수 있습니다. 기존 자습서를 따르려면 템플릿에서 생성된 Program.cs 파일에 새 문을 추가합니다. 자습서의 지침에서 Main 메서드의 여는 중괄호와 닫는 중괄호 사이에 작성하는 문이 있다고 가정할 수 있습니다.

이전 형식을 사용하려면 이 문서의 두 번째 예제 코드를 복사하고 이전과 같이 자습서를 계속하면 됩니다.

최상위 문에 관한 자습서 살펴보기에서 최상위 문에 대해 자세히 알아볼 수 있습니다.

암시적 using 지시문

암시적 using 지시문이라는 용어는 컴파일러가 프로젝트 형식에 따라 using 지시문 집합을 자동으로 추가한다는 의미입니다. 콘솔 애플리케이션의 경우 다음 지시문이 애플리케이션에 암시적으로 포함됩니다.

  • using System;
  • using System.IO;
  • using System.Collections.Generic;
  • using System.Linq;
  • using System.Net.Http;
  • using System.Threading;
  • using System.Threading.Tasks;

다른 애플리케이션 유형에는 이러한 애플리케이션 유형에 공통된 네임스페이스가 더 포함됩니다.

암시적으로 포함되지 않은 using 지시문이 필요한 경우 최상위 문이 포함된 .cs 파일 또는 다른 .cs 파일에 추가할 수 있습니다. 애플리케이션의 모든 using.cs 파일에 필요한 지시문의 경우 전역 using 지시문을 사용합니다.

암시적 using 지시문 사용 안 함

이 동작을 제거하고 프로젝트의 모든 네임스페이스를 수동으로 제어하려면 다음 예와 같이 프로젝트 파일의 <PropertyGroup> 요소에 <ImplicitUsings>disable</ImplicitUsings>를 추가합니다.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    ...
    <ImplicitUsings>disable</ImplicitUsings>
  </PropertyGroup>

</Project>

전역 using 지시문

전역 using 지시문은 단일 파일 대신 전체 애플리케이션에 대한 네임스페이스를 가져옵니다. 프로젝트 파일에 <Using> 항목을 추가하거나 코드 파일에 global using 지시문을 추가하여 이러한 전역 지시문을 추가할 수 있습니다.

또한 특정 암시적 using 지시문을 제거하기 위해 Remove 특성이 있는 <Using> 항목을 프로젝트 파일에 추가할 수도 있습니다. 예를 들어 암시적 using 지시문 기능이 <ImplicitUsings>enable</ImplicitUsings>로 설정된 경우 다음 <Using> 항목을 추가하면 암시적으로 가져온 항목에서 System.Net.Http 네임스페이스가 제거됩니다.

<ItemGroup>
  <Using Remove="System.Net.Http" />
</ItemGroup>

이전 프로그램 스타일 사용

.NET SDK 6.0.300부터 console 템플릿에는 --use-program-main 옵션이 있습니다. 이를 사용하여 최상위 문을 사용하지 않고 Main 메서드가 있는 콘솔 프로젝트를 만듭니다.

dotnet new console --use-program-main

생성된 Program.cs는 다음과 같습니다.

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

Visual Studio에서 이전 프로그램 스타일 사용

  1. 새 프로젝트를 만들 때 설치 단계가 추가 정보 설정 페이지로 이동합니다. 이 페이지에서 최상위 문을 사용하지 않음 확인란을 선택합니다.

    Visual Studio do not use top-level statements check box

  2. 프로젝트가 만들어진 후 Program.cs 콘텐츠는 다음과 같습니다.

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

참고 항목

Visual Studio는 다음에 동일한 템플릿을 기반으로 프로젝트를 만들 때 옵션 값을 유지하므로 다음에 콘솔 앱 프로젝트를 만들 때 기본적으로 "최상위 문을 사용 안 함" 확인란이 선택됩니다. Program.cs 파일의 콘텐츠는 전역 Visual Studio 텍스트 편집기 설정 또는 EditorConfig 파일에 정의된 코드 스타일과 일치하기 위해 다를 수 있습니다.

자세한 내용은 편집기Config를 사용하여 이식 가능한 사용자 지정 편집기 설정 만들기옵션, 텍스트 편집기, C#, 고급을 참조하세요.