0Pricing
Learn Rust Coding · 강의

Rust에서 제네릭 코드 작성하기

여러 형식에서 작동하는 함수와 자료 구조를 작성하여 형식 안전성을 유지하면서 코드 재사용성을 높이는 방법을 배웁니다.

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

제네릭 코드를 작성하는 이유

목록에서 가장 큰 항목을 찾는 함수가 필요하다고 가정해 보십시오. 숫자에 사용한 뒤 문자와 사용자 지정 객체에도 사용해야 한다면 어떻게 해야 할까요?

제네릭이 없다면 유형마다 별도의 함수를 작성해야 하므로 코드가 많이 중복됩니다. 이럴 때 제네릭을 사용합니다!

제네릭 소개

제네릭을 사용하면 같은 코드를 반복하지 않고 여러 유형에서 작동하는 코드를 작성할 수 있습니다. 제네릭은 유연하고 재사용 가능한 함수나 자료 구조를 작성하는 방법입니다.

서로 다른 재료에 맞게 조정할 수 있는 설계도라고 생각해 보십시오.

첫 번째 제네릭 함수

함수를 제네릭으로 만들려면 함수 이름 뒤의 꺾쇠괄호 <> 안에 유형 매개변수를 선언합니다. 일반적으로 사용하는 유형 매개변수 이름은 T(Type의 약자)입니다.

이제 print_anything 함수는 어떤 유형이든 출력할 수 있습니다!

fn print_anything<T>(item: T) {
    println!("The item is: {}", item);
}

pub fn main() {
    print_anything(5);
    print_anything("hello");
    print_anything(true);
}

유형 매개변수 설명

fn print_anything<T>(item: T)에서 <T>는 T가 유형을 대신 나타내는 자리 표시자라는 뜻입니다. i32와 함께 함수를 호출하면 T는 i32가 됩니다.

  • 유형 매개변수: 제네릭 유형은 보통 T, U, V처럼 대문자로 이름을 지정합니다.
  • 유연성: 컴파일러가 컴파일 시점에 구체적인 유형을 알아냅니다.

동작 추가하기: 트레이트 경계

때로는 제네릭 함수의 유형 매개변수 T에 특정 동작이 필요합니다. 예를 들어 두 T를 비교하려면 T를 비교할 수 있어야 합니다.

이러한 요구 사항을 지정하려면 트레이트 경계를 추가합니다. 여기서 T: PartialOrd + Copy는 T가 비교를 위한 부분 순서 지정 트레이트인 PartialOrd와 Copy 트레이트를 구현해야 한다는 뜻입니다.

fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];
    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }
    largest
}

pub fn main() {
    let number_list = vec![34, 50, 25, 100, 65];
    println!("Largest number: {}", largest(&number_list));

    let char_list = vec!['y', 'm', 'a', 'q'];
    println!("Largest char: {}", largest(&char_list));
}

여러 트레이트 경계 문법

T: TraitA + TraitB처럼 + 문법을 사용하면 제네릭 유형에 여러 트레이트를 요구할 수 있습니다.

복잡한 경계에는 함수 시그니처 뒤에 where 절을 사용할 수도 있습니다. 그러면 시그니처를 더 깔끔하게 작성할 수 있습니다.

fn some_function<T, U>(t: T, u: U) -> i32 where T: Display + Clone, U: Clone + Debug { /* ... */ }

제네릭 구조체

함수와 마찬가지로 하나 이상의 유형 매개변수를 사용하도록 구조체를 제네릭으로 정의할 수 있습니다. 이를 통해 자료 구조가 지정된 어떤 유형의 데이터든 저장할 수 있습니다.

Point<T> 구조체는 어떤 유형의 좌표든 저장할 수 있습니다(예: i32, f64).

struct Point<T> {
    x: T,
    y: T,
}

pub fn main() {
    let integer_point = Point {
        x: 5,
        y: 10
    };
    let float_point = Point {
        x: 1.0,
        y: 4.0
    };

    println!("Int Point: ({}, {})", 
             integer_point.x, integer_point.y);
    println!("Float Point: ({}, {})", 
             float_point.x, float_point.y);
}

제네릭 구조체에 메서드 구현하기

제네릭 구조체에 메서드를 구현할 때는 impl 뒤에 제네릭 유형 매개변수를 지정해야 합니다.

특정 메서드에 제네릭 유형의 특정 동작이 필요한 경우 해당 메서드에 트레이트 경계를 추가할 수도 있습니다.

struct Point<T> {
    x: T,
    y: T,
}

impl<T> Point<T> {
    fn x(&self) -> &T {
        &self.x
    }
}

pub fn main() {
    let p = Point {
        x: 5,
        y: 10
    };
    println!("p.x = {}", p.x());
}

제네릭과 성능

Rust의 강점 중 하나는 제네릭이 비용이 들지 않는 추상화라는 점입니다. 즉, 제네릭을 사용해도 실행 시간 성능 저하가 발생하지 않습니다.

Rust는 단형화를 통해 이를 구현합니다. 컴파일 시점에 컴파일러가 제네릭 코드가 사용되는 각 구체적 유형에 맞는 특수화된 버전을 생성합니다. 따라서 largest<i32>와 largest<char>는 서로 다른 최적화 함수가 됩니다.

지식 확인

Rust 제네릭에 관한 다음 설명 중 TRUE인 것은 무엇입니까?

복습: 제네릭의 힘

이번 학습에서는 Rust에서 제네릭 코드를 작성하는 기본 사항을 배웠습니다.

  • 제네릭이란: 유연하고 재사용 가능한 코드를 작성하는 방법입니다.
  • 제네릭 함수: 유형 매개변수에 <T>를 사용합니다.
  • 트레이트 경계: T: Trait으로 필요한 동작을 지정합니다.
  • 제네릭 구조체: 제네릭 유형을 저장하는 자료 구조를 만듭니다.
  • 비용 없음: Rust의 제네릭은 구체적인 코드로 컴파일되므로 실행 시간 성능 저하가 없습니다.

제네릭은 관용적인 Rust의 핵심 요소로, 강력하고 유형 안전한 추상화를 가능하게 합니다!

자주 묻는 질문

“Rust에서 제네릭 코드 작성하기” 강의는 무료인가요?

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

“Rust에서 제네릭 코드 작성하기”에서 뭘 배우나요?

여러 형식에서 작동하는 함수와 자료 구조를 작성하여 형식 안전성을 유지하면서 코드 재사용성을 높이는 방법을 배웁니다. 브라우저에서 직접 실행하는 실습 코드로 Learn Rust Coding을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

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

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

“Rust에서 제네릭 코드 작성하기” 강의는 얼마나 걸리나요?

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

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

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

이 강의의 모든 강의

  1. Rust에서 제네릭 코드 작성하기
  2. 트레이트 정의와 구현
  3. 고급 트레이트 사용법: 연관 형식
← Learn Rust Coding(으)로 돌아가기