푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 애플리케이션
C# 애플리케이션

다른 카테고리

10분 이내의 C# 애플리케이션 명령줄 인수

Tim Corey
8분 46초

최신 C# 애플리케이션을 개발할 때 개발자는 프로그램 시작 및 동작 방식에 유연성이 필요한 경우가 많습니다. 모든 옵션을 하드코딩하는 대신, 사용자가 애플리케이션 실행 시 명령줄 인수를 전달할 수 있도록 하여 애플리케이션을 동적으로 만들 수 있습니다. 이를 통해 개발자와 사용자 모두 명령줄을 통해 직접 입력 매개변수를 제공하여 코드 변경 없이 애플리케이션 실행 방식을 조정할 수 있습니다.

Tim Corey는 " 10분 안에 C# 애플리케이션에서 명령줄 인수 사용하기 "라는 제목의 간결한 10분짜리 튜토리얼에서 콘솔 애플리케이션과 Windows Forms 애플리케이션 모두에서 명령줄 인수를 활성화하고 효과적으로 처리하는 방법을 명확하게 보여줍니다. 이 글에서는 팀이 설명하는 내용을 단계별로 자세히 살펴봅니다.

명령줄 인수란 무엇인가요?

처음에 팀은 명령줄 인수가 왜 중요한지 설명합니다. 그는 이를 Docker와 같은 도구를 실행하는 방식과 비교하는데, Docker에서는 어떤 이미지를 로드할지 또는 어떤 작업을 수행할지와 같은 명령어를 지정합니다. 마찬가지로 C# 명령줄 애플리케이션에서도 런타임 시 프로그램의 동작을 정의하는 매개변수를 전달할 수 있습니다.

예를 들어, 파일을 처리하는 콘솔 앱을 실행하는 경우 코드 수정 대신 명령줄 입력을 통해 파일 경로 또는 모드를 지정할 수 있습니다.

콘솔 프로젝트 설정하기

Tim은 Visual Studio에서 기본적인 .NET 8 콘솔 애플리케이션 프로젝트를 시작합니다. 기본 코드는 Console.ReadLine() 문을 사용하여 사용자 입력을 기다린 후 종료하고 "Enter 키를 눌러 종료하세요"와 같은 메시지만 출력합니다.

이제 Tim은 명령줄 입력을 처리하기 위해 실행 시 애플리케이션에 전달되는 인수를 저장하는 args 배열을 도입합니다. 최신 C# 콘솔 앱은 최상위 수준 명령문을 사용하지만, 내부적으로는 여전히 다음과 같이 정의된 진입점을 가지고 있습니다.

static void Main(string[] args)
static void Main(string[] args)

또는 때때로:

static int Main(string[] args)
static int Main(string[] args)

이러한 시그니처는 실행이 시작되는 진입점인 메인 메서드를 나타냅니다. args 매개변수는 명령줄에서 제공된 모든 인수를 포함하는 문자열 배열(string[])입니다.

Tim은 foreach 루프를 사용하여 args 배열을 순회하는 방법을 보여줍니다.

foreach (var arg in args)
{
    Console.WriteLine(arg);
}
foreach (var arg in args)
{
    Console.WriteLine(arg);
}

여기서 var arg는 args 배열의 각 문자열 인수를 나타내며, 프로그램은 콘솔 출력에서 ​​이들을 각각 다른 줄에 표시합니다.

Tim은 최상위 수준의 구문이 Program 클래스와 Main 메서드와 같은 상용구 코드를 숨기지만 모든 것이 여전히 동일하게 작동한다고 지적합니다. 즉, args 배열은 항상 사용 가능하며 명령줄 인수를 받을 준비가 되어 있습니다.

콘솔 애플리케이션 실행

다음으로 Tim은 이 기능을 테스트하는 방법을 보여줍니다. Visual Studio 내에서 프로그램을 정상적으로 실행하면 명령줄 입력이 제공되지 않으므로 아무런 차이도 나타나지 않습니다.

제대로 테스트하기 위해 그는 실행 과정을 수동으로 수정합니다. 파일 탐색기를 열고 프로젝트의 bin → Debug → net8.0 폴더로 이동한 다음 해당 경로에서 터미널 창을 실행합니다.

그 다음, 그는 다음 명령어를 사용합니다.

ConsoleArgs.exe "hello world" -t timing
ConsoleArgs.exe "hello world" -t timing

이 명령은 몇 가지 핵심 사항을 보여줍니다.

  • 따옴표로 묶인 "hello world"는 두 개의 단어가 아닌 하나의 문자열 인수로 처리됩니다.

  • 플래그 -t와 단어 timing은 두 개의 추가 인수로 처리됩니다.

실행 시 콘솔 출력은 다음과 같습니다.

hello world  
-t  
timing
hello world  
-t  
timing

각 줄 인수는 args 배열의 한 요소를 나타냅니다. 팀은 이것이 명령줄 인수의 올바른 사용을 확인시켜 준다고 설명합니다. 즉, 콘솔 애플리케이션이 실행 중에 전달된 모든 인수를 성공적으로 수신하고 표시했다는 것입니다.

그는 개발자들이 프로젝트 디렉토리에서 실행할 때 실행 파일 경로 대신 dotnet run을 사용할 수도 있다고 언급합니다.

dotnet run -- "hello world" -t timing
dotnet run -- "hello world" -t timing

이중 대시(--)는 .NET 에게 그 뒤에 오는 모든 내용을 .NET CLI 자체가 아닌 프로그램의 명령줄 매개변수 로 처리하도록 지시합니다.

명령줄 인수의 처리 및 구문 분석

이제 인수를 읽을 수 있게 되었으니, Tim은 명령줄 인수를 지능적으로 처리하는 방법에 대해 논의합니다.

예를 들어, -t가 값을 기대하는 플래그라면, 프로그램은 다음 문자열 인수를 해당 값으로 처리해야 한다는 것을 알아야 합니다. Tim은 args 배열의 인덱스를 확인하여 이를 수동으로 구문 분석할 수 있음을 보여줍니다.

for (int i = 0; i < args.Length; i++)
{
    if (args[i] == "-t")
    {
        var value = args[i + 1];
        Console.WriteLine($"Timing parameter: {value}");
    }
}
for (int i = 0; i < args.Length; i++)
{
    if (args[i] == "-t")
    {
        var value = args[i + 1];
        Console.WriteLine($"Timing parameter: {value}");
    }
}

이 접근 방식을 사용하면 명명된 인수, 숫자 유형 및 상세 표시 모드 플래그까지 처리할 수 있습니다. Tim은 개발자들이 고급 인자 구문 분석을 위해 switch 문이나 외부 문서 및 라이브러리를 사용하는 경우가 많지만, System 네임스페이스와 args 배열은 기본적인 경우에 필요한 모든 것을 이미 제공한다고 지적합니다.

Windows Forms 애플리케이션으로 확장하기

콘솔 앱 시연을 마친 후, 팀은 윈도우 폼(WinForms) 애플리케이션 시연으로 넘어갑니다.

생성된 코드의 Program.cs 파일에는 정적 void Main() 메서드가 포함되어 있지만 아직 매개변수를 받지 않습니다. 명령줄 인수를 활성화하기 위해 Tim은 Main 메서드를 수동으로 수정하여 args 매개변수를 포함시켰습니다.

[STAThread]
static void Main(string[] args)
{
    ApplicationConfiguration.Initialize();
    Application.Run(new Form1(args.FirstOrDefault() ?? "default"));
}
[STAThread]
static void Main(string[] args)
{
    ApplicationConfiguration.Initialize();
    Application.Run(new Form1(args.FirstOrDefault() ?? "default"));
}

그는 args.FirstOrDefault()가 args 배열에서 첫 번째 입력 매개변수를 가져오거나(인수가 제공되지 않으면 "default"를 반환)한다고 설명합니다.

그런 다음 Tim은 Form1 클래스의 생성자가 문자열 인수를 받도록 업데이트합니다.

public Form1(string name)
{
    InitializeComponent();
    displayName.Text = name;
}
public Form1(string name)
{
    InitializeComponent();
    displayName.Text = name;
}

여기서 displayName은 Windows Forms 디자이너에서 정의된 레이블이며, 이제 명령줄을 통해 전달된 인수를 표시합니다.

그가 인자 없이 프로그램을 실행하면 레이블에 "기본값"이 표시됩니다. 그가 인자를 포함하여 다시 실행하면 다음과 같습니다.

WinFormsArgs.exe "Hello World"
WinFormsArgs.exe "Hello World"

폼 창에 "Hello World"가 표시됩니다.

팀은 이 기술을 통해 Windows Forms 애플리케이션이 콘솔 애플리케이션처럼 명령줄 인수를 지원할 수 있으며, 사용자가 시작 동작을 동적으로 변경할 수 있게 된다고 설명합니다.

명령줄 인수의 실제 활용법 (7:18)

팀은 이 기능을 통해 명령줄 도구가 얼마나 다재다능해질 수 있는지에 대한 논의로 결론을 맺습니다. 개발자는 명령줄 인수를 사용하여 다음을 수행할 수 있습니다.

애플리케이션을 다른 모드(예: 다크 모드 vs 라이트 모드*)로 실행합니다.

  • 시작 시 파일 경로 또는 구성 옵션을 제공하십시오.

  • -v 또는 --debug와 같은 간단한 스위치를 사용하여 상세 표시 모드 또는 디버그 기능을 활성화하십시오.

  • 다양한 워크플로에 대해 특정 인수를 전달하는 바로가기를 만드세요.

main 메서드가 문자열 인수를 받도록 설계하면 추가적인 사용자 입력 대화 상자나 구성 파일 없이도 애플리케이션의 유연성과 적응성을 쉽게 확장할 수 있습니다.

결론 (8:15)

그의 예시 중심 설명은 C#에서 명령줄 인수를 처리하는 것이 복잡하지 않다는 것을 보여줍니다. 모든 애플리케이션에는 명령줄에서 전달된 인수가 문자열 배열로 도착하는 진입점(Main)이 있다는 것을 이해하기만 하면 됩니다.

콘솔 앱이든 Windows Forms 앱이든, 이 개념을 활용하면 프로그램이 시작 시 지정된 명령, 값 및 매개변수에 동적으로 응답할 수 있습니다.

최종 결론

팀 코리의 영상은 C#에서 명령줄 인수를 올바르게 사용하는 방법에 대한 명확하고 실용적인 가이드를 제공합니다. Main 메서드의 args 매개변수가 어떻게 작동하는지 이해함으로써 개발자는 더욱 강력하고 구성 가능한 애플리케이션을 위해 인수를 쉽게 생성, 구문 분석 및 사용할 수 있습니다.

그러므로 다음에 C# 프로젝트를 만들 때는 명령줄 인수가 단순히 기술적인 구문이 아니라 프로그램과 사용자를 연결하는 다리 역할을 한다는 것을 기억하세요. 명령줄 인수는 코드에 더 큰 기능, 유연성, 그리고 실제 사용성을 제공합니다.

Hero Worlddot related to 10분 이내의 C# 애플리케이션 명령줄 인수
Hero Affiliate related to 10분 이내의 C# 애플리케이션 명령줄 인수

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해