인터페이스 Interface
interface 선언 방법:
interface 인터페이스이름
{
반환_형식 메소드이름1 (매개변수_목록);
반환_형식 메소드이름2 (매개변수_목록);
}
인터페이스의 선언은 클래스와 비슷하지만 메소드, 이벤트, 인덱서, 프로퍼티만을 가질 수 있다.
interface ILogger
{
void WriteLog(string message)
}
인터페이스는 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있는데 그나마도 구현부가 없다.
그리고 클래스는 접근 한정자로 수식하지 않으면 기본적으로 private 로 선언되지만, 인터페이스는 접근 제한 한정자를 사용할 수 없고 모든 것이 public 으로 선언된다. 그리고 인터페이스는 인스턴스를 만들 수가 없다.
1. 선언된 모든 메소드를 구현해줘야 하며, 이 메소드들은 public으로 수식해야 한다.
2. 퍼블릭으로 수식하지 않았을 때나, 인터페이스에서 선언한 함수를 구현하지 않으면 오류가 뜬다.
3. 인터페이스는 객체를 만들 수 없다.
이 코드에 나타난 것처럼 인터페이스는 인스턴스를 못 만들지만, 참조는 만들 수 있다. 참조에 파생 클래스의 객체의 위치를 담는 것이다. 파생 클래스는 기반 클래스와 같은 형식으로 간주하기 때문에 이것은 인터페이스와 인터페이스를 상속한 클래스의 관계에도 적용된다. 즉, ConsoleLogger의 객체는 ILogger의 객체로 취급할 수 있다.
요약
- 인터페이스는 메소드, 인벤트, 인덱서 프로퍼티만 가질 수 있다.
- 모든 것이 public으로 선언된다.
- 인터페이스의 인스턴스는 만들 수 없다. 다만, 상속받은 클래스의 객체를 넣어 인터페이스의 인스턴스인 것 처럼 사용할 수 있다.
- 선언된 모든 메소드를 구현해줘야 하며, 이 메소드들은 public으로 수식해야 한다.
인터페이스 예시
class Program
{
static void Main(string[] args)
{
IsekaiIdol IseDol = new IsekaiIdol(new Logger());
IseDol.start();
}
}
interface ILogger
{
void WriteLog(string message);
}
class Logger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine(message);
}
}
class IsekaiIdol
{
ILogger logger;
public IsekaiIdol(ILogger logger)
{
this.logger = logger;
}
public void start()
{
while (true)
{
Console.WriteLine("원픽을 입력하세요");
string name = Console.ReadLine();
if (name == "")
{
break;
}
logger.WriteLog($"제 원픽은: {name} 입니다");
}
}
}
참조: 이것이 C#이다.
'C#' 카테고리의 다른 글
인터페이스 interface - 3 인터페이스의 기본 구현 메소드 (0) | 2022.05.16 |
---|---|
인터페이스 interface - 2 인터페이스를 상속하는 인터페이스 (0) | 2022.05.16 |
튜플 (0) | 2022.05.13 |
구조체 struct (0) | 2022.05.13 |
확장 메소드 (0) | 2022.05.13 |