C#의 인터페이스에서 속성 구현

Bilal Shahid 2023년10월12일
  1. 단순 코드 블록을 사용하여 인터페이스에서 속성 설정
  2. C#에서 인터페이스의 속성 수정
  3. 추상 클래스에서 다중 인터페이스 상속으로 속성 구현
  4. 결론
C#의 인터페이스에서 속성 구현

오늘은 C#에서 인터페이스의 속성을 구현하는 방법을 배울 것입니다.

C#의 인터페이스는 속성 가용성을 선언하는 방법을 지정하는 액세스 한정자와 함께 다양한 속성을 가질 수 있습니다. 인터페이스는 종종 다른 멤버와 객체의 기본 구현으로 작동합니다.

인터페이스에서 속성을 구현할 수 있는 다양한 방법을 시작하고 살펴보겠습니다.

단순 코드 블록을 사용하여 인터페이스에서 속성 설정

TORQUE 속성을 사용하여 ENGINE이라는 C# 인터페이스를 생성한다고 가정해 보겠습니다. 인터페이스 ENGINE을 다음과 같이 설정합니다.

public interface ENGINE {
  int torque { get; set; }
}

따라서 TORQUE라는 속성에 대해 적절한 getter 및 setter가 있는 인터페이스를 만들었습니다. 인터페이스를 사용하려면 이 인터페이스를 구현할 수 있는 클래스를 정의해야 합니다.

ENGINE을 포함하는 CAR 클래스를 정의한다고 가정해 보겠습니다. 따라서 다음과 같이 작성할 수 있습니다.

class CAR : ENGINE {
  public int torque { get; set; }
}

CAR 클래스에는 이 클래스에서 객체를 생성할 때 공개적으로 사용할 TORQUE 구현이 포함되어 있습니다. CAR 객체를 사용하려면 다음과 같이 호출하면 됩니다.

CAR x = new CAR();
x.torque = 989;
Console.WriteLine(x.torque);

따라서 다른 속성을 사용하고 나중에 사용할 인터페이스에 포함할 수 있습니다. 이것은 더 나은 추상화 계층을 제공하고 기본 메서드나 클래스를 변경하지 않고도 수정할 수 있습니다.

따라서 LABEL이라는 새 속성을 ENGINE에 추가하려면 CAR 클래스에서 사용할 수 있는 ENGINE 인터페이스에서 설정할 수 있습니다.

전체 코드는 다음과 같습니다.

using System;

namespace CA_ONE {
  class Program {
    public interface ENGINE {
      int torque { get; set; }
    }

    class CAR : ENGINE {
      public int torque { get; set; }
    }

    static void Main(string[] args) {
      CAR x = new CAR();
      x.torque = 989;
      Console.WriteLine(x.torque);
    }
  }
}

프로젝트 이름을 CA_ONE으로 지정했습니다. 따라서 네임스페이스는 이를 확장하고 구현합니다. 여기서 주목해야 할 또 한 가지는 CAR에서 TORQUE의 구현은 PRINT 방법 또는 토크 변환 등과 같은 기능 내부에 다른 정의를 가질 수 있다는 것입니다.

C#에서 인터페이스의 속성 수정

위에 제공된 솔루션에서 구현 내에서 다른 메서드를 정의하는 방법을 언급했습니다. 인터페이스 ENGINE에서 기본값으로 정의된 GETSET 메소드를 확장한다고 가정해 보겠습니다.

ENGINE은 그대로 두지만 이를 확장하는 CAR 클래스 내부의 코드를 수정하는 경향이 있습니다.

CAR에서 TORQUE를 설정할 때 TORQUE 속성이 올바르게 설정되었는지 여부를 사용자가 알 수 있도록 "Torque is Set to _value_"도 인쇄할 수 있습니다.

따라서 다음과 같이 진행할 수 있습니다.

class CAR : ENGINE {
  private int torque_priv;
  public int torque {
    get { return this.torque_priv; }
    set {
      this.torque_priv = value;
      Console.WriteLine("This torque has been set to " + torque_priv);
    }
  }
}

이제 여기에서 코드에서 일어나는 일에 집중해 보겠습니다. 우리가 가장 먼저 알아차린 것은 TORQUE_PRIV라는 다른 변수의 사용입니다.

다음 코드에 전달된 TORQUE 값을 저장해야 하기 때문에 인스턴스화했습니다.

x.torque = 989;

이 대신 TORQUE_PRIV 변수를 사용하지 않으면 코드가 루프에 빠져 TORQUE 속성에 값을 할당하기 위해 재귀적으로 이동합니다. 또한 여기에서 VALUE라는 것을 사용했습니다.

VALUE는 변수가 아니라 C# 내부의 컨텍스트 키워드입니다. VALUE는 속성 및 액세스 선언의 집합 인덱서에서 사용됩니다.

클라이언트가 할당한 값을 가져와서 클래스의 private 변수에 할당합니다. 이러한 방식으로 선언을 수정하고 사용할 수 있습니다.

많은 사람들이 추상 CAR에 대한 TORQUE의 setter에서 다음 코드를 사용합니다.

this.torque_priv = torque;

그리고 GETTER의 경우:

return torque;

재귀 루프에 빠지기 때문에 다음과 같은 오류가 표시됩니다.

Stack overflow.

인터페이스에서 속성을 구현하기 위한 일반 구문은 다음과 같습니다.

type name { get; set; }

여러 클래스가 인터페이스를 상속하고 사용할 수 있으므로 추상 클래스의 속성을 확장하고 수정하는 것이 좋습니다. 인터페이스는 다양한 방법을 구현할 때 백본 구조 역할을 할 수 있으며 확장할 항목과 확장하지 말아야 할 항목에 대한 기본 아이디어를 제공할 수 있습니다.

인터페이스는 직접 사용할 수 없음을 기억하십시오. 코드를 실행하는 동안 추상 클래스를 초기화하고 사용해야 합니다.

인터페이스의 메서드는 항상 공용이며 암시적 액세스 수정자가 필요하지 않습니다. 또한 인터페이스는 다른 인터페이스에서 상속할 수 있습니다.

인터페이스에서 속성을 구현하려고 하고 다른 인터페이스가 이전에 정의된 인터페이스를 상속하는 경우 클래스를 사용하여 후자의 인터페이스를 확장할 수 있습니다.

BOLTS를 상속한 다음 CAR 클래스에 의해 상속되는 ENGINE 인터페이스가 있다고 가정해 보겠습니다. 각 CAR의 볼트 치수에 따른 렌치 크기의 비상 키트를 설치하려고 합니다.

따라서 다음과 같이 구현을 사용할 수 있습니다.

public interface BOLT {
  int size { get; set; }
}

public interface ENGINE : BOLT {
  int torque { get; set; }

그런 다음 CAR 클래스에서 BOLT를 다음과 같이 확장합니다.

public int size {
  get { return wrench_size; }
  set {
    // set the wrench size
    wrench_size = value;
    Console.WriteLine("The wrench size to use should be: " + wrench_size);
  }
}

따라서 인터페이스가 상속되는 것을 볼 수 있습니다. 기본 인터페이스에서 속성을 설정하는 경우 기본 인터페이스 또는 파생 인터페이스를 확장하는 모든 클래스에서 해당 속성을 구현해야 합니다.

따라서 정의를 확장할 필요가 있습니다.

추상 클래스에서 다중 인터페이스 상속으로 속성 구현

ENGINEWHEEL이라는 두 개의 인터페이스가 있다고 가정해 보겠습니다. 그리고 둘 다 ENGINE 또는 WHEEL이 시작되었는지 여부를 알려주는 시작 방법을 포함합니다.

시작 방법을 정의합시다.

public interface WHEEL {
  void print();
}

public interface ENGINE : BOLT {
  int torque { get; set; }
  void print();
}

CAR 클래스에서 확장하려면 다음과 같이 몇 가지 기능을 작성해야 합니다.

void WHEEL.print() {
  Console.WriteLine("Wheel has been started");
}
void ENGINE.print() {
  Console.WriteLine("Engine has been started!");
}

그리고 그들을 부르려면 메인에 다음과 같이 작성하십시오.

((WHEEL)x).print();

이것은 print() 메소드를 사용할 인터페이스를 지정하는 것입니다.

이 튜토리얼에서 사용된 전체 코드에 액세스하려면 여기를 클릭하세요.

결론

인터페이스에서 속성을 사용하는 방법은 여기까지입니다. 속성을 설정하고 사용해야 하는 다른 상황이 있을 수 있습니다. 따라서 위에서 설명한 모든 경우를 연구하는 것이 좋습니다.

작가: 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