언어 자료구조 알고리즘/C# 언어 문법

17. 인터페이스(Interface)

언제나휴일 2009. 8. 19. 05:47
반응형

인터페이스(Interface)

 

다루는 내용

 - 인터페이스

 - 명시적 구현

 - 묵시적 구현

 

 인터페이스는 구현에 대한 약속으로 다음과 같은 특징을 지니고 있다.

 - 인터페이스에는 메소드, 속성, 이벤트, 인덱스를 포함할 수 있다.

 - 인터페이스에는 시그니쳐만 약속만 되어 있고 구현은 할 수 없다.

 - 인터페이스 형식의 직접적인 인스턴스를 생성할 수 없다.

 - 클래스와 구조체, 인터페이스에서 다중 인터페이스를 상속(구현 약속)을 할 수 있다.

 - 상속(구현 약속)을 한 클래스와 구조체에서는 반드시 인터페이스에 명시된 멤버들에 대한 구현을 하여야 한다.

 

이와 같이 인터페이스는 추상클래스와 비슷한 측면을 많이 갖고 있다.  이러한 특징으로 인해 인터페이스와 인터페이스는 구현되지 않은 추상이라고 일컫는다.

 Look & Feel & Think

 

 인터페이스의 정의는 위에 있는 것처럼 구현이 되지 않은 메소드와 속성등으로 이루어 질 수 있다.

 또한, 아래처럼 인터페이스를 상속(구현 약속)하는 곳에서는 이들에 대한 구현을 반드시 이루어져야 한다.

 C#이나 Java에서는 클래스의 다중 상속을 불가하고 인터페이스에 대한 다중 상속(구현 약속)을 통해 좀 더 신뢰성 있는 OOP를 추구하고 있다.


경우에 따라서 두 개의 인터페이스에 동일한 시그니쳐를 갖는 메소드가 있을 경우에 이들을 다중 상속을 받고 하나의 메소드만을 구현하더라도 각각의 인터페이스 형식에서 해당 메소드에 대한 접근을 할 수 있다.
 Look & Feel & Think

 위의 IStudy와 ITeach 인터페이스에는 void Think();라는 동일한 시그니쳐를 갖는 멤버를 가지고 있다.

 


Professor 클래스에는 IStudy와 ITeach 인터페이스를 다중 상속(구현 약속)을 하고 있으며 하나의 void Think();메소드만 정의를 하는 것을 볼 수 있다.

 

이와 같을 때 사용하는 아래의 예를 보면 어떠한 인터페이스로 접근을 하더라도 해당 메소드가 동작함을 확인할 수가 있다.


위의 예들은 인터페이스를 상속을 받아 구현함에 있어 어떠한 인터페이스의 메소드를 구현하는 것인지를 명시하지 않았는데 반드시 명시를 해야 하는 경우도 있으며 필요에 의해서 명시를 할 수도 있다.

예를 들어 두 개의 인터페이스에 시그니쳐가 일치하는 메소드가 있을 수 있다.  이 둘을 다중 상속을 받아 동일한 행위를 하기를 원한다면 하나만 정의하여도 문제가 되지 않지만 서로 다른 행위를 원한다면 이들에 대한 구분을 위해 명시적으로 구현해 주어야 한다.

또한, 인터페이스의 명시된 구현에서는 액세스 수준도 명시할 수 없고 사용에 있어서도 해당 인터페이스 타입의 변수로 접근을 해야 하는 제약이 생긴다.

 Look & Feel & Think 

  위의 예는 인터페이스에 대한 명시적 구현의 예이다.  묵시적 구현의 경우와 다르게 어떠한 인터페이스의 메소드인지가 명확히 명시가 되었으며 액세스 수준에 대해서는 표현하지 않는다는 차이를 알 수 있다.

 

  위와 아래의 예를 보면 인터페이스의 명시적 구현이 된 멤버는 해당 인터페이스 형식으로만 접근이 가능하다는 것을 알 수 있다.


좀 더 자세한 사항을 MSDN을 확인하시고 싶으면 다음을 따라가서 확인을 할 수 있다.  MSDN바로가기

반응형

'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글

17. 인터페이스(Interface)  (0) 2009.08.19
16. 다형성  (0) 2009.08.19
15. 상속  (0) 2009.08.19
14.정적 클래스 및 정적 멤버  (0) 2009.08.19
13.메소드  (0) 2009.08.19
12. 속성(Property)  (0) 2009.08.19
11.Class  (0) 2009.08.19
10.Casting  (0) 2009.08.19
9.String  (0) 2009.08.19
8. Object  (0) 2009.08.19
7. 배열  (0) 2009.08.19