제로의영역

8.2 인터페이스는 약속이다 본문

C#

8.2 인터페이스는 약속이다

아이큐제로 2019. 6. 25. 17:41

* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.

* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.

 

 인터페이스 예제입니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace ex8._1
{
    interface ILogger	// 자신으로부터 파생될 클래스가 반드시 WriteLog()메소드를 구현하도록 강제함
    {
        void WriteLog(string message);
    }
    
    class ConsoleLogger : ILogger   				//ILogger를 상속하며, WriteLog() 메소드 구현
    {
        public void WriteLog(string message)                                   
        {
            Console.WriteLine("{0}{1}", DateTime.Now.ToLocalTime(), message);   
        }
    }

    class FileLogger : ILogger		//ILogger를 상속(강제 수행함)하며, WriteLog() 메소드 구현. 
    {
        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.ToShortTimeString(), message);
        }
    }

    class ClimateMonitor                                                      
    {
        private ILogger logger;                                             
        public ClimateMonitor(ILogger logger)                                  
        {
            this.logger = logger;                                               
        }
        public void start()									//monitor 변수를 받아 메소드 실행
        {
            while (true)								 //입력 값이 참인 동안 아래 코드 실행
            {
                Console.Write("온도를 입력해주세요.: ");			//프로그램 실행 시 텍스트 표시
                string temperature = Console.ReadLine();
                								//입력 값을 문자열을 변수 temperature로 선언
                
                if (temperature == "")	
                    break;					//temperature값이 입력되지 않으면 메소드를 종료함.

                logger.WriteLog("현재 온도: " + temperature);
          //logger를 변수로한 WriteLog를 ("현재 온도: " + temperature)로 매개변수로 삼아 실행
                
            }
        }
    }
    class MainProgram
    {
        static void Main(string[] args)
    {
        ClimateMonitor monitor = new ClimateMonitor(new FileLogger("MyLog.txt"));
       //monitor 객체는 애플리케이션이 시작된 디렉토리에 MyLog.txt를 만들고 여기에 로그를 남김.

        monitor.start();	//start 메소드 실행. start()메소드로 이동
    }
}
}

출력결과

1) 콘솔

온도를 입력해주세요.: 15
온도를 입력해주세요.: 27
온도를 입력해주세요.: 32
온도를 입력해주세요.:

2) MyLog파일: 폴더의 bin > Debug 폴더 안에 MyLog파일이 생성되며 그곳에 기록이 남습니다.

오후 5:18 현재 온도: 15
오후 5:23 현재 온도: 27
오후 5:23 현재 온도: 32

 

이번 예제는 저한테 어렵네요. 안배운것도 나오고... ㅜㅜ

 

'C#' 카테고리의 다른 글

8.4 여러 개의 인터페이스, 한꺼번에 상속하기  (0) 2019.06.26
8.3 인터페이스를 상속하는 인터페이스  (0) 2019.06.25
7.17 튜플  (0) 2019.06.18
7.16 구조체  (0) 2019.06.16
7.15 확장 메소드  (0) 2019.06.14