기본 인터페이스 구현 살펴보기

완료됨

기본 인터페이스 구현을 사용하면 인터페이스에 직접 새 메서드를 추가하고 기본 구현을 제공할 수 있습니다. 이 인터페이스를 사용하는 클래스는 기본 메서드를 사용하거나 재정의하고 자체 구현을 제공할 수 있습니다.

기본 구현

인터페이스의 기본 구현을 사용하면 문제를 일으키지 않고 인터페이스에 새 메서드를 추가할 수 있습니다.

  • 인터페이스는 기본 구현을 사용하여 메서드에 대한 본문을 제공할 수 있습니다.
  • 인터페이스를 사용하는 클래스는 이러한 메서드의 고유한 버전을 작성할 필요가 없습니다.
  • 이 기능은 아무 것도 중단하지 않고 인터페이스를 변경하려는 경우에 도움이 됩니다.

비고

기본 구현이 있더라도 클래스는 인터페이스의 메서드를 자동으로 얻지 못합니다. 인터페이스에서 메서드를 사용하려면 변수가 인터페이스 형식이어야 합니다.

혜택

인터페이스의 기본 구현에는 다음과 같은 몇 가지 이점이 있습니다.

  • 코드 재사용: 코드를 복사하지 않고도 여러 구현에서 공통 함수를 공유할 수 있습니다.
  • 이전 버전과의 호환성: 인터페이스를 사용하면 모든 클래스를 변경하지 않고도 인터페이스에 새로운 메서드를 추가할 수 있어 호환성이 손상되는 변경을 방지할 수 있습니다.
  • 유연성: 인터페이스를 사용하는 클래스는 다른 동작이 필요한 경우 기본 구현을 변경할 수 있습니다.

예를 들어 고객 관리 시스템을 사용하고 있으며 기존 인터페이스에서 로열티 할인을 적용하는 새 방법을 추가한다고 가정해 보겠습니다. 기본 메서드는 기본 할인을 계산합니다. 그러나 "VIP 고객" 클래스에 다른 계산이 필요한 경우 이 메서드를 수정할 수 있습니다.

기본 구현 정의

인터페이스에서 기본 구현을 정의하는 구문은 메서드 본문을 포함하도록 인터페이스 선언을 확장합니다. 다음 예제에서는 고객 관리 시스템 시나리오를 기반으로 인터페이스의 기본 구현을 정의합니다.

interface ICustomer
{
    int CustomerId { get; set; } // No default implementation

    void ApplyLoyaltyDiscount() 
    { 
        // default implementation
        Console.WriteLine("Applying 10% loyalty discount."); 
    }
}

이 예제에서 ApplyLoyaltyDiscount 메서드는 인터페이스 내에서 기본 구현을 가지고 있습니다 ICustomer . 이 CustomerId 속성은 인터페이스에도 정의되어 있지만 기본 구현은 없습니다.

비고

C# 8.0부터 인터페이스에는 기본 메서드 구현이 포함될 수 있습니다. 이 변경으로 기존 코드를 중단하지 않고 인터페이스에 새 메서드를 추가할 수 있습니다. 클래스는 이러한 기본값을 사용하거나 자체 구현을 제공할 수 있습니다.

다음으로, 다른 할인 계산이 필요한 "VIPCustomer" 클래스를 구현합니다. 이 클래스는 ICustomer 인터페이스를 구현하고, CustomerId 속성에 대한 고유한 구현을 제공하며, 다음과 같이 ApplyLoyaltyDiscount 메서드를 재정의할 수 있습니다.

class VIPCustomer : ICustomer
{
    public int CustomerId { get; set; } // Implementing property from interface

    void ICustomer.ApplyLoyaltyDiscount()
    {
        // override default implementation for VIP customers
        Console.WriteLine($"Applying 20% loyalty discount for VIP customer with ID {CustomerId}.");
    }
}

이 경우 클래스는 VIPCustomer 기본 10%대신 20% 할인을 적용합니다. CustomerId 할인을 적용할 때 메시지에 사용됩니다.

인터페이스의 기본 구현을 사용하면 인터페이스에 제공된 메서드 구현을 사용하여 새 메서드를 더할 수 있습니다. 기본 구현은 코드 재사용, 이전 버전과의 호환성 및 유연성을 높입니다. 기존 코드를 방해하지 않고 적응성을 향상시키는 C# Object-Oriented 프로그래밍의 실용적인 도구입니다.