더북(TheBook)

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 인터페이스를 상속하는 GoodBad 클래스의 인스턴스는 처럼 IBattery 인터페이스 형식의 battery 매개변수로 받을 수 있습니다. 이러한 식으로 생성자의 매개변수로 인터페이스를 사용하면, 해당 클래스의 생성자는 개체를 하나 이상 받을 수 있는 융통성이 늘어납니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.