■ 인터페이스(Interface) :
클래스가 해야 하는 행동(메서드)을 결정, 인터페이스(Interface)를 상속받은 클래스(Class)는 인터페이스(Interface)에 선언된 메서드(Method)를 모두 구현해야 함
- 일반적으로 인터페이스(Interface)는 I 로 시작하는 이름으로 명명 ex) IControl, IConnect
- 선언 가능 멤버 : 메서드(Method), 이벤트(Event), 인덱서(Indexer), 프로퍼티(Property)
- 선언 불가능 멤버 : 필드(Field)
- 메서드(Method)는 구현을 갖지 않음
- Instance 생성 불가(참조 가능)
- 상속받은 클래스의 Instance 생성 가능
- 비유적 설명 :
· 붕어빵 틀 설계도(인터페이스) - 붕어빵 틀(클래스) - 붕어빵(객체)
■ Example :
interface ITester
{
void TestPrint(int num);
}
class TesterClass : ITester
{
public void TestPrint(int num)
{
Console.WriteLine($"[TestPrint] num은 {num} 입니다.");
}
}
class Program
{
static void Main(string[] args)
{
ITester tester = new TesterClass();
tester.TestPrint(100);
}
}
■ 추상 클래스(Abstract Class) :
추상 클래스(Abstract Class)는 인터페이스(Interface)와 클래스 양쪽 모두의 특징 일부를 갖는 클래스
- 메서드(Method)의 구현을 가질 수 있음(= 클래스 특징)
· 추상 클래스에서 구현을 가지지 않는 메서드를 추상 메서드(Abstract Method)라고 함
· 추상 클래스의 파생 클래스는 추상 메서드(AbstractMethod)를 구현해야 함
- 추상 클래스는 Instance를 생성할 수 없음(= 인터페이스 특징)
- 인터페이스를 제공하되 기본적인 구현을 함께 제공하고 싶은 경우 사용
- 공통된 부분은 미리 구현하고, 이를 상속받는 클래스에서 필요한 부분만 재정의하여 사용
■ Example
abstract class AbstractClass
{
public abstract void Method01();
public void Method02()
{
Console.WriteLine("[Method02] 추상클래스에서 구현 가능");
}
}
class DerivedClass : AbstractClass
{
public override void Method01()
{
Console.WriteLine("[Method01] 파생클래스에서 구현(재정의)");
}
}
class Program
{
static void Main(string[] args)
{
AbstractClass Test = new DerivedClass();
Test.Method01();
Test.Method02();
}
}
'개인공부 > C#' 카테고리의 다른 글
[C#] 배열(Array) (0) | 2022.09.22 |
---|---|
[C#] 프로퍼티(Property) (0) | 2022.09.21 |
[C#] 구조체(Struct), 튜플(Tuple) (0) | 2022.09.14 |
[C#] IS, AS (0) | 2022.09.10 |
[C#] 중첩 클래스(Nested Class), 분할 클래스(Partial Class) (0) | 2022.09.08 |