인터페이스: interface

Fruit·2023년 3월 30일

✨ Hello C#!

목록 보기
33/34
post-thumbnail

🌸 인터페이스: interface

  • 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있다.
  • 기본적으로 구현부가 없다. (하단의 기본 구현 메서드 참고)
  • 모두 public으로 선언된다.
  • 인스턴스를 생성할 수 없지만, 참조는 생성할 수 있다.
  • 인터페이스를 상속받는 클래스는 인스턴스를 생성할 수 있다.
  • 파생 클래스는 인터페이스에 선언된 모든 메서드(및 프로퍼티)를 구현해야한다 (public 한정자).

인터페이스로부터 파생될 클래스가 어떤 메서드를 구현해야 할지 정의한다.

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
profile
🌼인생 참 🌻꽃🌻 같다🌼

0개의 댓글