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