🔥 ParsableCommand

246자
4분

ParsableCommand는 하위 명령어를 가질 수 있는 명령어를 만들 때 사용하는 프로토콜입니다. ArgumentParser로 커맨드 라인 도구를 만들 때 필수적인 구성 요소죠. 아래 코드는 ParsableCommand 프로토콜을 정의하고 있습니다.

protocol ParsableCommand : ParsableArguments
 
swift

ParsableCommand 프로토콜은 ParsableArguments 프로토콜을 상속해요. 그래서 ParsableArguments 기능도 모두 사용할 수 있답니다.

이 프로토콜로 커맨드를 만들려면 먼저 @Argument, @Option, @Flag 속성 래퍼로 속성을 선언하세요. 필요하다면 @OptionGroup으로 옵션 그룹을 포함시킬 수도 있죠. 마지막으로 run() 메서드에서 명령어 기능을 구현하면 끝납니다.

@main
struct Repeat: ParsableCommand {
    @Argument(help: "반복할 문구입니다.")
    var phrase: String
 
    @Option(help: "'phrase'를 반복할 횟수입니다.")
    var count: Int? = nil
 
    mutating func run() throws {
        let repeatCount = count ?? 2
        for _ in 0..<repeatCount {
            print(phrase)
        }
    }
}
 
swift

위 코드를 하나씩 살펴볼까요?

  1. @main 속성은 이 타입이 프로그램 진입점임을 나타냅니다. 컴파일러는 @main이 붙은 타입이나 main.swift 파일을 실행 파일 시작점으로 사용해요. 둘 중 하나만 사용할 수 있으니, @main을 추가할 때는 main.swift 파일 이름을 명령어 이름으로 바꿔주세요.
  2. Repeat 구조체는 ParsableCommand 프로토콜을 따르고 있네요. 이렇게 하면 이 구조체를 명령어로 사용할 수 있습니다.
  3. phrase 속성은 @Argument 래퍼로 선언했어요. 인자는 필수로 제공해야 하는 값이랍니다. help 매개변수로 인자에 대한 설명을 추가할 수 있죠.
  4. count 속성은 @Option 래퍼로 선언했습니다. 옵션은 명령어 뒤에 또는 -를 붙여 제공하는 값이에요. 기본값을 nil로 설정했기 때문에 옵션을 생략할 수 있죠.
  5. run() 메서드는 명령어 실제 동작을 구현하는 곳입니다. 여기서는 phrasecount만큼 반복해서 출력합니다. countnil이면 기본값 2를 사용해요.

이렇게 ParsableCommand 프로토콜을 사용하면 간단하면서도 강력한 커맨드 라인 도구를 만들 수 있답니다. 코드만 봐도 명령어 사용법과 동작을 쉽게 이해할 수 있죠?