🔥 옵션과 플래그 이름 설정하기

266자
4분

커맨드 라인에서 사용하는 옵션과 플래그 이름은 대개 속성 이름에서 비롯됩니다. 예를 들면 --count--index 같은 식입니다. 카멜 케이스(camel-case) 이름은 --strip-whitespace처럼 하이픈으로 구분된 소문자 단어로 바꿉니다.

이 기본 동작을 재정의하려면 @Option 또는 @Flag 이니셜라이저에 하나 이상 이름 지정을 명시하면 됩니다. 다음 명령은 네 가지 이름 지정 방식을 보여줍니다:

struct Example: ParsableCommand {
    @Flag(name: .long)  // 기본값과 동일
    var stripWhitespace = false
 
    @Flag(name: .short)
    var verbose = false
 
    @Option(name: .customLong("count"))
    var iterationCount: Int
 
    @Option(name: [.customShort("I"), .long])
    var inputFile: String
}
 
swift

각 이름 지정 방식을 하나씩 살펴보겠습니다:

  • .long 또는 .short를 지정하면 속성 이름을 커맨드 라인 이름 소스로 사용해요. long 이름은 전체 이름을 사용하고 앞에 대시 두 개(-)를 붙이고, short 이름은 한 문자를 사용하고 앞에 대시 한 개()를 붙입니다. 이 예제에서 stripWhitespaceverbose 플래그를 이런 식으로 지정했습니다:

    % example --strip-whitespace -v
    
    text
  • .customLong(_:) 또는 .customShort(_:)를 지정하면 주어진 문자열이나 문자를 속성 long 또는 short 이름으로 사용합니다.

    % example --count 10 -I file1.swift
    
    text
  • 배열 리터럴 구문으로 여러 이름을 지정할 수 있어요. inputFile 속성은 기본 long 이름으로도 제공할 수 있습니다:

    % example --input-file file1.swift
    
    text

참고: .customLongwithSingleDash: true를 전달하여 -verbose와 같은 single-dash 플래그나 옵션을 만들 수도 있습니다. 이 이름 지정은 레거시 커맨드 라인 인터페이스를 마이그레이션할 때처럼 꼭 필요한 경우에만 사용하세요. single-dash 접두사와 함께 long 이름을 사용하면 short 이름과 조합될 때 모호성이 발생할 수 있거든요. -file이 옵션 한 개인지 -f, -i, -l, -e 네 가지 short 옵션을 조합한 것인지 명확하지 않을 수 있습니다.

이렇게 옵션과 플래그 이름을 설정하는 방법에 대해 알아봤습니다. 상황에 맞게 적절한 방식을 선택하여 사용하면 좋겠네요. 커맨드 라인 인터페이스를 설계할 때는 사용자 입장에서 직관적이고 일관성 있는 이름을 고르는 게 중요하답니다!