본문 바로가기
유니티 공부/C# 문법

C# 문법 - abstract

by 코딩하는 돼징 2023. 4. 14.
반응형

abstract

클래스를 만들 때 행위에 강요를 주는 것


클래스 내의 함수를 추상적으로 만들었으므로 실제 내용이 없다. 

abstract class Pig
{
	public abstract void Eat();
    
    public void Jump()
    {
    	Console.WriteLine("점프");
    }
}

Pig의 자식 클래스에서는 반드시 Eat() 함수를 오버라이딩 해야 한다.

class PinkPig : Pig
{

}

만약 오버라이딩을 하지 않는 경우 아래와 같은 오류가 나온다.


class PinkPig : Pig
{
	public override void Eat()
	{
		Console.WriteLine("분홍 돼지");
	}
}

C#에서는 다중 상속을 할 수 없다.

class PinkPigFly : Pig, Flyable
{

 }


C++ 에서는 가능한데 C#에서는 안되는 이유가 무엇일까?

만약 다중상속이 가능하게 되면 아래 코드와 같은 혼종이 나왔을 때 BluePig의 Eat함수를 실행시킬지 PinkPig의 Eat함수를 실행시킬지 알 수 없는 난감한 상황이 발생하면 구조가 꼬이게 된다.

class PinkBluePig: Pig
{
	public override void Eat()
	{

	}
}

다중 상속이 문제가 되는 부분은

같은 인터페이스로 만들어진 같은 이름의 함수가 각기 다른 구현부를 물려 받았기 때문에 양쪽이 충돌되어서 문제가 발생된 것이다.

 

그러므로 인터페이스는 물려주지만 구현 부분은 물려주지 않으면 문제가 해결되지 않을까?

 

 

 

본 게시글은 MMORPG Part1을 수강하고 정리한 글입니다.

https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part1/dashboard

 

반응형

댓글