
인터페이스로부터 파생될 클래스가 어떤 메서드를 구현해야 할지 정의한다.
using System;
namespace Interface
{
interface ILogger // 인터페이스 선언
{
void WriteLog(string message); // 구현부 X
}
class ConsoleLogger : ILogger // 인터페이스(ILogger) 상속
{
public void WriteLog(string message) // ILogger의 WriteLog 메서드 구현
{
Console.WriteLine("{0} - 입력: {1}", DateTime.Now.ToString("yyyy.MM.dd hh:mm:ss"), message + "\n");
}
}
class ClimateMonitor
{
private ILogger logger;
public ClimateMonitor(ILogger logger)
{
this.logger = logger;
}
public void start()
{
while (true)
{
Console.Write("입력: ");
string temperature = Console.ReadLine();
logger.WriteLog(temperature);
}
}
}
class MainApp
{
static void Main(string[] args)
{
ClimateMonitor monitor = new ClimateMonitor(new ConsoleLogger());
monitor.start();
}
}
}
[실행 결과]
입력: 1
2023.03.30 09:16:19 - 입력: 1
입력: Hello Fruit!
2023.03.30 09:16:25 - 입력: Hello Fruit!
...
using System;
namespace DefaultImplementation
{
interface ILogger
{
void WriteLog(string message); // 구현부 X
void WriteError(string error) // 구현부 O
{
WriteLog($"[Error]: {error}");
}
}
class ConsoleLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("{0} - {1}", DateTime.Now.ToString("yyyy.MM.dd hh:mm:ss"), message);
}
}
class MainApp
{
static void Main(string[] args)
{
ILogger logger = new ConsoleLogger(); // 업캐스팅
logger.WriteLog("1");
logger.WriteError("2"); // 에러 발생 X
ConsoleLogger clogger = new ConsoleLogger();
clogger.WriteLog("1");
//clogger.WriteError("2"); // 에러 발생 O
}
}
}
[실행 결과]
2023.03.30 09:50:45 - 1
2023.03.30 09:50:45 - [Error]: 2
2023.03.30 09:50:45 - 1