Rust impl trait, C# interface
C#과 같은 일반적인 프로그래밍 언어에서는 class, struct(구조체) 안에 property(속성)와 method(메서드)를 정의하여 활용할 수 있다.
rust는 구조체를 지원하지만 해당 구조체 안에 속성만을 기술할 수 있지 메서드는 정의할 수 없고 impl 키워드를 사용하여 외부에 정의한다.
impl 키워드와 더불어 사용할 수 있는 trait는 타입에 대해 공통된 동작을 표시한다. 약간의 차이는 있지만 다른 프로그래밍 언어(C#)에서 말하는 interface와 비슷한 개념이다.
아래의 소스는 C#에서의 interface 기능을 간략하게 살펴보고 이를 rust를 이용하여 구현하고 비교해 본 것이다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;
namespace ConsoleTest;
internal class Program
{
private static void Main()
{
Test1();
Console.WriteLine("------------------------------");
Test2();
/*
Truck can drive : 1111 : 1111
Truck can drive : 2222 : 1111
Truck can drive : 2222
Sedan can drive : 3333
Sedan can drive : 4444 : 1111
------------------------------
Truck can drive : 1111 : 1111
Truck can drive : 2222 : 2222
Truck can drive : 2222
Sedan can drive : 3333
Sedan can drive : 4444 : 2222
*/
}
콜백은 일반적으로 delegate를 통하여 구현하나 인터페이스를 사용하여 콜백을 구현할 수도 있다. 또한 모델 클래스를 만들 때 클래스에서 지원하지 않는 다중상속을 구현가능하게 해 준다. 아래는 전체 소스이다.