🔥 이름 있는 옵션 사용하기

276자
4분

count 도구에는 사용성 문제가 있어요. 사용자가 입력 파일을 먼저 제공해야 할지, 출력 파일을 먼저 제공해야 할지 바로 명확하지 않죠. 두 입력에 위치 인자(positional argument)를 사용하는 대신, 레이블이 있는 옵션(labeled option)을 지정할 수 있습니다.:

shell
% count --input-file readme.md --output-file readme.counts
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 
shell
% count --input-file readme.md --output-file readme.counts
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 

이렇게 하려면 @Argument 속성 래퍼 대신 @Option 속성 래퍼를 사용합니다.:

swift
@main
struct Count: ParsableCommand {
    @Option var inputFile: String
    @Option var outputFile: String
 
    mutating func run() throws {
        print("""
            Counting words in '\(inputFile)' \\
            and writing the result into '\(outputFile)'.
            """)
 
        // 'inputFile'을 읽고, 단어를 세고, 'outputFile'에 저장해요.
    }
}
 
swift
@main
struct Count: ParsableCommand {
    @Option var inputFile: String
    @Option var outputFile: String
 
    mutating func run() throws {
        print("""
            Counting words in '\(inputFile)' \\
            and writing the result into '\(outputFile)'.
            """)
 
        // 'inputFile'을 읽고, 단어를 세고, 'outputFile'에 저장해요.
    }
}
 

@Option 속성 래퍼는 --name <value>처럼 보이는 명령줄(command-line) 입력을 나타내며, 속성 이름에서 이름을 파생시켜요.

이 인터페이스는 count 도구 사용자에게 장단점(trade-off)이 있어요. @Argument를 사용하면 사용자 입력량은 줄어들지만, 입력 파일과 출력 파일 중 어느 것을 먼저 입력해야 하는지 기억해야 하는 단점이 있습니다. 반면에 @Option을 사용하면 사용자가 입력해야 할 양은 조금 늘어나지만, 각 값 사이의 구분을 명확하게 해 줍니다. 옵션은 순서에 독립적이므로 사용자는 입력 파일과 출력 파일을 어느 순서로든 지정할 수 있어요:

shell
% count --output-file readme.counts --input-file readme.md
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 
shell
% count --output-file readme.counts --input-file readme.md
Counting words in 'readme.md' and writing the result into 'readme.counts'.
 

이렇게 옵션을 사용하면 사용자가 입력하는 명령이 조금 길어지긴 하지만, 어떤 값이 입력 파일이고 어떤 값이 출력 파일인지 명확하게 구분할 수 있어요. 게다가 옵션은 순서에 영향을 받지 않아서 사용자가 입력 파일과 출력 파일을 어떤 순서로 지정하든 상관없어요.

lecture image

이 다이어그램은 count 명령어 동작 방식을 보여줘요. 사용자는 --input-file--output-file 옵션으로 입력 파일과 출력 파일을 지정하고, count는 입력 파일 단어를 세어서 그 결과를 출력 파일에 저장해요.

이렇게 옵션을 사용하면 사용자가 입력하는 명령은 조금 길어지지만, 값들 역할을 명확히 하고 순서에 구애받지 않게 만들어요. 이는 명령어 사용성을 크게 향상시켜 줍니다!

YouTube 영상

채널 보기
Trie 자료구조 파이썬 구현: Search와 Starts With 연산 | Trie 자료구조 이야기
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
13편, 인덱스가 많으면 왜 느려질까? 쓰기 증폭과 인덱스 튜닝의 이해
트라이(Trie) 자료구조: 파이썬으로 삽입(Insert) 연산 구현하기 | Trie 자료구조 이야기
Trie(트라이) 자료구조 원리와 파이썬 클래스 설계 및 구현 | Trie 자료구조 이야기
숫자 하나가 AI 모델의 운명을 바꾼다? | 선형대수학
AI를 위한 선형대수학 - 소개 | 선형대수학
마지막편, 트라이 노드를 50% 이상 줄이는 방법? 압축 트라이 성능 분석 | Trie 자료구조 이야기