0Pricing
Learn Rust Coding · 강의

구조체 정의와 사용

튜플 구조체와 단위형 구조체를 포함한 사용자 정의 자료 구조를 만들고, 관련 데이터를 하나로 묶는 방법을 배웁니다.

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

구조체 알아보기: 사용자 정의 데이터 타입

Rust에서 구조체(structure의 줄임말)는 여러 관련 값을 의미 있는 그룹으로 묶고 이름을 지정하여 사용자 정의 데이터 타입을 만드는 방법입니다.

구조체를 User, Color 또는 공간의 Point를 위한 설계도라고 생각해 보세요. 사용자의 이름, 이메일, 나이를 별도의 변수로 두는 대신 모두 User 구조체 안에 넣을 수 있습니다.

이를 통해 데이터를 논리적으로 정리하고 코드를 더 쉽게 읽고 유지 관리할 수 있습니다.

일반 구조체 정의하기

가장 일반적인 구조체 유형은 일반 구조체입니다. 여기서는 데이터의 각 부분에 이름을 붙이며, 이를 필드라고 합니다. 다음과 같이 정의합니다:

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    // This code only defines the struct blueprint.
    // No actual user has been created yet!
    println!("Struct 'User' blueprint defined.");
}

구조체 인스턴스 만들기

구조체를 정의한 후에는 구체적인 인스턴스를 만들 수 있습니다. 각 인스턴스는 필드에 대한 특정 값을 보유합니다. 각 필드에 구체적인 값을 지정하여 인스턴스를 만듭니다.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    println!("User instance created!");
}

구조체 필드에 접근하기

구조체 인스턴스에서 데이터를 가져오려면 점 표기법을 사용합니다. 인스턴스 이름, 점(.), 필드 이름을 차례로 입력하면 됩니다.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    println!("User's username: {}", user1.username);
    println!("User's email: {}", user1.email);
}

구조체의 가변성

일반 변수와 마찬가지로 전체 구조체 인스턴스도 mut 키워드를 사용하여 가변으로 만들 수 있습니다. 인스턴스가 가변이면 모든 필드를 변경할 수 있습니다.

특정 필드만 가변으로 만들 수는 없습니다. 가변성은 구조체 인스턴스 전체에 적용됩니다.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };
    
    println!("Old email: {}", user1.email);
    user1.email = String::from("new_alice@example.com");
    println!("New email: {}", user1.email);
}

튜플 구조체: 이름 없는 필드

튜플 구조체는 튜플처럼 보이지만 이름이 있는 또 다른 형태의 구조체입니다. 튜플에 고유한 타입 이름을 부여하고 싶지만 개별 필드의 이름은 필요하지 않을 때 유용합니다.

예를 들어 Color(i32, i32, i32)는 세 정수를 하나로 묶는 이름 있는 튜플입니다.

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);
    println!("Tuple structs 'Color' and 'Point' defined.");
}

튜플 구조체 사용하기

튜플 구조체의 인스턴스를 만드는 방법은 일반 튜플을 만드는 방법과 비슷합니다. 내부 값에 접근하려면 0부터 시작하는 인덱스와 함께 점 표기법을 사용합니다.

struct Color(i32, i32, i32);
struct Point(i32, i32, i32);

fn main() {
    let black = Color(0, 0, 0);
    let origin = Point(0, 0, 0);

    println!("Black color: R={}, G={}, B={}", black.0, black.1, black.2);
    println!("Origin point: X={}, Y={}, Z={}", origin.0, origin.1, origin.2);
}

단위형 구조체: 표식

필드가 전혀 없는 구조체도 정의할 수 있습니다. 이러한 구조체는 단위 타입 ()과 비슷하게 동작하기 때문에 단위형 구조체라고 합니다.

데이터 자체는 중요하지 않고 특정 타입에 특정 트레이트를 구현했다는 것을 나타내는 표식이 필요할 때 자주 사용합니다.

struct AlwaysTrue;

fn main() {
    let subject = AlwaysTrue;
    // Unit-like structs don't store data directly,
    // but they can be instantiated and used as types.
    println!("Unit-like struct 'AlwaysTrue' created.");
}

구조체 업데이트 문법

기존 구조체를 바탕으로 새 구조체 인스턴스를 만들되 일부 필드 값만 변경하고 싶다면 Rust에서 편리한 구조체 업데이트 문법(..)을 제공합니다.

이 문법은 지정한 인스턴스에서 나머지 필드를 이동합니다. 따라서 원래 인스턴스에 Copy를 구현한 필드가 포함되어 있다면 원래 인스턴스를 더 이상 사용할 수 없습니다.

struct User {
    username: String,
    email: String,
    sign_in_count: u64,
    active: bool,
}

fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    let user2 = User {
        email: String::from("bob@example.com"),
        username: String::from("bob456"),
        ..user1 // Copy remaining fields from user1
    };

    println!("User 2 email: {}", user2.email);
    println!("User 2 active: {}", user2.active);
    // user1.username is now moved, so user1 can't be used here.
}

구조체 퀴즈

Rust 구조체에 대한 이해도를 확인해 보세요.

복습: 구조체 개요

Rust에서 구조체를 정의하고 사용하는 방법을 배웠습니다!

  • 일반 구조체는 이름 있는 필드를 묶어 사용자 정의 데이터 타입을 만듭니다.
  • 튜플 구조체는 이름 있는 튜플로, 필드 이름이 꼭 필요하지 않을 때 유용합니다.
  • 단위형 구조체는 필드가 없으며 표식 역할을 합니다.
  • 구조체 인스턴스를 mut으로 만들면 필드를 수정할 수 있습니다.
  • .. 문법을 사용하면 기존 인스턴스에서 새 인스턴스를 만들 수 있습니다.

구조체는 Rust 프로그램에서 관련 데이터를 정리하는 기본 요소이며, 코드를 더 체계적이고 읽기 쉽게 만들어 줍니다.

자주 묻는 질문

“구조체 정의와 사용” 강의는 무료인가요?

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

“구조체 정의와 사용”에서 뭘 배우나요?

튜플 구조체와 단위형 구조체를 포함한 사용자 정의 자료 구조를 만들고, 관련 데이터를 하나로 묶는 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“구조체 정의와 사용” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. 구조체 정의와 사용
  2. 사용자 정의 형식을 위한 열거형
  3. 강력한 패턴 매칭
← Learn Rust Coding(으)로 돌아가기