c#
추상 vs 인터페이스
by kcj3054
2022. 12. 5.
추상 vs 인터페이스
- c# 9.0 프로그래밍 책에는 c++에는 다중상속이있지만 c#은 단일 상속, 그렇지만 interface는 추가로 받아 구현할 수 있다고 적혀있지만 의미론적으로는 추상은 뼈대를 만들고 그에 해당하는 기능들은 인터페이스로 둘 수 있다고 다른? 곳에서 본 것같다
House class
- 집이라는 것을 추상클래스로 뼈대를 잡았다 그에 상응하는 door는 기능적으로 인터페이스로 조정할 수 있다.
public abstract class House
{
private String roof = "House roof";
private String wall = "House wall";
private Door door;
public void setDoor(Door door)
{
this.door = door;
}
public Door GetDoor()
{
return door;
}
public virtual void OpenDoor()
{
Console.WriteLine("Basic door opend");
}
public virtual void CloseDoor()
{
Console.WriteLine("Basic door closed");
}
}
Door의 인터페이스 , 구현체
public interface Door
{
public void OpenDoor();
public void CloseDoor();
}
public class MyDoor : Door
{
public void OpenDoor()
{
Console.WriteLine("MyDoor - Open");
}
public void CloseDoor()
{
Console.WriteLine("MyDoor - Close");
}
}
public class MyDoor : Door
{
public void OpenDoor()
{
Console.WriteLine("MyDoor - Open");
}
public void CloseDoor()
{
Console.WriteLine("MyDoor - Close");
}
MyHouse
public class MyHouse : House
{
public override void CloseDoor()
{
GetDoor().OpenDoor();
}
public override void OpenDoor()
{
GetDoor().CloseDoor();
}
}
Main
House myHouse = new MyHouse();
Door door = new MyDoor();
myHouse.setDoor(door);
myHouse.OpenDoor();
myHouse.CloseDoor();
- 위에서 보듯이 myHouse는 House를 상속을 받았다. 여기서 House의 door를 보면 set, get이 존재한다, 이 부분을 위해서 door를 MyDoor로 만들어 놓은 후 myHouse의 setDoor부분에 내가 만든 MyDoor를 넣으면 추상과 인터페이스의 역할을 충분히 할 수 있다.