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
반응형