Interface

tacoyaggi ㅣ 2024. 2. 2. 09:46

Interface 란?

  • 인터페이스는 하나의 계약임. 무슨 계약이냐면 클래스가 인터페이스를 상속 받는 경우 인터페이스의 모든 멤버에 대한 구현을 해야함.
  • 다중상속 가능함
  • 선언은 있고 정의는 없음
  • 생성자 생성 불가능
  • 정적 멤버 불가능
  • 다른 인터페이스를 상속 받을 수 있음

Interface 예제

  • 인터페이스는 계약이라 했다. 인터페이스를 상속받은 InterClass에서 계약에 따라 InterMethod()를 반드시 구현해야 한다.
  • 이건 예제 작성하면서 알게 된건데, 구현체의 접근 제한자는 public 이어야 한다. 이유는 모르겠다!
  • 인터페이스 메서드 접근제한자가 internal 이라 구현체 부분에서도 internal을 사용하면 될 줄 알았는데 안됨
  • 위 내용 찾아보니 인터페이스가 외부에 공개되는 계약을 나타내기 때문이라고 함.
  • 즉 인터페이스 멤버들도 기본적으로 public 사용해야 하고 구현체 역시 무조건 public을 사용해야함
InterClass a = new InterClass();
a.InterMethod();


internal interface ImInter
{
    internal void InterMethod();
}


internal class InterClass : ImInter
{
    public void InterMethod()
    {
        Console.WriteLine("A");
    }
}

Interface 규칙

  • 내가 위 예제 소스에서 인터페이스 네이밍 규칙을 잘 못 사용함
  • ImInter라는 네이밍으로 사용하려고 했는데 인터페이스의 경우 앞에 I 를 붙여줌.
  • 즉 IImInter 가 맞음..
  • 인터페이스 네이밍에는 항상 앞에 I 를 붙혀준다.
  • 접근제한자는 무조건 public 이어야 한다.

다중 상속

  • 인터페이스가 Abstract와 다른 점은 다중 상속에 있음 (인터페이스는 다중 상속이 가능!)
  • 인터페이스명은 앞에 I 를 붙혀서 수정해줌 (복습의 힘!) + 모든 접근제한자를 public 으로 변경 (복습의 힘2!)
  • ITaco라는 인터페이스를 추가하고 다중 상속 시켜봄 (당연히 다중상속을 받는 구현 클래스에서는 2개의 인터페이스의 멤버를 구현해야 함)
  • Abstract 와 다른 점은 뭐다? 다중 상속이 대표적이다~
public interface IImInter
{
    public void InterMethod();

    public string Test();
}

public interface ITaco
{
    public void GetName();
}


public class InterClass : IImInter , ITaco
{
    public void InterMethod()
    {
        Console.WriteLine("A");
    }

    public string Test()
    {
        return "dd";
    }

    public void GetName()
    {
        Console.WriteLine("다중 상속~");
    }
}

인터페이스끼리의 상속

  • IImInter 인터페이스가 ITaco 인터페이스를 상속 받는 개념
  • 다중 상속과 구현체 부분에 있어서 달라지는 점은 없음. (구현 클래스에 다중 상속이 이뤄지는게 아닌 IImInter 인터페이스에 상속이 이루어짐)
public interface IImInter : ITaco
{
    public void InterMethod();

    public string Test();
}

public interface ITaco
{
    public void GetName();
}


public class InterClass : IImInter
{
    public void InterMethod()
    {
        Console.WriteLine("A");
    }

    public string Test()
    {
        return "dd";
    }

    public void GetName()
    {
        Console.WriteLine("다중 상속~");
    }
}

결론

  • 인터페이스의 접근제한자는 무조건 public!
  • 인터페이스명 맨 앞에 대문자 I
  • 인터페스는 다중상속 가능!
  • 추상화는 Abstract 와 Interface 2가지~

'SW 기능 > C#' 카테고리의 다른 글

OverLoading, Override  (0) 2024.02.02
nameof  (0) 2024.02.02
Get Set  (0) 2024.02.02
Generic  (0) 2024.02.02
Base  (0) 2024.02.02