namespace Project1

{

    interface ILogger

    {

        void WriteLog(string message);

    }


    interface IFormattableLogger : ILogger

    {

        void WriteLog(string format, params Object[] args);

    }


    class ConsoleLogger : IFormattableLogger

    {

        public void WriteLog(string message)

        {

            Console.WriteLine("{0}, {1}", DateTime.Now.ToLocalTime(), message);

        }


        public void WriteLog(string format, params Object[] args)

        {

            string message = String.Format(format, args);

            Console.WriteLine("{0}, {1}", DateTime.Now.ToLocalTime(), message);

        }

    }


    class MainApp

    {

        static void Main(string[] args)

        {

            IFormattableLogger logger = new ConsoleLogger();

            logger.WriteLog("The world is not flat.");

            logger.WriteLog("{0} + {1} = {2}", 1, 1, 2);

        }

    }

}



언어는 C#

'뇌를 자극하는 C# 프로그래밍'에서 발췌한 코드임.


마지막 메인 함수의 IFormattableLogger logger = new ConsoleLogger(); 를 보면

ConsoleLogger를 IFormattableLogger로 캐스팅한 꼴이잖아?

아직 형 변환의 응용법을 잘 몰라서 그런지 이러한 모습이 무슨 이점이 있는지 잘 모르겠음.


그러니까

IFormattableLogger logger = new ConsoleLogger();

이 코드가


ConsoleLogger logger = new ConsoleLogger();

보다 얻을 수 있는 이점이 무엇임???