45.3 생성자의 매개변수에 인터페이스 사용하기
생성자의 매개변수에 인터페이스 형식을 사용하면 해당 인터페이스를 상속하는 모든 클래스의 인스턴스를 받을 수 있습니다. 이 내용을 예제로 살펴보겠습니다. 다음 내용을 입력한 후 실행해 보세요.
생성자의 매개변수에 인터페이스 사용: InterfaceDemo.cs
using System; namespace InterfaceDemo { //배터리 표준(강제성) interface IBattery { string GetName(); //메서드 시그니처만 표시 } class Good : IBattery { public string GetName() => "Good"; } class Bad : IBattery { public string GetName() => "Bad"; } class Car { private IBattery _battery; //① 생성자의 매개변수로 인터페이스 형식 지정 public Car(IBattery battery) { _battery = battery; //넘어온 개체가 _battery 필드에 저장 } public void Run() => Console.WriteLine( "{0} 배터리를 장착한 자동차가 달립니다.", _battery.GetName()); } class InterfaceDemo { static void Main(string[] args) { //ⓐ 넘겨주는 개체에 따라 배터리 이름이 다르게 표시 var good = new Car(new Good()); good.Run(); new Car(new Bad()).Run(); //개체 만들기와 동시에 메서드 실행 } } }
실행 결과
Good 배터리를 장착한 자동차가 달립니다. Bad 배터리를 장착한 자동차가 달립니다.
IBattery 인터페이스를 상속하는 Good과 Bad 클래스의 인스턴스는 ①처럼 IBattery 인터페이스 형식의 battery 매개변수로 받을 수 있습니다. 이러한 식으로 생성자의 매개변수로 인터페이스를 사용하면, 해당 클래스의 생성자는 개체를 하나 이상 받을 수 있는 융통성이 늘어납니다.