제로의영역

8.3 인터페이스를 상속하는 인터페이스 본문

C#

8.3 인터페이스를 상속하는 인터페이스

아이큐제로 2019. 6. 25. 19:05

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

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

 

1. 용도: 기존의 인터페이스에 새로운 기능을 추가한 인터페이스를 만들고 싶을 때 인터페이스를 아래와 같은 이유로 수정이 불가능할 때 사용.

 1) 상속하려는 인터페이스가 소스 코드가 아닌 어셈블리로만 제공:.NET Fameswork SDK에서 제공하는 인터페이스가 그 예.

 2) 상속하려는 인터페이스가 소스 코드를 갖고 있어도 이미 인터페이스를 상속하는 클래스들이 존재하는 경우: 클래스는 반드시 인터페이스의 "모든" 메소드와 프로퍼티를 구현해야 하기 때문에 인터페이스를 수정하면 다른 클래스에 영향을 끼침.

 

2. 사용법: 클래스의 문법과 동일

 interface 파생 인터페이스: 부모 인터페이스

 

예제)

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

namespace ex8._2
{
    interface ILogger                    								  //인터페이스 생성      
    {
        void WriteLog(string message);                        				//메소드
    }
    interface IFormattableLogger:ILogger                           		 //ILogger 상속
    {
        void WriteLog(string format, params Object[] args);
        													// 두개의 매개 변수를 가지는 메소드
/* string format: 지정된 형식에 따라 개체의 값을 문자열로 변환하여 다른 문자열에 삽입하는 형식의
 변수하단의 '("{0} + {1} = {2}", 1, 1, 2)' 참조 
   params Objec[] args: object데이터 타입의 문자열의 개수가 변하는 인자들을 넘겨받는 형식의 변수 */
   
    }
    class ConsoleLogger2:IFormattableLogger              		//IFormattableLogger 상속
    {
        public void WriteLog(string message)         //ILogger인터페이스의 WriteLog메소드 구현
        {
            Console.WriteLine("{0} {1}", DateTime.Now.ToLocalTime(), message);
        }
        public void WriteLog(string format, params Object[] args)
        								//IFormattableLogger인터페이스의 WriteLog메소드 구현 
        {
            String message = String.Format(format, args);
            //message 변수는 개체의 값을 문자열로 변환하여 다른 문자열에 삽입하는 형식을 가리킴.
            Console.WriteLine("{0} {1}", DateTime.Now.ToLocalTime(), message);
        }
    }
    class MainProgram
    {
        static void Main(string[] args)
        {
            IFormattableLogger logger = new ConsoleLogger2();
            									//logger객체가 ConsoleLogger2클래스를 가리킴
            logger.WriteLog("The world is not flat.");
            						//ConsoleLogger2의 WriteLog(string message) 메소드 호출
            logger.WriteLog("{0} + {1} = {2}", 1, 1, 2);
            	//ConsoleLogger2의 WriteLog(string format, params Object[] args) 메소드 호출
        }
    }
}

출력 결과

2019-06-25 오후 6:34:03 The world is not flat.
2019-06-25 오후 6:34:03 1 + 1 = 2

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

8.5 추상 클래스  (0) 2019.06.26
8.4 여러 개의 인터페이스, 한꺼번에 상속하기  (0) 2019.06.26
8.2 인터페이스는 약속이다  (0) 2019.06.25
7.17 튜플  (0) 2019.06.18
7.16 구조체  (0) 2019.06.16