Interface

interface interface_name
{
	returnType methodName_1(params);
	returnType methodName_2(params);
	returnType methodname_3(params);
}
interface ILogger
{
	void WriteLog(string message);
}

이벤트, 인덱서, 프로퍼티, 메소드 만을 가질 수 있음
구현부가 없고, 한정자도 사용 불가능하며 기본적으로 public으로 선언됨

Interface는 인스턴스를 가질 수 없지만,
인터페이스를 상속받는 Class의 인스턴스를 만드는 것은 가능함
조건
- 파생 클래스는 인터페이스에 선언된 모든 메소드 밒 프로퍼티를 구현해야함
- 메소드들을 public 한정자도 선언해야함

class ConsoleLogger : ILogger
{
	public void WriteLog(string message)
	{
		Console.WriteLine(
		$"{DateTime.Now.ToLocalTime()}, {message}")
	}
}
class ClimateMonitor
{
	private 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);
		}
	}
}