Visual Basic에서 인터페이스는 Interface 키워드를 사용하여 선언됩니다. 인터페이스는 이를 구현하는 클래스에서 구현해야 하는 메서드 집합을 정의합니다.
특징:
코드 예:
Interface ILogger Sub Log(message As String) End Interface Interface IErrorNotifier Sub NotifyError(errorMsg As String) End Interface Public Class FileLogger Implements ILogger, IErrorNotifier Public Sub Log(message As String) Implements ILogger.Log ' 로깅 구현 End Sub Public Sub NotifyError(errorMsg As String) Implements IErrorNotifier.NotifyError ' 오류 알림 구현 End Sub End Class
같은 이름의 메서드가 있지만 다른 시그니처를 가진 두 인터페이스를 구현할 수 있습니까? 그런 클래스가 컴파일될까요?
답변: 예, 두 가지 인터페이스를 구현할 수 있습니다. 시그니처가 일치하지 않을 경우, 컴파일러는 각 메서드의 명시적 구현을 요구하며, 그렇지 않으면 모호함이 발생합니다. 구현 시 인터페이스의 전체 이름을 사용하십시오:
Public Class Example Implements IFirst, ISecond Public Sub DoWork() Implements IFirst.DoWork ' IFirst에 대한 구현 End Sub Public Sub DoWork(value As Integer) Implements ISecond.DoWork ' ISecond에 대한 구현 End Sub End Class
이야기
인터페이스의 불완전한 구현으로 인한 기능 손실: 개발자가 선언된 인터페이스의 모든 요소를 구현하지 않아, 클래스가 완전한 계약으로 예상되는 컬렉션에 추가될 때 암묵적으로 오류가 발생하여 런타임 중단으로 이어졌습니다.
이야기
여러 인터페이스 구현 시 메서드 충돌: 프로젝트에서 동일한 메서드를 가지는 인터페이스를 구현해야 했습니다. 명시적 구현이 없어서 메서드가 서로 "덮어써졌고", 수신자는 한 버전만 받게 되어 논리가 올바르게 동작하지 않았습니다.
이야기
책임 분리 원칙 위반: 대형 프로젝트에서 코드 복사로 인해 너무 많은 인터페이스가 하나의 클래스에 의해 구현되었습니다. 그 결과 계약 구현을 추적하고 인터페이스 간의 호환성을 유지하기가 어려웠습니다.