컴퓨터프로그래밍/C#

C# - 인터페이스

zelkova 2016. 11. 29. 17:15

<목차로 돌아가기>


  인터페이스(Interface)

얼핏보면 추상클래스와 별로 차이가 없습니다. 개념 자체도 추상클래스와 같이 어떻게 작업할지 약속하는 기능과 비슷하죠 그럼 차이점이 뭘가요?


 추상클래스와 인터페이스의 가장 큰 차이점은 바로 '클래스'냐 아니냐의 차이입니다. 추상클래스는 엄연한 클래스로 이를 구현하는 것은 '상속(extends)'입니다. 그러나 인터페이스는 '포함(implements)'라는 키워드를 통해 구현하게 되는데 이는 자바에서 매우 중요한 차이를 가집니다. 


자바는 오로지 '단일 상속'만을 지원하기 때문에 추상클래스를 상속받는 클래스는 다른 클래스를 상속받을 수 없습니다. 그러나 인터페이스를 포함하는 클래스는 다른 클래스를 상속받을 수 있습니다. 


추상클래스는 일반클래스와 달리 그 자신을 new 명령어를 통해 객체를 생성할 수 없습니다. 그러나 '다형성(polymorlphism)'을 통해 자식 클래스의 객체를 생성할 수는 있습니다. 


인터페이스를 쓰는 가장 큰 이유는 다중상속을 지원하지 않는 자바에서 다중상속의 장점을 가져오기 위해서입니다. 다중상속이 가지는 단점은 배제하고 오직 장점만을 취하기 위해 인터페이스를 쓰는 것입니다. 



사용방법

Interface IParent --- 인터페이스명은 대문자 I로 시작한다.

{

    int Starting();

}


인터페이스의 특징

ㆍ인터페이스 내에서는 메소드, 이벤트, 인덱서, 속성을 쓸 수 있습니다.

ㆍ인터페이스에서는 필드를 포함할 수 없습니다.

ㆍ모든 멤버는 public로 접근 권한이 기본으로 지정됩니다.

ㆍ몸통이 정의되어 있지 않은 추상적인 멤버를 가집니다.

ㆍ인터페이스는 다른 인터페이스를 상속하거나, 클래스에서 인터페이스 하나를 여러 차례
   상속할 수 있습니다.




예제)

  1.  using System;
  2.  using System.Collections.Generic;
  3.  using System.Linq;
  4.  using System.Text;
  5.  using System.Threading.Tasks;

  6.  namespace ConsoleApplication2
  7.  {
  8.     interface IBoss
  9.     {
  10.         void order1();
  11.     }
  12.     interface IKing
  13.     {
  14.         void order2();
  15.     }

  16.     class Messenger : IBoss, IKing
  17.     {
  18.         public void order1()
  19.         {
  20.             Console.WriteLine("Boss : 이렇게 하거라");
  21.         }

  22.         public void order2()
  23.         {
  24.             Console.WriteLine("King : 아니 요렇게 해 가라");
  25.         }
  26.     }
  27.     class Player
  28.     {
  29.         static void Main(string[] args)
  30.         {
  31.             Messenger run = new Messenger();
  32.             run.order1();
  33.             run.order2();

  34.             Console.WriteLine("나 : 어쩌라고..");
  35.         }
  36.     }
  37.  }


결과)


9, 13줄 :  여기에서 인터페이스르 선언했습니다.


18줄 : 여기에서 IBoss, IKing을 상속받았습니다. 

         추상클래스와는 다르게 두개 이상의 제약을 상속받을 수 있음을 알 수 있습니다.

         당연히 추상클래스와 똑같이 인터페이스에서 지정한 메소드를 사용하지 않으면 에러!



반응형