[c#] Interface 이해하기
Interface란
- 무엇을 해야 하는가에 대한 정의
- 어떻게 구현할지는 명시하지 않는다.
- 실제로 "어떻게 구현하는가"는 하위 클래스에서 구현.
인터페이스의 특징
1. 접근 제한 한정자를 가질 수 없다. public으로만 선언 가능하다.
: private으로 선언할 수 없다.
2. 필드(변수)를 선언할 수 없다.
3. 인터페이스에 선언되는 메서드는 구현부를 가지지 않는다.
internal interface Interface1
{
public 반환형 메서드이름();
public 반환형 메서드이름();
public int myProperty { get; set; }
}
c# 8.0 버전은 조금 다르다 그냥 참고만 하자!
c# 8.0 버전에는 인터페이스의 메서드가 구현부를 가질 수 있다.
internal interface Interface1
{
public 반환형 메서드이름 ();
반환형 메서드이름()
{
Console.WriteLine("기본 구현입니다.");
}
public int myProperty { get; set; }
}
4. 클래스는 여러 인터페이스를 상속받을 수 있다.
interface Outerface2
{
public void OuterfaceMethod();
}
// 인터페이스 두개를 상속받은 클래스
public class abcClase : Interface1 , Outerface2
{
}
5. 상속받은 인터페이스의 메서드를 반드시 구현해야 한다.
: 구현하지 않으면 "인터페이스 멤버를 구현하지 않습니다"라는 오류가 뜬다.
6. 인터페이스를 구현한 클래스의 인스턴스는 모두 같은 인터페이스 타입이다.
internal interface Interface1
{
public void TestFunction();
}
// 인터페이스를 상속받는 클래스 1
public class temp1 : Interface1
{
public void TestFunction()
{
}
}
// 인터페이스를 상속받는 클래스 2
public class temp2 : Interface1
{
public void TestFunction()
{
}
}
static void Main(string[] args)
{
Interface1[] inter = new Interface1[2];
inter[0] = new temp1();
inter[1] = new temp2();
}
: temp1과 temp2 클래스는 모두 Interface1이라는 인터페이스를 상속받았으므로 같은 타입이다.
7. 인터페이스 안에는 메서드뿐만 아니라 프로퍼티 / 인덱서 / 이벤트도 가능하다.
8. 인터페이스는 인스턴스를 만들 수 없다.
추상클래스 vs interface
추상클래스 abstract class | 인터페이스 interface | |
공통점 | ||
메서드 오버라이딩 | 하위 클래스는 반드시 메서드를 오버라이딩 해야한다. | |
인스턴스 | 인스턴스화 ( ex)new 키워드 사용 ) 불가능 | |
차이점 | ||
필드 | 가질 수 있다. | 가지지 못한다. |
상속 | 인터페이스와 클래스 모두 상속가능 | 인터페이스 밖에 상속받지 못함. |
생성자 | 가질 수 있다. | 가지지 못한다. |
메서드 구현 | 메서드 구현가능 | 메서드 구현 불가능 |
인터페이스 명명 규칙
: 인터페이스 이름은 대문자 "I"로 시작한다.
public interface IAttack
{
void IAttackMethod();
}
public interface ITracking
{
void ITrackinMethod();
}
도움이 된 링크
<interface>
https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/interface
interface 키워드 - C# reference
'인터페이스' 키워드를 사용하여 모든 구현 형식이 지원해야 하는 계약을 정의합니다. 인터페이스는 관련되지 않은 형식 집합 간에 공통 동작을 만드는 수단을 제공합니다.
learn.microsoft.com
<명명규칙>
https://learn.microsoft.com/ko-kr/dotnet/csharp/fundamentals/coding-style/identifier-names
식별자 이름 - 규칙 및 관례 - C#
C# 프로그래밍 언어의 유효한 식별자 이름에 대한 규칙을 알아봅니다. 또한 .NET 런타임 팀과 .NET 문서 팀에서 사용하는 일반적인 명명 규칙을 알아봅니다.
learn.microsoft.com