[rust] 제네릭 타입 컴파일 타임 제약
Rust 언어에서 제네릭 타입을 사용하면 코드의 유연성을 높일 수 있습니다. 그러나 때로는 특정 범주의 제네릭 타입을 제한하고 싶을 때도 있습니다. 이때 제네릭 타입에 대한 제약을 컴파일 타임에 적용할 수 있습니다.
제네릭 타입 제약
Rust에서는 제네릭 타입에 대한 제약을 where
절을 사용하여 명시할 수 있습니다. 예를 들어, 특정 타입이 특정 트레이트를 구현한 경우에만 제네릭 함수를 호출하도록 제약할 수 있습니다.
fn process<T>(item: T) where T: SomeTrait {
// T가 SomeTrait를 구현한 경우에만 실행 가능한 코드
}
이렇게 함으로써 process
함수를 호출할 때 특정 조건을 만족하지 않는 타입이 전달되는 것을 방지할 수 있습니다.
예제
다음은 process
함수를 정의하고 호출하는 간단한 예제입니다.
trait Printable {
fn print(&self);
}
struct Data {
value: i32
}
impl Printable for Data {
fn print(&self) {
println!("Value: {}", self.value);
}
}
fn process<T: Printable>(item: T) {
item.print();
}
fn main() {
let data = Data { value: 42 };
process(data); // Data 구조체는 Printable 트레이트를 구현했으므로 호출 가능
}
위 예제에서 process
함수에 제네릭 타입에 대한 Printable
트레이트 제약을 추가하여, 해당 트레이트를 구현한 타입에 대해서만 함수를 호출할 수 있도록 제약하고 있습니다.
결론
Rust에서 제네릭 타입에 대한 제약을 추가하는 것은 코드의 안정성과 가독성을 높일 수 있는 중요한 기능입니다. where
절을 이용하여 제네릭 타입에 대한 제약을 명확히 표현하는 것은 Rust 코드의 품질을 향상시킬 수 있는 방법 중 하나입니다.