본문 바로가기

개인공부/C#

[C#] 인터페이스(Interface), 추상클래스(Abstract class)

 

■ 인터페이스(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);
    }
}

 

Example 결과

 

■ 추상 클래스(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();
    }
}

 

Example 결과

 

 

 

 

'개인공부 > 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