C# 인터페이스 여러 개 구현하기: 충돌과 명시적 구현 기준

C# 클래스는 기반 클래스는 하나만 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있습니다. 여러 계약의 멤버 이름이 겹칠 때는 하나의 공개 멤버로 함께 만족시킬지, 명시적 인터페이스 구현으로 동작을 분리할지 결정해야 해요.

C# 클래스가 여러 인터페이스를 구현하는 기존 코드 예제
기존 예제는 콜론 뒤에 인터페이스를 쉼표로 나열하는 문법을 보여줍니다. 클래스 상속과 인터페이스 구현의 차이를 함께 확인하세요.
C# 클래스가 여러 인터페이스를 구현하는 기존 코드 예제
기존 예제는 콜론 뒤에 인터페이스를 쉼표로 나열하는 문법을 보여줍니다. 클래스 상속과 인터페이스 구현의 차이를 함께 확인하세요.
먼저 확인할 답
C# 클래스는 기반 클래스는 하나만 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있습니다. 여러 계약의 멤버 이름이 겹칠 때는 하나의 공개 멤버로 함께 만족시킬지, 명시적 인터페이스 구현으로 동작을 분리할지 결정해야 해요.

상속 목록에서 클래스는 먼저, 인터페이스는 뒤에 둔다

class Printer : Device, IPrintable, IScannable처럼 기반 클래스가 있다면 먼저 적고 인터페이스를 이어 씁니다. 인터페이스는 “무엇을 할 수 있는가”라는 계약이고, 구현 클래스는 요구된 멤버를 실제 코드로 제공해야 해요. 구현이 빠지면 컴파일 오류로 드러납니다.

인터페이스를 많이 붙였다고 좋은 설계는 아닙니다. 서로 관계없는 책임이 한 클래스에 몰리면 수정 이유도 많아져요. 호출자가 정말 필요로 하는 작은 계약으로 나누고, 객체를 주입할 때 구체 클래스보다 해당 인터페이스 형식을 받는 것이 테스트와 교체에 유리합니다.

같은 시그니처라면 한 멤버가 두 계약을 만족할 수 있다

두 인터페이스가 모두 void Start()를 요구하고 의미도 같다면 클래스의 public Start 하나로 둘 다 구현할 수 있습니다. 반대로 이름은 같지만 의미가 다르면 한 구현으로 합치는 순간 호출자가 기대한 동작이 흐려져요. 이때 IFirst.Start와 ISecond.Start를 따로 구현합니다.

명시적으로 구현한 멤버는 클래스 인스턴스에서 직접 보이지 않고 해당 인터페이스로 변환했을 때 호출됩니다. API 표면을 좁히고 충돌을 분리하는 장점이 있지만, 사용자가 형식 변환을 알아야 하므로 이유가 분명할 때만 사용하세요.

기본 인터페이스 멤버가 있어도 계약 검토는 필요하다

현대 C# 인터페이스는 기본 구현을 포함할 수 있지만 모든 런타임과 프로젝트 설정에서 같은 방식으로 사용할 수 있는 것은 아닙니다. 오래된 Unity나 .NET Framework 프로젝트라면 언어 버전과 런타임 지원을 확인해야 해요.

테스트에서는 각 인터페이스 참조로 같은 객체를 호출해 결과를 비교하세요. 구현 클래스의 공개 메서드만 시험하면 명시적 구현이나 인터페이스별 동작을 놓칠 수 있습니다.

interface IPrintable { void Run(); }
interface IScannable { void Run(); }

class Device : IPrintable, IScannable
{
    void IPrintable.Run() => Console.WriteLine("print");
    void IScannable.Run() => Console.WriteLine("scan");
}

적용 전에 확인할 체크리스트

기존 화면은 작성 당시의 기록으로 보존했습니다. 현재 작업에서는 제품·서비스·언어 버전과 공식 문서의 적용 대상을 먼저 맞추세요. 설정이나 코드를 한 번에 크게 바꾸지 말고, 변경 전 상태를 기록한 뒤 작은 예제로 결과를 확인하는 편이 안전합니다.

문제가 생기면 같은 조작을 반복하기보다 정확한 오류 문구, 사용 버전, 재현 단계, 기대한 결과와 실제 결과를 적어 두세요. 공개된 캡처에는 계정 주소, 비밀 키, 일련번호처럼 악용될 수 있는 정보가 없는지도 확인합니다.

자주 묻는 질문

기존 게시일과 URL은 바뀌나요?

아니요. 기존 글을 같은 URL에서 보완했으므로 과거 기록과 연결은 유지됩니다.

예전 화면과 현재 화면이 다르면 무엇을 따라야 하나요?

이미지는 당시 맥락을 이해하는 참고 자료로 보고, 실제 조작은 현재 버전의 공식 문서와 화면 문구를 기준으로 하세요.

한 번 확인한 뒤 계속 같은 방법을 써도 되나요?

버전과 정책이 바뀔 수 있습니다. 업데이트 뒤에는 핵심 동작과 보안 조건을 다시 확인해야 합니다.

공식 자료

이 글은 기존 게시물의 URL과 이미지 기록을 유지하면서, 현재 독자가 잘못 적용하기 쉬운 부분을 공식 자료에 맞춰 다시 정리했습니다.

댓글

이 블로그의 인기 게시물

Iptime Extender2 설치,설정하기

WAN Port를 사용한 네트워크 구성시 유의사항

ipTIME 공유기 LED 끄기: 관리도구에서 모델별 메뉴 찾는 법