본문 바로가기
C# 공부

interface

by Dev_Hugh 2021. 8. 25.
728x90
반응형

Study about interface and abstract

interface

  • 클래스가 따라야하는 약속이다.
  • 파생될 클래스가 어떤 메소드를 구현해야 할지 정의
interface ILogger
{
    void WirteLog(string log); 
}
class ConsoleLogger : ILogger
{
    // 상속받은 클래스는 구현해야함
    public void WriteLog(string message)
    {
        Console.WirteLine("{0} {1}", DateTime.Now.ToLocalTime(), message);
    }
}
public static void Main()
{
    // 상속받은 클래스 인스턴스화 가능
    ILogger logger = new ConsoleLogger(); 
    logger.WriteLog("Hello, World!");
}
  • 멤버로 메소드, 이벤트, 인덱서, 프로퍼티만 사용 가능
  • 구현부가 없으며 모두 public으로 선언
  • 인스턴스 생성은 불가 (참조는 가능)
  • 인터페이스를 상속 받은 클래스의 인스턴스 생성 가능 즉 상속받은 클래스는 구현부를 모두 재정의해야함

인터페이스를 상속하는 인터페이스

  • 기존 인터페이스에 새로운 기능을 추가한 인터페이스를 만들고 싶을때 사용
  • 필요한 인터페이스가 어셈블리로만 제공되는경우 사용한다.
  • 필요한 인터페이스를 상속한 클래스가 있는경우 사용한다.

여러개 인터페이스 한꺼번에 상속

  • 클래스 다중상속시 죽음의 다이아몬드 문제로 모호성이 생김
  • 업캐스팅 문제
  • 인터페이스의 다중상속은 단순한 외형만 상속함으로 내부 구현은 상속자에게 만들게시켜 위 두 문제를 해결

abstract class

  • 인터페이스와 클래스의 사이
  • 구현은 있으나 인스턴스는 갖지 못한다
  • 클래스의 접근성 사용
  • 다른 추상 클래스 상속 가능, 자식 추상 클래스에서 부모의 추상 메소드 구현의무 없음

abstract method

  • 추상 클래스의 인터페이스 역할을 위한 장치
  • 파생 클래스에서 구현이 필수
728x90
반응형

'C# 공부' 카테고리의 다른 글

generic  (0) 2021.08.25
exception  (0) 2021.08.25
tuple  (0) 2021.08.22
static  (0) 2021.08.22
inheritance  (0) 2021.08.22