🔥 인자의 가시성 제어하기

333자
4분

ArgumentParser에서는 각 인자, 옵션 및 플래그에 대해 가시성을 지정할 수 있어요. 이를 통해 사용자에게 노출할 정보를 세밀하게 제어할 수 있지요. 가시성은 .hidden.private의 두 가지 옵션으로 설정 가능하답니다.

우선 .hidden 가시성을 사용하는 예제 코드를 살펴볼게요:

struct Example: ParsableCommand {
    @Flag(help: ArgumentHelp("추가 정보를 보여줍니다.", visibility: .hidden))
    var verbose: Bool = false
 
    @Flag(help: ArgumentHelp("레거시 포맷을 사용합니다.", visibility: .private))
    var useLegacyFormat: Bool = false
}
 
swift
  • @Flag를 사용하여 verboseuseLegacyFormat 플래그를 정의하고 있어요.
  • verbose 플래그는 visibility: .hidden을 통해 기본 도움말에서는 숨겨지지만, 확장 도움말에서는 보이도록 설정했습니다.
  • useLegacyFormat 플래그는 visibility: .private로 설정하여 확장 도움말에서도 완전히 숨겨지도록 했어요.

이제 터미널에서 도움말 명령을 실행해 볼까요?

% example --help
USAGE: example

OPTIONS:
  -h, --help              도움말 정보를 보여줍니다.

% example --help-hidden
USAGE: example [--verbose]

OPTIONS:
  --verbose               추가 정보를 보여줍니다.
  -h, --help              도움말 정보를 보여줍니다.
text
  • -help 명령으로는 기본 도움말만 출력되고, verbose 플래그는 보이지 않네요.
  • -help-hidden 명령을 사용하면 verbose 플래그가 나타나는 걸 확인할 수 있어요.
  • useLegacyFormat.private 설정으로 인해 어떤 도움말에서도 보이지 않습니다.

또 다른 방법으로, 여러 인자를 그룹화하여 ParsableArguments 프로토콜을 채택한 타입으로 묶고, @OptionGroup 프로퍼티를 통해 포함시킬 때 가시성을 설정할 수도 있어요.

struct ExperimentalFlags: ParsableArguments {
    @Flag(help: "원격 액세스 토큰을 사용합니다. (실험적 기능)")
    var experimentalUseRemoteAccessToken: Bool = false
 
    @Flag(help: "고급 보안 기능을 사용합니다. (실험적 기능)")
    var experimentalAdvancedSecurity: Bool = false
}
 
struct Example: ParsableCommand {
    @OptionGroup(visibility: .hidden)
    var flags: ExperimentalFlags
}
 
swift
  • ExperimentalFlags 구조체 내부에 실험적인 플래그들을 묶어 두었어요.
  • 이를 Example 명령의 flags 프로퍼티로 포함시키면서 visibility: .hidden을 설정했습니다.

이제 터미널에서 다시 도움말을 확인해 보면:

% example --help
USAGE: example

OPTIONS:
  -h, --help              도움말 정보를 보여줍니다.

% example --help-hidden
USAGE: example [--experimental-use-remote-access-token] [--experimental-advanced-security]

OPTIONS:
  --experimental-use-remote-access-token
                          원격 액세스 토큰을 사용합니다. (실험적 기능)
  --experimental-advanced-security
                          고급 보안 기능을 사용합니다. (실험적 기능)
  -h, --help              도움말 정보를 보여줍니다.
text
  • 기본 도움말에서는 보이지 않던 ExperimentalFlags의 멤버들이 -help-hidden을 통해서만 출력되는 걸 볼 수 있네요.

이렇게 ArgumentParser에서 제공하는 가시성 제어 기능을 활용하면, 인자와 옵션을 상황에 맞게 노출하여 사용자에게 적절한 정보를 제공할 수 있습니다. 특히 아직 실험 단계이거나 레거시 지원용인 기능들을 관리하는 데 유용하게 사용할 수 있습니다.