인터페이스 대신 대리자를 사용해야 하는 경우(C# 프로그래밍 가이드)

클래스 디자이너는 대리자와 인터페이스 둘 모두를 통해 형식의 선언과 구현을 분리할 수 있습니다. 특정 인터페이스는 모든 클래스구조체에서 상속하고 구현할 수 있습니다. 대리자는 메서드 시그니처가 대리자의 메서드 시그니처와 일치하는 모든 클래스의 메서드에 대해 생성될 수 있습니다. 인터페이스나 대리자 메서드를 구현하는 클래스에 대한 정보가 전혀 없는 개체에서 인터페이스 참조나 대리자를 사용할 수 있습니다. 대리자와 인터페이스는 이와 같은 점에서 유사하기 때문에 대리자와 인터페이스 중 어느 쪽을 사용할지 결정할 때는 다음과 같은 지침을 따라야 합니다.

다음과 같은 경우에 대리자를 사용합니다.

  • 이벤트 디자인 패턴을 사용하는 경우

  • 정적 메서드를 캡슐화해야 하는 경우

  • 메서드를 구현하는 개체에 대한 다른 속성, 메서드 또는 인터페이스에 호출자가 액세스할 필요가 없는 경우

  • 쉽게 작성하려는 경우

  • 메서드에 대한 여러 구현이 클래스에 필요한 경우

다음과 같은 경우에 인터페이스를 사용합니다.

  • 호출할 수 있는 관련 메서드의 그룹이 있는 경우

  • 클래스에 메서드의 구현이 하나만 필요한 경우

  • 인터페이스를 사용하는 클래스에서 이 인터페이스를 다른 인터페이스나 클래스 형식에 캐스팅하려는 경우

  • 비교 메서드의 경우와 같이 구현하려는 메서드가 클래스의 형식이나 동일성 여부와 관련되어 있는 경우

대리자 대신 단일 메서드 인터페이스를 사용하는 예로는 IComparable 또는 제네릭 버전인 IComparable<T>을 들 수 있습니다. IComparable은 형식이 동일한 두 개체 사이의 보다 작음, 같음 또는 보다 큼 관계를 지정하는 정수를 반환하는 CompareTo 메서드를 선언합니다. IComparable을 정렬 알고리즘의 기준으로 사용할 수 있습니다. 대리자 비교 메서드를 정렬 알고리즘의 기준으로 사용할 수도 있지만 이 방법은 사용하지 않는 것이 좋습니다. 비교 기능은 클래스에 속한 것이고 비교 알고리즘은 런타임에 변경되지 않으므로 단일 메서드 인터페이스를 사용하는 것이 좋습니다.

참고 항목

참조

이벤트(C# 프로그래밍 가이드)

메서드(C# 프로그래밍 가이드)

인터페이스(C# 프로그래밍 가이드)

개념

C# 프로그래밍 가이드