🔥 인자의 가시성 제어하기
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
를 사용하여verbose
와useLegacyFormat
플래그를 정의하고 있어요.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에서 제공하는 가시성 제어 기능을 활용하면, 인자와 옵션을 상황에 맞게 노출하여 사용자에게 적절한 정보를 제공할 수 있습니다. 특히 아직 실험 단계이거나 레거시 지원용인 기능들을 관리하는 데 유용하게 사용할 수 있습니다.