Derive API
구조체에서 인수 만들기
Derive API은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
derive API
derive API를 사용하면 CLI를 구조체로 설명하고 #[derive(Parser)]를 통해 clap이 분석기를 생성하도록 할 수 있습니다.
- 빌더 API보다 반복해서 작성해야 하는 코드가 적습니다
- 형식이 안전합니다. 필드가 형식이 지정된 값이 됩니다
derive 기능을 활성화하면 사용할 수 있습니다.
최소한의 Parser 구조체
#[derive(Parser)]로 구조체에 주석을 달고 main에서 Cli::parse()를 호출하세요. 각 필드는 하나의 인수가 됩니다.
use clap::Parser;
#[derive(Parser)]
struct Cli {
name: String,
}
fn main() {
let cli = Cli::parse();
println!("Hello, {}!", cli.name);
}필드를 위치 인수로 만들기
name: String처럼 단독으로 작성한 필드는 필수 위치 인수입니다. 필드 이름이 값의 이름이 됩니다.
use clap::Parser;
#[derive(Parser)]
struct Cli {
input: String,
output: String,
}선택적 필드
필드를 Option으로 감싸 선택 사항으로 만드세요. 사용자가 생략하면 None을 얻습니다.
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(short, long)]
config: Option<String>,
}플래그와 짧은 이름 및 긴 이름
#[arg(short, long)] 주석은 필드 이름에서 -v와 --verbose를 파생합니다. bool 필드는 스위치가 됩니다.
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(short, long)]
verbose: bool,
}형식이 지정된 값
clap은 필드의 형식으로 값을 분석합니다. u32 필드는 숫자가 아닌 입력을 자동으로 거부합니다.
use clap::Parser;
#[derive(Parser)]
struct Cli {
#[arg(short, long, default_value_t = 1)]
count: u32,
}분석된 Cli 모델링
분석이 끝난 Cli 구조체는 일반 데이터일 뿐입니다. 이 실행 가능한 버전에서는 분석 후 필드를 사용하는 방법을 보여 줍니다.
struct Cli {
name: String,
count: u32,
verbose: bool,
}
fn main() {
let cli = Cli { name: "Alice".to_string(), count: 2, verbose: true };
for _ in 0..cli.count {
println!("Hello, {}! (verbose={})", cli.name, cli.verbose);
}
}열거형으로 하위 명령 모델링
derive API에서는 #[derive(Subcommand)] 열거형으로 하위 명령을 모델링합니다. 각 변형이 하나의 명령이 됩니다.
use clap::{Parser, Subcommand};
#[derive(Parser)]
struct Cli {
#[command(subcommand)]
cmd: Commands,
}
#[derive(Subcommand)]
enum Commands {
Add { task: String },
List,
}열거형 하위 명령 일치시키기
Cli::parse() 후에는 열거형을 일치시켜 명령을 분배합니다. 변형의 데이터도 깔끔하게 구조 분해할 수 있습니다.
use clap::Parser;
fn run(cli: Cli) {
match cli.cmd {
Commands::Add { task } => println!("add {}", task),
Commands::List => println!("list"),
}
}command 주석으로 메타데이터 설정
구조체에 #[command(name, version, about)]을 추가해 CLI 메타데이터를 설정하세요. version은 Cargo에서 자동으로 읽을 수 있습니다.
use clap::Parser;
#[derive(Parser)]
#[command(name = "greet", version, about = "Greets people")]
struct Cli {
name: String,
}열거형 분배 예시
열거형을 기준으로 일치시키는 패턴은 derive 하위 명령의 핵심입니다. 다음은 이 아이디어를 독립적으로 실행할 수 있는 Rust 코드로 나타낸 예입니다.
enum Command {
Add(String),
List,
}
fn main() {
let cmd = Command::Add("Write code".to_string());
match cmd {
Command::Add(task) => println!("Added: {}", task),
Command::List => println!("Listing"),
}
}빠른 확인
derive API에 대한 이해도를 확인해 보세요.
복습
derive API는 구조체를 분석기로 변환합니다.
#[derive(Parser)]와Cli::parse()를 사용합니다- 단독 필드는 위치 인수이며,
Option으로 감싸면 선택 사항이 됩니다 #[arg(short, long)]으로 플래그와 옵션을 파생합니다#[derive(Subcommand)]열거형으로 하위 명령을 모델링합니다
다음으로 값 검증과 완성도 높은 도움말 출력을 알아봅니다.
자주 묻는 질문
“Derive API” 강의는 무료인가요?
네 — “Derive API” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.
“Derive API”에서 뭘 배우나요?
구조체에서 인수 만들기 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Derive API” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.