→Trait와 오버라이딩: 오버로딩이 아니라 오버라이딩 태그: 모바일 편집 모바일 웹 편집 |
태그: 모바일 편집 모바일 웹 편집 |
||
| 308번째 줄: | 308번째 줄: | ||
Trait는 부분적인 다형성을 구현한 Rust만 가지고 있는 객체 개념으로 일반적인 OOP(객체 지향 프로그래밍) 방식을 따르지 않고 구조체에 한정적인 다형성을 부여하기 위해 도입되었다. 즉 공통적인 메서드를 구조체마다 부여하는 역할을 한다. | Trait는 부분적인 다형성을 구현한 Rust만 가지고 있는 객체 개념으로 일반적인 OOP(객체 지향 프로그래밍) 방식을 따르지 않고 구조체에 한정적인 다형성을 부여하기 위해 도입되었다. 즉 공통적인 메서드를 구조체마다 부여하는 역할을 한다. | ||
Trait는 제네릭처럼 변수의 타입에 구애받지 않아 | Trait는 제네릭처럼 변수의 타입에 구애받지 않아 오버라이딩을 구현하는 또 다른 방법이 된다. 다만 가능한 데이터 타입에 대한 구현을 모두 메모리 한 곳에 직접 올리는 제네릭과 달리 Trait는 구조체에 함수 포인터를 간접적으로 가져오는 특성 때문에 성능 쪽에서 아주 작은 수준이라도 패널티가 있다. 보통 다음과 같이 트레이트를 정의하고 부여한다. | ||
<syntaxhighlight lang="rust"> | <syntaxhighlight lang="rust"> | ||
| 342번째 줄: | 342번째 줄: | ||
} | } | ||
fn notify<T: Account>(item: T) { // 제네릭 변수처럼 Account Trait가 적용된 구조체라면 전부 item으로 집어넣는 | fn notify<T: Account>(item: T) { // 제네릭 변수처럼 Account Trait가 적용된 구조체라면 전부 item으로 집어넣는 오버라이딩 된다. | ||
println!("Welcome {}", item.get_username()); | println!("Welcome {}", item.get_username()); | ||
} | } | ||