You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
예를 들어 ILogger 인터페이스는 자신으로부터 파생될 클래스가 반드시 WriteLog() 메소드를 구현하도록 강제한다.
이처럼 ILogger 인터페이스를 상속받는 새로운 클래스를 선언해서 파일에 로그를 출력하도록 할 수 있고, 네트워크 너머에 있는 서버에 저장하도록 패킷을 보낼 수도 있다.
usingSystem;usingSystem.IO;namespaceInterface{interfaceILogger{voidWriteLog(stringmessage);}classFileLogger:ILogger{privateStreamWriterwriter;publicFileLogger(stringpath){writer=File.CreateText(path);writer.AutoFlush=true;}publicvoidWriteLog(stringmessage){writer.WriteLine("{0} {1}",DateTime.Now.ToShortTimeString(),message);}}classClimateMonitor{privateILoggerlogger;publicClimateMonitor(ILoggerlogger){this.logger=logger;}publicvoidstart(){while(true){Console.Write("온도를 입력해주세요. : ");stringtemperature=Console.ReadLine();if(temperature=="")break;logger.WriteLog("현재 온도 : "+temperature);}}}classMainApp{staticvoidMain(String[]args){ClimateMonitormonitor=newClimateMonitor(newFileLogger("MyLog.txt"));monitor.start();}}}
8.3 인터페이스를 상속하는 인터페이스
인터페이스도 인터페이스를 상속할 수 있다.
기존의 인터페이스에 새로운 기능을 추가한 인터페이스를 만들고 싶을 때, 인터페이스를 상속하는 인터페이스를 만들면 된다.
interfaceILogger{voidWriteLog(stringmessage);}interfaceIFormattableLogger:ILogger{voidWriteLog(stringformat,paramsObject[]args);}classConsoleLogger2:IFormattableLogger{publicvoidWriteLog(stringmessage){/*...*/}publicvoidWriteLog(stringformat,paramsObject[]args){/*...*/}}classMainApp{staticvoidMain(string[]args){IFormattableLoggerlogger=newConsoleLogger2();logger.WriteLog("The World is not flat.");logger.WriteLog("{0} + {1} = {2}",1,1,2);}}
8.4 여러 개의 인터페이스, 한꺼번에 상속하기
클래스는 여러 클래스를 한꺼번에 상속할 수 없다. C#은 클래스의 다중상속을 허용하지 않는다.