rust trait bound

wangki·2025년 2월 26일
0

Rust

목록 보기
23/54

개요

trait을 선언 시 trait bound를 설정할 수 있는 문법을 보고 정리하고자 작성한다.

내용

trait MyTrait {
    fn test_func(&self);
}

struct MyTest {}

impl MyTrait for MyTest {
    fn test_func(&self) {
        println!("안녕하세요");
    }
}

fn main() {
    let my_test = MyTest{};
    my_test.test_func();
}

위 코드는 일반적인 trait을 구현한 구조체 예시이다.
trait를 선언 시 해당 트레이트를 구현할 타입에 대해 조건을 걸 수 있다. 아래 코드를 보자.

trait MyTrait: Clone {
    fn test_func(&self);
}

struct MyTest {}

impl MyTrait for MyTest {
    fn test_func(&self) {
        println!("안녕하세요");
    }
}

위 코드를 컴파일 시 에러가 발생한다.

the trait bound MyTest: Clone is not satisfied
the trait Clone is not implemented for `MyTest

Clone trait를 MyTest가 구현하지 않았다는 것이다. 즉, Clone을 구현한 타입에 대해서만 MyTrait 트레이트를 구현할 수 있다는 의미이다.

trait MyTrait: Clone {
    fn test_func(&self);
}

#[derive(Clone)]
struct MyTest {}

impl MyTrait for MyTest {
    fn test_func(&self) {
        println!("안녕하세요");
    }
}

위와 같이 코드를 수정하면 문제없이 컴파일이 된다.

결론

트레잇 바운드를 적절히 활용하면, 코드의 가독성뿐만 아니라 컴파일 타임에서의 타입 체크로 인해 실수나 버그를 줄일 수 있다.
이를 활용해 깔끔하고 안전한 코드를 작성할 수 있다. rust가 강력한 타입 시스템을 가진다는 것을 다시 한번 깨달았다.

0개의 댓글