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를 상속받은 클래스를 통해 그 기능을 가져올 수 있다.