[C#] Interface란
개요
Interface란?
=> 한마디로 인터페이스는 Method 원형들의 집합에 이름을 붙인 것으로, 상속 받을 클래스에 기능이나 속성을 지정하는 역할을 합니다.
인터페이스는 추상클래스와 매우 유사하며, 인터페이스에서는 Method를 선언하고 실체는 클래스가 상속 받아 인터페이스의 Method를 구현하는 방식입니다.
추상 클래스와 차이점은 추상클래스는 다중상속을 지원하지 않지만 인터페이스는 다중상속을 지원하며, 인터페이스 자체로 인스턴스 생성이 안된다는 특징이 있습니다.
인터페이스를 사용해야 하는 이유는 다음과 같습니다.
- 외부 시스템에 제공할 서비스 또는 객체 정보를 직접적인 class가 아닌 “선언” 만을 제공한다.
- 다중 상속에 따른 class의 표현을 여러가지로 가능하게 한다.
- 의도하지 않은 속성/Method 공개를 막기 위해서도 사용한다.
- 실제 object 의 class 정보를 제공하고 싶지 않을 때 혹은 명확히 하고 싶을 때 사용한다.
C++에서는 인터페이스 형식을 제공하지는 않지만 순수 가상 함수를 이용하여 정의할 수 있습니다. -> C++ Interface
예제
다음과 같이 interface라고 선언후 Interface의 약자인 I + 인터페이스 이름 형식으로 지정후 필요 Method를 선언하시면됩니다.
interface IMessage
{
void DisplayMessage();
void SetMessage(string _text);
}
인터페이스를 상속 받은 클래스에서 인터페이스의 Method를 구현
class MessageBox : IMessage
{
private string _message;
public void DisplayMessage()
{
Console.WriteLine(_message);
}
public void SetMessage(string _text)
{
_message = _text;
}
}
class TextMessage : IMessage
{
private string _message;
public void DisplayMessage()
{
Console.WriteLine(_message);
}
public void SetMessage(string _text)
{
_message = _text;
}
}
전체 소스코드
InterFace
interface IMessage
{
void DisplayMessage();
void SetMessage(string _text);
}
Main Class
using System;
class MessageBox : IMessage
{
private string _message;
public void DisplayMessage()
{
Console.WriteLine(_message);
}
public void SetMessage(string _text)
{
_message = _text;
}
}
class TextMessage : IMessage
{
private string _message;
public void DisplayMessage()
{
Console.WriteLine(_message);
}
public void SetMessage(string _text)
{
_message = _text;
}
}
class MainClass
{
public static void Main(string[] args)
{
MessageBox _messageBox = new MessageBox();
TextMessage _textMessage = new TextMessage();
_messageBox.SetMessage("I Love Dog");
_textMessage.SetMessage("More then Cat");
_messageBox.DisplayMessage();
_textMessage.DisplayMessage();
}
}
build result
I Love Dog
More then Cat