인터페이스와 추상 클래스

김효중·2025년 5월 9일

개요

인터페이스는 비추상 클래스 또는 구조체가 구현해야하는 관련 기능에 대해 정의한다.
즉 클래스의 형태만 정의하고 구현하지는 않고 이는 상속 클래스에서 구현해야한다.

어떠한 작은 기능에 대한 정의를 할 때 인터페이스를 상속 받는다.

인터페이스

public interface IDamageable
{
    void TakeDamage(int amount);
}

public class Enemy : IDamageable
{
    public void TakeDamage(int amount)
    {
        // 실제 데미지 로직
        health -= amount
    }
}

인터페이스는 다중상속이 가능하여 여러 인터페이스를 하나의 클래스에서 상속 가능하다.
하지만 변수, 생성자를 선언할 수 없다.
또한 메서드의 기본 동작을 구현할 수 없다.

그렇기에 인터페이스는 동일한 동작으로 하는 클래스, 다중 상속이 필요할 때 사용한다.

추상 클래스

public abstract class Shape
{
    private int _id;

    public Shape(int id)
    {
        _id = id;
    }

    public abstract double Area { get; }
}

public class Square : Shape
{
    private int _side;

    public Square(int id, int side) : base(id)
    {
        _side = side;
    }

    public override double Area
    {
        get { return _side * _side; }
    }
}

public class Circle : Shape
{
    private int _radius;

    public Circle(int id, int radius) : base(id)
    {
        _radius = radius;
    }

    public override double Area
    {
        get { return _radius * _radius * Math.PI; }
    }
}

추상 클래스는 다중상속이 불가능하다.
인터페이스와 다르게 필드와 생성자를 선언할 수 있고
추상 메서드와 일반 메서드를 둘다 선언/ 구현할 수 있다.
또한 추상 메서드는 자식클래스에서 반드시 override로 구현해야한다.

추상 클래스는 공통 로직과 기본 구현이 필요할 때 사용한다.

profile
도전하는 개발자

0개의 댓글