[Rust] 20. 트레잇 & 트레잇 바운드
프로그래밍 언어/Rust2023. 3. 5. 15:01
트레잇(Trait)
다른 프로그래밍 언어의 인터페이스 또는 추상화 클래스와 유사하다.
러스트에는 상속의 개념이 존재하지 않기 때문에 트레잇을 통해 다양한 타입들이 동일한 기능을 수행할 수 있도록 해주며, 코드 재사용과 추상화를 가능하게 해준다.
트레잇 생성
구현은 뺴고 선언만 하였다, (구현도 가능함)
trait 자동차
{
fn show(&self);
}
트레잇을 구현하는 구현부를 살펴보자
struct 트럭;
impl 자동차 for 트럭
{
fn show(&self) { println!("픽업 트럭"); }
}
트레잇에서 선언된 함수를 구현하였다. 자바의 인터페이스 구현과 비슷하다.
다음과 같이 사용 가능하다.
fn main()
{
let truck = 트럭;
truck.show();
}
// 실행 결과
픽업 트럭
트레잇 바운드(Trait Bound)
트레잇을 제너릭 타입으로 구현 가능하도록 한다.
fn 트레잇바운드<T: 트럭>(car: T)
{
println!("트레잇 바운드 구현");
}
위 트레잇 코드 예제를 트레잇 바운드 제너릭 타입으로 구현해보도록 한다.
trait 자동차
{
fn show(&self) -> String;
}
struct 트럭
{
pub 타입: String,
}
impl 자동차 for 트럭
{
fn show(&self) -> String { format!("종류 : {}", self.타입) }
}
fn 트레잇바운드<T: 자동차>(car: T)
{
println!("[trait bound] {}", car.show());
}
fn main()
{
let truck = 트럭 { 타입:String::from("픽업트럭") };
트레잇바운드(truck);
}
// 실행 결과
[trait bound] 종류 : 픽업트럭
'프로그래밍 언어 > Rust' 카테고리의 다른 글
[Rust] 22. 커멘드라인 아규먼트 (0) | 2023.03.09 |
---|---|
[Rust] 21. 테스트 코드 (0) | 2023.03.06 |
[Rust] 19. 제너릭(Generic) (0) | 2023.03.02 |
[Rust] 18. Result<T, E> (복구 가능한 에러 처리) (0) | 2023.02.28 |
[Rust] 17. Panic! (복구 불가능한 에러 처리) (0) | 2023.02.25 |