Skip to content

Latest commit

 

History

History
150 lines (119 loc) · 4.58 KB

22.03.01_인터페이스.md

File metadata and controls

150 lines (119 loc) · 4.58 KB

22.03.01_인터페이스

목차

01.인터페이스

02.인터페이스 선언

02.인터페이스 사용

01.인터페이스

  • 클래스가 따라야하는 약속
    • 이약속은 인터페이스로 부터 파생될 클래스가 어떤 메소들르 구현해야 할지를 정의함

02.인터페이스 선언

interface 인터페이스이름
{
  반환형식 메소드이름1(매개변수_목록);
  반환형식 메소드이름2(매개변수_목록);
}
  • 클래스와 비슷해 보이지만
    • 메소드, 이벤트, 인덱서, 프로퍼티만을 가질수 있다는 차이가 있음
  • 이름을 작명할때는 인터페이스 이름은 대문자아이(I)를 붙이는 것이 관례

03. 인터페이스 사용

  • 인터페이스는 다중 상속이 가능하다.

  • 기존 인터페이스에 새로운 기능을 추가하고 싶은 경우 사용

    • 그냥 인터페이스 기능 추가하려면 추가하려는 인터페이스를 수정하면 된다고 생각할 수 있지만

      • 그렇게 해도되는 경우가 있고 아닌 경우가 있음
    • 인터페이스가 .NET SDK에서 제공하는것 이라면 수정이 안된다.

      • 그래서 이인터페이스에서 추가하기 위해서 인터페이스를 상속해서 해야함
    • 기능을 추가하려는 인터페이스가 여러 클래스가 상속하는 경우

      • 이 경우 다른 클래스들이 기존 인터페이스를 상속하는 경우

        • 메서드를 추가하면 원칙상 모든 메소드를 구현해야하기때문에
        • 클래스 전부를 수정해야함
      • 하지만, 인터페이스의 기본 구현 메소드를 쓰면 이문제도 해결이 가능하긴하다.

        • 기본 구현 메소드 구현 전

          using System;
          
          namespace Test
          {
          //기본 구현 메소드 구현 전
          interface printDriver
          {
            public void printBlack(string message);
          }
          
          public class SamsungPrint : printDriver
          {
            public void printBlack(string message)
            {
              Console.WriteLine($"삼성 프린트 블랙적용 : {message}");
            }
          }
          
          public class LGPrint : printDriver
          {
            public void printBlack(string message)
            {
              Console.WriteLine($"엘지 프린트 블랙적용 : {message}");
            }
          }
              public class Person
              {
                  public static void Main(string[] args)
                  {
                   printDriver samsung = new SamsungPrint();
                   samsung.printBlack("인쇄테스트");
          
                   printDriver lg = new LGPrint();
                   lg.printBlack("인쇄테스트");
                  }
              }
          }
        • 기본 구현 메소드 구현 후

          //기본 구현 메소드 구현 후
          // ms에서 프린트 드라이브 인터페이스 구현해줌 근데 컬러프린트 드라이브가 생긴 상황
          // - 상황 컬러 인쇄가 필요한 경우 삼성만 신제품 출시됨
          using System;
          
          namespace Test
          {
          //기본 구현 메소드 구현 전
          interface printDriver
          {
            public void printBlack(string message);
            public void printColor(string message)
            {
              Console.WriteLine($"컬러적용 : {message}");
            }
          }
          
          public class SamsungPrint : printDriver
          {
            public void printBlack(string message)
            {
              Console.WriteLine($"삼성 프린트 블랙적용 : {message}");
            }
             public void printColor(string message)
            {
              Console.WriteLine($"삼성 프린트 컬러적용 : {message}");
            }
          }
          
          public class LGPrint : printDriver
          {
            public void printBlack(string message)
            {
              Console.WriteLine($"엘지 프린트 블랙적용 : {message}");
            }
          }
              public class Person
              {
                  public static void Main(string[] args)
                  {
                   SamsungPrint samsung = new SamsungPrint();
                   samsung.printBlack("인쇄테스트");
                   samsung.printColor("인쇄테스트");
                   LGPrint lg = new LGPrint();
                   lg.printBlack("인쇄테스트");
                   //lg.printColor("인쇄테스트");
                  }
              }
          }

        image-20220301224739706