336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

1. 개요

개발을 하다 보면 어플리케이션 파라미터를 처리 해야 될 때가 있다.

간단한 경우라면 문자열 비교로 충분하지만 스위치를 동반한 파라미터는 좀더 구조적으로 작성 될 필요가 있다.

아래와 같이 스위치를 이용한 파라미터 처리는 문자열 비교만으로 복잡할 뿐만 아니라 디버깅 또한 쉽지 않다.

문자열 파라미터를 객체에 매핑 하여 구조화된 처리를 원한다면, 파라미터 객체 매핑 프레임워크를 이용하는 것이 좋다. 오늘은 "CommandLineParser" 이용한 파라미터 처리에 대해 간단히 살펴 보겠다.

2. 예제

CommandLineDemo 콘솔 프로젝트를 만들자.

Nuget 패키지에서 CommandLineParser를 검색하여 설치 하자.

파라미터를 매핑할 객체의 클래스를 다음과 같이 정의한다.

internal class Options
{
  [Option('p', "path", Required = true, HelpText = "전체 경로를 지정합니다.")]
  public string FilePath { get; set; }

  [Option('v', "version", Required = true, HelpText = "대상 버전을 지정합니다.")]
  public string Version { get; set; }

  [Option('c', "code", Required = false, HelpText = "코드를 지정합니다.")]
  public string Code { get; set; }


  [HelpOption]
  public string GetUsage()
  {
      return HelpText.AutoBuild(this,
          (HelpText current) => HelpText.DefaultParsingErrorsHandler(this, current));
  }
}

작성된 클래스에 대해 살펴 보면,

  • 파라미터로 전달되는 스위치는 클래스 속성에 정의된 Option 특성을 기반으로 매핑 되는데, "스위치 간편 문자, 스위치 문자열, 필수 여부, 도움말"로 구성 할 수 있다.
  • ComandLineDemo.exe -p c:\test.log -v 1.0 -c 1234 를 예로 들면 다음과 같이 매핑된다.


파라미터

속성

 -p c:\test.log

FilePath

 -v 1.0

 Version

 -c 1234

 Code

  • HelpOption 특성은 도움말을 정의한 함수에 사용 하면 된다.
  • 예제는 클래스에 정의된 속성의 도움말을 이용하여 전체 도움말을 생성하도록 지정하였다.
  • 좀더 다양한 방법은 개발자 홈페이지를 방문하여 확인하기 바란다.

정의된 클래스를 문자열에 매핑하는 코드는 다음과 같다.

static void Main(string[] args)
{
   var options = new Options();
   if (!CommandLine.Parser.Default.ParseArguments(args, options))
   {
       Console.WriteLine(options.GetUsage());
       return;
   }
}

위 코드는 ParseArguments 함수를 호출하여 파라미터 문자열을 객체에 매핑 하고, 제대로 처리 되지 않으면 기본 도움말을 출력 하도록 작성하였다.

기본 도움말은 다음과 같다.

3. 마치며

어플리케이션 파라미터를 좀더 구조적으로 처리 하기 바란다면 주저 없이 CommandLineParser를 사용해 보기 바란다.

4. 참고

  • 개발 홈페이지 : https://github.com/gsscoder/commandline


+ Recent posts