C#의 인터페이스 대 추상 클래스

Bilal Shahid 2024년2월15일
C#의 인터페이스 대 추상 클래스

클래스는 C#에서 다른 지정자를 가집니다. 오늘 우리는 두 가지 클래스에 대해 이야기할 것입니다. 인터페이스 및 추상 클래스.

C#의 추상 클래스와 인터페이스 클래스의 차이점

인터페이스는 무언가가 작동하는 방식을 정의하는 것입니다. 물건에 대한 가이드라인이나 기본 설정을 제공하고 객체 간의 통신이 필요합니다.

인터페이스는 메소드만 구현하거나 어떤 기능을 만들거나 필요한지 알려줍니다. 기본 설정만 제공합니다. 나머지는 필요에 따라 이러한 기능을 구현하고 확장하기 위해 이를 상속하는 클래스에 있습니다.

따라서 CAR 클래스와 BIKE 클래스가 있는 경우 두 클래스 (CAR 및 BIKE)에 대한 공통 기능을 포함할 수 있는 VEHICLE 인터페이스를 상속할 수 있습니다. get_engine_vid(), set_color() 등. 여기서 VEHICLE은 인터페이스 역할을 합니다.

인터페이스가 클래스 내에서 표준 정의 프로토콜을 유지하는 데 어떻게 도움이 되는지 확인합니다. 인터페이스 내부에 선언된 모든 메서드는 확장되어야 합니다.

예제 코드:

interface VEHICLE {
  int get_engine();
  void set_engine_id();
}

class BIKE : VEHICLE {
  private : int engine_id;
  BIKE() {}
}

class CAR : VEHICLE {
  private : int engine_id;
  CAR() {}
}

이 코드는 오류를 표시합니다.

코드 오류

이를 수정하기 위해 다음 코드에서 상속된 각 클래스의 메서드를 구현합니다.

고정 코드:

interface VEHICLE {
  public int get_engine();
  public void set_engine_id(int id);
}

class BIKE : VEHICLE {
  private int engine_id;
  BIKE() {}
  public

      int get_engine() {
    return engine_id;
  }

  public void set_engine_id(int id) {
    engine_id = id;
  }
}

class CAR : VEHICLE {
  private int engine_id;
  CAR() {}

  public

      int get_engine() {
    return engine_id;
  }

  public void set_engine_id(int id) {
    engine_id = id;
  }
}

이제 인터페이스에 대해 명확해졌으므로 C#의 추상 클래스를 살펴보겠습니다.

예제 코드:

abstract class VEHICLE {
  public abstract int get_engine();
  public abstract void set_engine_id(int id);
}

class BIKE : VEHICLE {
  private int engine_id;
  public BIKE() {}
  public

      override int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

class CAR : VEHICLE {
  private int engine_id;
  public CAR() {}

  public

      override int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

static void Main() {
  CAR n = new CAR();
  n.set_engine_id(2);
  Console.WriteLine("The engine id is: " + n.get_engine());
}

추상 클래스에서 선언된 함수를 확장하기 위해 여기에서 재정의가 어떻게 설정되는지 확인할 수 있습니다. 차이점은 무엇입니까?

추상 클래스는 동일한 기본 구조를 가진 여러 클래스에 사용되지만 인터페이스는 구현 가능한 메서드를 정의하는 데 사용될 수 있습니다. 그러한 구조를 상속하거나 상속하지 않을 수 있는 여러 클래스에 사용하는 것은 불필요합니다.

추상 클래스는 메서드의 기본 구현을 정의할 수도 있습니다. 그러나 인터페이스의 경우에는 그렇지 않습니다.

완벽하게 작동하려면 재정의를 제거해야 합니다.

고정 코드:

abstract class VEHICLE {
  public int get_engine() {
    Console.Write("I am here");
    return -1;
  }
  public abstract void set_engine_id(int id);
}

// and then in the classes:
// code c#
class BIKE : VEHICLE {
  private int engine_id;
  public BIKE() {}
  public

      int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

class CAR : VEHICLE {
  private int engine_id;
  public CAR() {}

  public

      int get_engine() {
    return engine_id;
  }

  public override void set_engine_id(int id) {
    engine_id = id;
  }
}

이것이 추상 클래스와 인터페이스의 전부입니다. 차이점을 이해하고 원하는 대로 효율적으로 사용할 수 있기를 바랍니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub

관련 문장 - Csharp Class