[C#] 추상 클래스

자몽이·2025년 7월 15일

C# 문법

목록 보기
3/12
post-thumbnail

추상화에 대한 개념 정리이다

❔추상화란 무엇인가?

추상화란 복잡한 것을 단순하게 표현하는 것이다.
즉, 공통된 특징만 뽑아서 클래스를 설계하는 것이다.


✅ 추상 클래스에 대해

인터페이스와 추상 클래스는 얼핏보면 비슷해 보이지만 다른 구조를 가지고 있다.

추상 클래스 (abstruct)
추상 클래스는 구현이 강제 된다.
필드,생성자, 메소드를 멤버로 가질 수 있다.
인터페이스와 달리 상속은 하나만 가능하다.
즉, 인터페이스는 약속만 하는것이고, 추상 클래스는 일부 구현 + 일부 강제화 된다.


✅ 언제 추상화가 유용한가?

공통기능이 있을 때
여러 클래스에서 비슷한 동작을 공유할 때, 중복을 줄이고 싶을 때 사용한다.
(예시 : 몬스터, 보스 -> 모두 데미지를 받거나 죽는 기능이 필요하다.)


유지보수가 쉬워진다
새로운 오브젝트를 추가할 때, 추상 클래스나 인터페이스 덕분에 코드를 많이 수정할 필요 없다.


유닛 테스트, 의존성 분리에 유리
공격하는 로직만 테스트하고 싶을 때 IAttackable로 분리해두면, 실제 오브젝트 없이도 테스트 가능.


❔ 예시

public abstract class Enemy
{
    public void Move()
    {
        // 공통 이동
        Debug.Log("앞으로 이동!");
    }

    public abstract void Attack();  // 추상 메서드: 자식이 반드시 구현해야 함

    public virtual void Die()
    {
        Debug.Log("기본 죽는 연출");
    }
    
}



public class Orc : Enemy
{
    public override void Attack()  // abstract는 반드시 override
    {
        Debug.Log("도끼로 공격!");
    }

    public override void Die()     // virtual은 선택사항. override 안 해도 OK
    {
        Debug.Log("으악! 으어억!!");
    }
}

virtual 키워드

기본 동작은 있지만 자식이 바꿔도 되는 메소드
즉, 기본은 제공하되 유연성을 주고 싶을 때


예시) Die() 같은 건 대부분 공통되지만, 보스만 특별한 연출 or 플레이어 연출 -> virtual


---요약---

추상화는 "개념"이고, abstract/interface/virtual 은 각각 그걸 실현하는 방법이다.
abstruct는 강제, virtual은 기본제공 + 선택적 재정의로 구분 하면 된다.

profile
개발자가 되는 그 날 까지

2개의 댓글

comment-user-thumbnail
2025년 7월 15일

덕분에 추상화에 대해 더 잘 알게 되었어요!

1개의 답글