본문 바로가기
개발/기타

[개발 상식]인터페이스(interface)와 추상 클래스(abstaract class)

by MNMNMNMN 2023. 11. 9.
728x90

인터페이스(interface)와 추상 클래스(abstaract class)

인터페이스(Interface)

장점

  1. 다중 상속 지원: 클래스는 여러 인터페이스를 동시에 구현할 수 있으므로 다중 상속을 흉내낼 수 있습니다.
  2. 유연성: 인터페이스를 사용하면 클래스가 여러 독립적인 계약을 따를 수 있으며, 이로 인해 코드의 유연성이 향상됩니다.
  3. 코드 재사용: 여러 클래스가 동일한 인터페이스를 구현할 수 있으므로 코드 재사용이 증가합니다.

단점

  1. 구현 강제: 인터페이스를 구현한 클래스는 인터페이스의 모든 멤버를 제공해야 하므로 더 많은 작업이 필요할 수 있습니다.
  2. 제한된 기능: 인터페이스는 멤버 구현을 갖지 않으므로 특정 동작을 정의하기 어렵습니다.

예시

public interface IShape
{
    void Draw();
}

public class Circle : IShape
{
    public void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

public class Square : IShape
{
    public void Draw()
    {
        Console.WriteLine("Drawing a square");
    }
}

추상 클래스(Abstract Class)

장점

  1. 부분 구현: 추상 클래스는 일부 멤버의 구현을 포함할 수 있으므로 공통된 동작을 구체화하고 코드 재사용을 증가시킬 수 있습니다.
  2. 추가 기능: 추상 클래스는 일반 멤버 및 추상 멤버를 모두 포함할 수 있으므로 다양한 기능을 제공할 수 있습니다.

단점

  1. 단일 상속: C#에서 클래스는 단일 상속만 지원하므로 추상 클래스를 상속하는 클래스는 다른 클래스를 상속할 수 없습니다.
  2. 강력한 결합: 추상 클래스를 상속하는 클래스는 부모 클래스와 강력하게 결합되며, 유연성이 감소할 수 있습니다.

예시

public abstract class Shape
{
    public abstract void Draw(); // 추상 메서드
    public void Resize()
    {
        Console.WriteLine("Resizing the shape");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

public class Square : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a square");
    }
}

각각의 선택은 프로그램의 요구사항과 디자인에 따라 다릅니다. interface는 다중 상속 및 독립적인 계약을 지원하는 데 유용하며, abstract class는 공통된 구현 및 부분 구현을 포함할 수 있어 다양한 동작을 지원합니다.

728x90
반응형

댓글