추상 클래스
ex)
abstract class Monster //abstract를 추가할 경우 'Monster'는 추상화된다.
{
public abstract void Shout() // 추상 클래스 내의 함수 또한 추상적으로 만들 수 있다, 추상적으로 만든 함수는
해당 함수 내에서 정의를 해줄 수 없다.(개념적으로만 존재한다.)
}
class Orc : Monster // 추상 클래스를 상속받은 class들은 반드시 추상적으로 생성된 함수를 추가해야한다.
{
public override void Shout() {}
}
class Skeleton : Monster
{
public override void Shout() {}
}
프로젝트를 진행 중 여러개의 class를 상속받고 싶은 경우가 생길 수 있다.
C++에서는 다중 상속이 가능하지만 C#에서는 다중 상속이 불가능하다.
C#에서 다중 상속이 불가능하게 막아둔 이유 : 위의 코드를 이어 하나의 class를 추가 생성하여 예시를 든다.
=>
class SkeletonOrc : Skeleton , Orc // 이 경우 Skeleton, Orc의 기능을 모두 상속 받게 되는데 두 class에서 중복되는
기능이(Shout()) 있다, 이 상황에서 두 기능이 충돌하게 되기 때문에 다중 상속을 막았다.
C#에서 이를 위해 지원하는 문법이 있다.
인터페이스
ex)
Interface IMoving // Interface 지정 후 이름을 선언하는데 일반적으로 선언해도 상관없지만 Interface라는 것을
명시하기 위해 이름 앞에 'I'를 추가하기도 한다. = Moving => IMoving
{
void Fly(); // Interface의 함수는 public과 같은 키워드를 선언해줄 필요없이 형태만 선언해준다.
}
class MovingOrc : Orc, IMoving // 부모 클래스는 아니지만 Interface는 부모 클래스와 더불어서 제공할 수 있다.
{
public void Fly() // Interface를 상속받으면 해당 Interface에 있는 함수를 사용해야한다.
{ }
}
Interface의 경우 추상화와 달리 여러개의 Interface를 다중으로 상속받을 수 있다는 장점이 있다.
'C#' 카테고리의 다른 글
| 객체지향 (0) | 2021.05.14 |
|---|---|
| Generic(일반화) (0) | 2021.05.14 |
| Dictionary (0) | 2021.05.13 |
| 다차원 배열 (0) | 2021.05.13 |
| 배열 (0) | 2021.05.12 |