라벨이 객체지향인 게시물 표시

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

이미지
C# 클래스는 기반 클래스는 하나만 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있습니다. 여러 계약의 멤버 이름이 겹칠 때는 하나의 공개 멤버로 함께 만족시킬지, 명시적 인터페이스 구현으로 동작을 분리할지 결정해야 해요. 기존 예제는 콜론 뒤에 인터페이스를 쉼표로 나열하는 문법을 보여줍니다. 클래스 상속과 인터페이스 구현의 차이를 함께 확인하세요. 기존 예제는 콜론 뒤에 인터페이스를 쉼표로 나열하는 문법을 보여줍니다. 클래스 상속과 인터페이스 구현의 차이를 함께 확인하세요. 먼저 확인할 답 C# 클래스는 기반 클래스는 하나만 상속할 수 있지만 인터페이스는 여러 개 구현할 수 있습니다. 여러 계약의 멤버 이름이 겹칠 때는 하나의 공개 멤버로 함께 만족시킬지, 명시적 인터페이스 구현으로 동작을 분리할지 결정해야 해요. 상속 목록에서 클래스는 먼저, 인터페이스는 뒤에 둔다 class Printer : Device, IPrintable, IScannable처럼 기반 클래스가 있다면 먼저 적고 인터페이스를 이어 씁니다. 인터페이스는 “무엇을 할 수 있는가”라는 계약이고, 구현 클래스는 요구된 멤버를 실제 코드로 제공해야 해요. 구현이 빠지면 컴파일 오류로 드러납니다. 인터페이스를 많이 붙였다고 좋은 설계는 아닙니다. 서로 관계없는 책임이 한 클래스에 몰리면 수정 이유도 많아져요. 호출자가 정말 필요로 하는 작은 계약으로 나누고, 객체를 주입할 때 구체 클래스보다 해당 인터페이스 형식을 받는 것이 테스트와 교체에 유리합니다. 같은 시그니처라면 한 멤버가 두 계약을 만족할 수 있다 두 인터페이스가 모두 void Start()를 요구하고 의미도 같다면 클래스의 public Start 하나로 둘 다 구현할 수 있습니다. 반대로 이름은 같지만 의미가 다르면 한 구현으로 합치는 순간 호출자가 기대한 동작이 흐려져요. 이때 IFirst.Start와 ISecond.Start를 따로 구현합니다. 명시적으로 구현한 멤버는 클래스 인스턴스에서 직접 보이지 않고 해당 인터페이스로...