인터페이스(Interface)
다루는 내용
- 인터페이스
- 명시적 구현
- 묵시적 구현
인터페이스는 구현에 대한 약속으로 다음과 같은 특징을 지니고 있다.
- 인터페이스에는 메소드, 속성, 이벤트, 인덱스를 포함할 수 있다.
- 인터페이스에는 시그니쳐만 약속만 되어 있고 구현은 할 수 없다.
- 인터페이스 형식의 직접적인 인스턴스를 생성할 수 없다.
- 클래스와 구조체, 인터페이스에서 다중 인터페이스를 상속(구현 약속)을 할 수 있다.
- 상속(구현 약속)을 한 클래스와 구조체에서는 반드시 인터페이스에 명시된 멤버들에 대한 구현을 하여야 한다.
이와 같이 인터페이스는 추상클래스와 비슷한 측면을 많이 갖고 있다. 이러한 특징으로 인해 인터페이스와 인터페이스는 구현되지 않은 추상이라고 일컫는다.
Look & Feel & Think
인터페이스의 정의는 위에 있는 것처럼 구현이 되지 않은 메소드와 속성등으로 이루어 질 수 있다. 또한, 아래처럼 인터페이스를 상속(구현 약속)하는 곳에서는 이들에 대한 구현을 반드시 이루어져야 한다. C#이나 Java에서는 클래스의 다중 상속을 불가하고 인터페이스에 대한 다중 상속(구현 약속)을 통해 좀 더 신뢰성 있는 OOP를 추구하고 있다. |
경우에 따라서 두 개의 인터페이스에 동일한 시그니쳐를 갖는 메소드가 있을 경우에 이들을 다중 상속을 받고 하나의 메소드만을 구현하더라도 각각의 인터페이스 형식에서 해당 메소드에 대한 접근을 할 수 있다.
Look & Feel & Think
위의 IStudy와 ITeach 인터페이스에는 void Think();라는 동일한 시그니쳐를 갖는 멤버를 가지고 있다.
이와 같을 때 사용하는 아래의 예를 보면 어떠한 인터페이스로 접근을 하더라도 해당 메소드가 동작함을 확인할 수가 있다.
|
위의 예들은 인터페이스를 상속을 받아 구현함에 있어 어떠한 인터페이스의 메소드를 구현하는 것인지를 명시하지 않았는데 반드시 명시를 해야 하는 경우도 있으며 필요에 의해서 명시를 할 수도 있다.
예를 들어 두 개의 인터페이스에 시그니쳐가 일치하는 메소드가 있을 수 있다. 이 둘을 다중 상속을 받아 동일한 행위를 하기를 원한다면 하나만 정의하여도 문제가 되지 않지만 서로 다른 행위를 원한다면 이들에 대한 구분을 위해 명시적으로 구현해 주어야 한다.
또한, 인터페이스의 명시된 구현에서는 액세스 수준도 명시할 수 없고 사용에 있어서도 해당 인터페이스 타입의 변수로 접근을 해야 하는 제약이 생긴다.
Look & Feel & Think
위의 예는 인터페이스에 대한 명시적 구현의 예이다. 묵시적 구현의 경우와 다르게 어떠한 인터페이스의 메소드인지가 명확히 명시가 되었으며 액세스 수준에 대해서는 표현하지 않는다는 차이를 알 수 있다.
위와 아래의 예를 보면 인터페이스의 명시적 구현이 된 멤버는 해당 인터페이스 형식으로만 접근이 가능하다는 것을 알 수 있다. |
좀 더 자세한 사항을 MSDN을 확인하시고 싶으면 다음을 따라가서 확인을 할 수 있다. MSDN바로가기
'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글
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 |