모름

using System;
using System.IO;

namespace Interface {
    interface ILogger {
        void WriteLog(string message);
    }

    class ConsoleLogger : ILogger {
        public void WriteLog(string message)
        {
            Console.WriteLine("{0} {1}", DateTime.Now.ToLocalTime(), message);
        }
    }

    class FileLogger : ILogger {
        StreamWriter writer;
        public FileLogger(string path)
        {
            writer = File.CreateText(path);
            writer.AutoFlush = true;
        }

        public void WriteLog(string message)
        {
            writer.WriteLine("{0} {1}", DateTime.Now.ToShortTimeString(), message);
        }
    }

    class ClimateMonitor {
        ILogger logger;
        public ClimateMonitor(ILogger logger)
        {
            this.logger = logger;
        }

        public void Start()
        {
            while(true)
            {
                Console.Write("온도를 입력해주세요: ");
                string temperature = Console.ReadLine();
                if (temperature == "")
                    break;

                logger.WriteLog("현재 온도 : " + temperature);
            }
        }
    }

    class MainApp {
        static void Main()
        {
            ClimateMonitor monitor = new ClimateMonitor(new ConsoleLogger());
            monitor.Start();
        }
    }
}

 

Logger 인터페이스를 상속받은 두 클래스를 비교하며 직접 콘솔로 출력해보는 실습, AutoFlush를 처음 봤는데 한번 프로그램이 실행될 때 텍스트 파일이 초기화 되는걸로 보아, 이전의 것을 버리고 새로운 것을 받아들이는 역할을 하는 듯.

 

ClimateMonitor는 ILogger logger를 변수로 가지는데, 생성자를 통해 언제든 인터페이스 Logger를 상속받은 클래스를 통해 그 기능을 가져올 수 있다.