DevSight

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를 통하여 구현하나 인터페이스를 사용하여 콜백을 구현할 수도 있다. 또한 모델 클래스를 만들 때 클래스에서 지원하지 않는 다중상속을 구현가능하게 해 준다. 아래는 전체 소스이다.

Read More ···