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가지~