본문 바로가기
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를 넣으면 추상과 인터페이스의 역할을 충분히 할 수 있다.

'c#' 카테고리의 다른 글

Task vs TaskValue  (0) 2022.12.06
c# (시작하세요 c# 프로그래밍 도서 )  (0) 2022.12.05
c#의 init access 문법과 top level  (0) 2022.07.24
Immutable  (0) 2022.07.07
MessagePack  (0) 2022.07.06