[rust] 제네릭 타입 검증
제네릭은 러스트에서 강력한 기능 중 하나로, 여러 종류의 타입을 다루는 함수나 구조체를 작성할 수 있게 해줍니다. 그러나 때로는 특정 조건을 만족하는 타입만을 허용하고 싶을 때가 있습니다.
이럴 때 러스트에서는 trait
와 where
절을 사용하여 제네릭 타입을 검증할 수 있습니다.
제네릭 타입 검증하기
제네릭으로 정의된 함수나 구조체에 특정 조건을 부여하려면, 해당 조건을 나타내는 trait
를 정의해야 합니다. 예를 들어, 숫자형 타입만을 받아들이는 함수를 작성하고 싶다면 trait
를 이용하여 숫자형 특성을 정의할 수 있습니다.
trait Numeric {
fn is_numeric(&self) -> bool;
}
impl Numeric for i32 {
fn is_numeric(&self) -> bool {
true
}
}
fn process_numeric<T: Numeric>(value: T) {
if value.is_numeric() {
// 처리 로직
} else {
panic!("숫자형 타입이 아닙니다.");
}
}
위 코드에서 Numeric
트레이트는 is_numeric
메서드를 가져야 하며, 해당 메서드는 true
를 반환하는지를 검사하는 역할을 합니다. 그리고 process_numeric
함수에서는 <T: Numeric>
를 이용하여 Numeric
트레이트를 구현한 타입에 대해서만 동작하도록 명시하였습니다.
where
절을 사용한 타입 제약
때로는 제네릭 타입을 검증하는 것이 복잡해질 수 있는데, 이때 where
절을 이용하여 타입 제약을 좀 더 명확하게 표현할 수 있습니다.
fn process_numeric<T>(value: T)
where
T: Numeric,
{
if value.is_numeric() {
// 처리 로직
} else {
panic!("숫자형 타입이 아닙니다.");
}
}
where
절을 사용함으로써 함수 선언 부분을 좀 더 읽기 쉽고 명확하게 만들 수 있습니다.
결론
러스트의 제네릭 타입은 trait
와 where
절을 이용하여 검증을 할 수 있어 매우 강력하고 유연한 기능을 제공합니다. 타입 검증은 안정성을 높이고 코드를 더 명확하게 만들어주므로, 실무에서 유용하게 활용될 수 있습니다.
이상으로 러스트에서의 제네릭 타입 검증에 대한 내용을 살펴보았습니다.
참고 자료: