본문 바로가기

컴퓨터 프로그래밍

c# 강좌 인터페이스

반응형

인터페이스는 객체 지향 프로그래밍을 한층 더 강력하게 만들어주는 요소이다. 

객체지향의 고수는 인터페이스를 잘 사용할 수 있어야 한다 라고 합니다. 

 

인터페이스는 자신으로부터 파생될 클래스가 반드시 메소드를 사용하도록 강제한다. 

예시를 봅시다. 

ClimateMonitor란 클래스를 만들고 사용자로부터 온도를 반복적으로 입력받아 기록하는 클래스로 만들자!

로그를 저장하는 방식 등은 ClimateMonirot 클래스를 사용하는 다른 프록르래머들이 입맛에 따라  결정할 수 있어야 한다고 해보자 

Climate클래스는 Logger를 이용해서 사용자로부터 입력받은 온도를 기록한다. 

logger가 어떻게 이 메시지를 기록하는지 ClimateMonitor()생성ㅈ에 매개변수로 입력된 객체에 달려 있다. 

namespace IntegerTypes {
   
    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
    {
        private StreamWriter writer;
        public FileLogger(string path)
        {
            writer = File.CreateText(path);
            writer.AutoFlush = true;
           
        }
        public void WriteLog(string message)
        {
            writer.WriteLine("{0} {1}", DateTime.Now.ToShortDateString(), 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);

            }
        }
    }
    class MainAPP
           
    {
        static void Main(string[] args)
        {

            //ClimateMonitor monitor = new ClimateMonitor(new FileLogger("MyLog.txt"));
            ClimateMonitor monitor = new ClimateMonitor(new ConsoleLogger());
            monitor.start();

        }

    }

 

인터페이스 안에 있는 WriteLog () 라는 메소드를 반드시 상속받는 클래스는 사용을 해야만한다. (강제)

나머지는 클래스와 비슷함.

 

반응형

'컴퓨터 프로그래밍' 카테고리의 다른 글

C# 강좌 프로퍼티.  (0) 2019.06.07
C# 강좌 추상클래스  (0) 2019.06.07
c# 강좌 업캐스팅과 다운캐스팅  (0) 2019.06.07
c# 강좌 is as 연산자 형식 변환.  (0) 2019.06.07
c# 공부 시작  (0) 2019.06.07