22.03.01_인터페이스.인터페이스
본문 바로가기
CS Study/Csharp

22.03.01_인터페이스.인터페이스

by KyeongMin 2022. 3. 2.
728x90
반응형

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("인쇄테스트");
                  }
              }
          }
          

https://github.com/3DPIT/study/blob/master/02.studyData/05.Csharp/2022/%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5/22.03.01_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4.md

 

GitHub - 3DPIT/study

Contribute to 3DPIT/study development by creating an account on GitHub.

github.com

 

728x90
반응형

'CS Study > Csharp' 카테고리의 다른 글

22.03.01_코드커버리지  (0) 2022.03.02
22.03.01_추상화와캡슐화란?  (0) 2022.03.02
22.03.01_인스턴스란  (0) 2022.03.02
22.03.01_시그니처  (0) 2022.03.02
22.03.01_상속이란?  (0) 2022.03.02

댓글