HOWTO · Csharp

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

이 문서에서는 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에서 기본값으로 정의된 GET 및 SET 메소드를 확장한다고 가정해 보겠습니다.

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);
  }
}

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

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

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

ENGINE과 WHEEL이라는 두 개의 인터페이스가 있다고 가정해 보겠습니다. 그리고 둘 다 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() 메소드를 사용할 인터페이스를 지정하는 것입니다.

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

결론

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