[C#] abstract keyword

Min·2024년 7월 26일
0

CSharp

목록 보기
10/25
post-thumbnail

추상클래스

C++에도 추상클래스가 있다. 클래스 안에 순수가상함수를 선언하면 그 클래스는 추상클래스가 된다. 순수가상함수는 추상클래스를 상속받는 클래스가 강제로 구현해야하는 함수이다.

추상클래스는 C++에서 두가지 이유때문에 쓴다.
1. 정의하고자 하는 개념이 구체적인 대상이 아닐때, 인스턴스화 되면 안된다고 생각할때.
2. 파생클래스가 특정 기능을 강제적으로 사용해야 한다고 생각할때.

abstract가 class 앞에 붙으면 추상클래스, method앞에 붙으면 순수가상함수라고 생각하면 된다.

C#에서도 사용목적은 같다. 다만, abstract 키워드를 클래스나 메서드 앞에 붙임으로 훨씬 명시적이고 가독성이 좋다는 장점이 있다.

  • 가질 수 있는 멤버
  1. 멤버변수
  2. 멤버함수
  3. 추상함수(public이나 protected로 구현 되어야함)
// compile with: -target:library
public class D
{
    public virtual void DoWork(int i)
    {
        // Original implementation.
    }
}

public abstract class E : D
{
    public abstract override void DoWork(int i);
}

public class F : E
{
    public override void DoWork(int i)
    {
        // New implementation.
    }
}

C++에서는 순수가상함수의 구현부를 만들수도 있고, 만들지 않을수도 있다. C#은 abstract 메서드의 구현부를 만드는것이 안된다고 한다. 때문에 부모의 구현부 또한 필요할 경우 추상화된 클래스의 Base 클래스로 만들어 정의하면 된다.


다중상속

기본적으로 C#은 클래스의 다중상속을 지원하지 않는다. 다중상속을 지원하는 C++과 차이가 있기 때문에, 어쩌면 C#의 추상클래스는 C++의 그것에 비해 제한적이라고 말 할 수 있다.
C#이 클래스의 다중상속을 지원하지 않는건 다중상속 자체가 안전하지 않은 문법이기 떄문이다.[C++]다중상속
하지만 다중상속을 사용하지 않을 시 추상클래스로 구현한 인터페이스를 한번에 상속받을 수 없기 때문에, C#은 불편함을 해소하기 위해서 interface라는 기능을 지원한다.
인터페이스 문법에 대해서는 다음에 알아보자.

profile
티내는 청년

0개의 댓글

관련 채용 정보