Learn Rust Coding · 강의

사용자 정의 직렬화

필드 어트리뷰트

레슨 3/413개 단계

사용자 정의 직렬화은(는) CoddyKit의 무료 Learn Rust Coding 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn Rust Coding 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

serde 사용자 지정하기

serde는 attributes를 사용해 필드가 형식에 매핑되는 방식을 세밀하게 제어할 수 있습니다. #[serde(...)]를 통해 필드 이름을 바꾸고, 필드를 건너뛰고, 기본값을 설정하는 등의 작업을 할 수 있습니다.

필드 이름 바꾸기

rename을 사용하면 Rust 필드 이름을 출력의 다른 키에 매핑할 수 있습니다. JSON이 다른 명명 규칙을 사용할 때 유용합니다.

use serde::Serialize;

#[derive(Serialize)]
struct User {
    #[serde(rename = "userName")]
    user_name: String,
}

모든 이름 한꺼번에 바꾸기

rename_all을 사용하면 모든 필드에 한 번에 명명 규칙을 적용할 수 있습니다. 예를 들어 snake_case인 Rust 이름을 camelCase인 JSON 이름으로 바꿀 수 있습니다.

use serde::Serialize;

#[derive(Serialize)]
#[serde(rename_all = "camelCase")]
struct User {
    first_name: String,
    last_name: String,
}

필드 건너뛰기

skip은 필드를 완전히 제외합니다. skip_serializing_if는 조건에 따라 필드를 제외하며, 비어 있는 선택적 값을 숨길 때 사용할 수 있습니다.

use serde::Serialize;

#[derive(Serialize)]
struct User {
    name: String,
    #[serde(skip_serializing_if = "Option::is_none")]
    nickname: Option<String>,
}

역직렬화 시 기본값

default는 입력에서 필드가 누락되었을 때 값을 제공하므로 역직렬화가 실패하지 않습니다.

use serde::Deserialize;

#[derive(Deserialize)]
struct Config {
    #[serde(default)]
    retries: u32,
}

사용자 지정 기본값 함수

default를 함수에 연결하면 0이 아닌 대체값을 제공할 수 있습니다.

use serde::Deserialize;

fn default_port() -> u16 { 8080 }

#[derive(Deserialize)]
struct Config {
    #[serde(default = "default_port")]
    port: u16,
}

이름 변경과 기본값 모델링

주석의 동작은 키 매핑과 대체값 지정으로 이루어집니다. 이 실행 가능한 예제는 HashMap으로 그 동작을 재현합니다.

use std::collections::HashMap;

fn main() {
    let mut input: HashMap<&str, &str> = HashMap::new();
    input.insert("userName", "Alice");
    let user_name = input.get("userName").copied().unwrap_or("anon");
    let port = input.get("port").copied().unwrap_or("8080");
    println!("user_name={} port={}", user_name, port);
}

역직렬화 시 별칭

alias는 읽을 때 대체 키를 허용하므로 이전 필드 이름과 새 필드 이름을 모두 지원할 때 유용합니다.

use serde::Deserialize;

#[derive(Deserialize)]
struct User {
    #[serde(alias = "username")]
    name: String,
}

평탄화

flatten은 중첩된 구조체의 필드를 부모 객체에 인라인으로 배치하여 JSON의 중첩 수준을 하나 줄입니다.

use serde::Serialize;

#[derive(Serialize)]
struct Meta { page: u32 }

#[derive(Serialize)]
struct Resp {
    data: String,
    #[serde(flatten)]
    meta: Meta,
}

모듈을 사용한 사용자 지정

완전히 제어하려면 serialize와 deserialize 함수를 제공하는 모듈을 with에 지정하세요. 예를 들어 타임스탬프 형식을 지정할 때 사용할 수 있습니다.

use serde::Serialize;

#[derive(Serialize)]
struct Event {
    #[serde(with = "my_date_format")]
    at: i64,
}

열거형 태그 지정

tag(내부 태그 방식) 또는 untagged를 사용해 열거형의 인코딩 방식을 제어할 수 있습니다. 이를 통해 변형 형식의 JSON 구조를 정합니다.

use serde::Serialize;

#[derive(Serialize)]
#[serde(tag = "type")]
enum Event {
    Click { x: i32, y: i32 },
    Key { code: u8 },
}

빠른 확인

사용자 지정 직렬화에 대한 이해도를 확인해 보세요.

복습

직렬화를 사용자 지정하는 방법을 배웠습니다:

  • rename과 rename_all로 필드 이름을 매핑합니다
  • skip과 skip_serializing_if로 출력을 제어합니다
  • default와 alias로 역직렬화를 간소화합니다
  • flatten, with, 열거형의 tag로 구조를 처리합니다

다음: JSON을 넘어선 형식

무료로 시작

AI 튜터와 함께 Rust을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
39
레슨
144

자주 묻는 질문

“사용자 정의 직렬화” 강의는 무료인가요?

네 — “사용자 정의 직렬화” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn Rust Coding 강의 전체를 잠금 해제할 수 있습니다. Learn Rust Coding 강의에는 총 4개의 강의가 포함되어 있습니다.

“사용자 정의 직렬화”에서 뭘 배우나요?

필드 어트리뷰트 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Learn Rust Coding을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Learn Rust Coding은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“사용자 정의 직렬화” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Learn Rust Coding 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Learn Rust Coding 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 직렬화와 역직렬화
  2. JSON 다루기
  3. 사용자 정의 직렬화
  4. 기타 형식
← Learn Rust Coding(으)로 돌아가기