상속

  • 기본 클래스의 기능을 물려받아
    새로운 클래스(파생 클래스)를 만드는 기능

  • 상속은 재사용성을 높이고 유지보수를 쉽게 할 수 있다.

공통적으로 쓰는 부분은 기본 클래스에 저장

다양한 클래스들을 생성하고

기본 클래스의 내용을 가져와 상황에 맞게 수정 가능

public class Enemy
{
    public void Move()
    {
        Console.WriteLine("두발로 걸어갑니다")
    }
}

public class Zealot : Enemy
{ }

public class Zergling : Enemy
{
    public void Move()
    {
        Console.WriteLine("네발로 뛰어갑니다");
    }
}

출력
두발로 걸어갑니다
네발로 뛰어갑니다

가상 메서드 (virtual)

  • 기본 클래스에서 기본 구현 제공 가능

  • 파생 클래스에서 override 가능

  • ✅ 아이템 사용(Use)과 같이 기본 동작이 있지만 일부 아이템은 특수 효과가 필요할 때

  • ✅ 캐릭터 피해 계산(TakeDamage)처럼 공통 로직이 있으면서 특정 캐릭터 타입에서 방어력 등을 고려해야 할 때

class Enemy
{
    public virtual void Move()
    {
        Console.WriteLine("두발로 걸어갑니다");
    }
}

class Zergling : Enemy
{
    public override void Move()
    {
        Console.WriteLine("네발로 뛰어갑니다");
    }
}

Enemy player = new Zergling ();
player.Move(); // 네발로 뛰어갑니다"

출력
네발로 뛰어갑니다

부모 클래스에서 virtual로 정의한 메서드를 선언

자식 클래스에서 override를 통해 두발로 걷는게 아닌
"네발로 뛰어갑니다" 를 출력한다.

부모 클래스에서 가져오지만 수정하여 사용 가능

virtual 키워드

메서드, 속성, 이벤트 선언 시 사용되며,

자식 클래스에서 해당 멤버의 동작 방식을

재정의(override)할 수 있도록 허용하는 역할

메서드 오버라이딩(Method Overriding)

부모 클래스에서 정의한 메서드를 자식 클래스에서 재정의 하는 것

이를 통해 다형성을 구현

추상 메서드 (abstract)

  • 기본 클래스에서 구현 없이 선언만
  • 파생 클래스는 반드시 override해서 구현해야 함
  • 추상 클래스 (abstract class)에서만 선언 가능
  • 인스턴스화 불가능
  • ✅ 각 무기의 공격 방식(Attack)처럼 동작이 완전히 다르고 공통 구현이 의미 없을 때
  • ✅ 모든 파생 클래스에서 반드시 구현해야 하는 핵심 기능을 강제하고 싶을 때

이런 종류의 기능은 있어야 해!"라고 약속만 해두고,
구체적으로 어떻게 할지는 너희들이 알아서 정해 라는 느낌

이 코드를 예시로 들자면 Enemy(부모 클래스)에서 move를 메서드를 만들지만 내용이 없다. (가상 메서드랑 비교하면 이해됨)

Zergling(자식 클래스)에서 move 메서드를 상속받아 안의 내용을 작성한다.

    public abstract class Enemy
    {
        public abstract void Move();
    }

    public class Zergling : Enemy
    {
        public override void Move()
        {
            Console.WriteLine("네발로 뛰어갑니다");
        }
    }


    public class asd
    {
        public static void Main(string[] args)
        {
            Enemy player = new Zergling();
            player.Move(); // 네발로 뛰어갑니다"

        }
    }
    
출력
네발로 뛰어갑니다

0개의 댓글