게임개발/스터디

[스터디] 인터페이스 vs 추상 클래스 차이

감물 2024. 5. 12. 17:10

인터페이스와 추상 클래스는 객체 지향 프로그래밍의 중요한 구성 요소이다. 각각은 특정 상황에 맞게 사용될 때 가장 큰 효과를 발휘할 수 있으며, 코드의 유연성, 확장성 및 유지 관리 용이성을 향상시키는 데 도움이 된다.

 

1. 인터페이스(Interface)

모든 메서스가 추상 메서드인 특수한 형태의 클래스로, 구체적인 구현을 포함하지 않고 메서드의 시그니처만을 정의한다.

 

* 특징

- 멤버 변수를 가질 수 없다(C# 8.0 부터는 default 구현을 가진 메소드와 속성도 허용).

- 하나의 클래스가 여러 인터페이스를 구현할 수 있다. 

- 메서드의 선언(시그니처)만 제공하며, 각 메서드의 구현은 인터페이스를 구현하는 클래스에서 제공해야 한다.

 

* 언제 사용하는지?

- 여러 클래스 간에 공통된 동작을 정의하지만, 클래스의 구현이 다를 때 사용한다.

- 서로 관련이 없는 클래스들이 동일한 메서드를 구현하도록 강제하고 싶을 때 유용.

- 다중 상속의 효과를 얻고 싶을 때 사용.

 

* 예시

다양한 종류의 적 캐릭터가 공격하는 방식을 정의할 때, IAttackable 인터페이스를 사용하여 Attack 메서드를 정의할 수 있다.

 

public interface IAttackable
{
    void Attack();
}

public class Zombie : MonoBehaviour, IAttackable
{
    public void Attack()
    {
        Debug.Log("Zombie attacks!");
    }
}

public class Alien : MonoBehaviour, IAttackable
{
    public void Attack()
    {
        Debug.Log("Alien shoots!");
    }
}

 

 

2. 추상 클래스(Abstract Class)

하나 이상의 추상 메서드(구현이 없는 메서드)를 포함할 수 있는 클래스이다. 또한, 구현된 메서드도 포함할 수 있다.

 

* 특징

- 직접 인스턴스화할 수 없다.

- 추상 메서드 외에도 멤버 변수 및 구현된 메서드를 포함할 수 있다.

- 다른 클래스가 추상 클래스를 상속받아 구현을 완성해야 한다.

- 단일 상속을 따른다.

 

* 언제 사용하는지?

- 여러 클래스에서 공통적으로 사용할 기본 동작이나 상태를 코드로 정의하고 싶을 때 사용.

- 코드 재사용을 증가시키고, 기본 기능을 정의하면서도 일부 메서드는 상속받은 클래스에서 구현하도록 하고 싶을 때 적합.

 

* 예시

Enemy라는 추상 클래스를 만들어, 모든 적이 공통적으로 가져야 하는 속성과 메서드를 정의하고, 일부 메서드는 구현을 강제할 수 있다.

 

public abstract class Enemy : MonoBehaviour
{
    public float health;

    public abstract void Attack();

    public void Die()
    {
        Debug.Log("Enemy dies.");
    }
}

public class Goblin : Enemy
{
    public override void Attack()
    {
        Debug.Log("Goblin attacks with a club.");
    }
}

 

 

* 결론

- 인터페이스는 다양한 클래스가 동일한 메서드를 다른 방식으로 구현해야 할 때, 그리고 여러 구현을 갖는 다중 상속이 필요할 때 적합하다.

- 추상 클래스는 공통의 기본 기능을 제공하고, 상속받는 클래스에게 특정 메서드의 구현을 강제하고 싶을 때 사용한다.

 

 

'게임개발 > 스터디' 카테고리의 다른 글

[스터디] GC란?  (0) 2024.05.12
[스터디] 코루틴이란?  (0) 2024.05.12
[스터디] UI관련 최적화 한 것  (0) 2024.05.12
[스터디] 팩토리 패턴이란?  (0) 2024.05.12
[스터디] 부동소수점 오차가 나는 이유  (0) 2024.05.11