C# - base 키워드

Dev_Jen
|2025. 7. 3. 12:26
반응형

✅ base 키워드란?

자식 클래스에서 부모 클래스의 생성자나 메서드, 필드에 접근할 때 사용하는 키워드


📌 1. 부모 클래스의 메서드 호출할 때

class Parent
{
    public void Speak()
    {
        Console.WriteLine("부모가 말한다");
    }
}

class Child : Parent
{
    public void Say()
    {
        base.Speak(); // 부모의 Speak() 호출
    }
}

📌 2. 부모 생성자 호출

class Parent
{
    public Parent(string name)
    {
        Console.WriteLine($"{name} 생성됨");
    }
}

class Child : Parent
{
    public Child() : base("자식이지만 부모도 초기화") 
    {
        Console.WriteLine("자식 생성자 실행");
    }
}

📌 3. 오버라이드한 메서드 안에서 부모의 원본 호출

class Character
{
    public virtual void Attack()
    {
        Console.WriteLine("기본 공격!");
    }
}

class Warrior : Character
{
    public override void Attack()
    {
        base.Attack(); // 부모의 기본 공격도 같이 실행됨
        Console.WriteLine("검 휘두르기!");
    }
}

💡 언제 쓰는가?

부모의 로직을 확장하고 싶을 때 base.메서드() 호출
부모의 생성자 초기화가 필요한 경우 : base(...) 사용
부모의 기본 동작도 유지하고 싶을 때 오버라이드 안에서 base 사용
 

⚠️ 주의

  • base는 상속 관계에서만 사용 가능
  • 자식이 부모를 가리킬 때만 쓸 수 있음
  • base는 부모 클래스의 "구현된 기능"에 접근할 때 쓰는 거지, 추상 인터페이스에는 직접 쓰지 않음

✅ 한 줄 정리

base는 자식 클래스에서 "부모 클래스의 기능을 호출"할 수 있도록 해주는 키워드야.

 

흠..잘 알겠지만 이건 잘 사용하지 않을듯한 느낌이 든다.. 아직 내가 유니티에서 사용하지 않아봐서 그럴지도 모른다.

그래서 GPT한테 base 키워드에한 중요성을 물어봤다!

 

진짜 좋은 질문이야.
많은 사람이 처음에 base를 보면 “어? 굳이 이걸 꼭 써야 하나?”,
“내가 override 해서 다 재정의하면 되지 않나?” 이런 생각을 해.
근데 실제로는 잘 쓰면 엄청 유용하고, 안 쓰면 부모 클래스 기능을 날려먹을 수 있어.


✅ base의 중요성은 “부모 기능을 이어받되, 추가하거나 확장할 수 있게 해주는 것”이야.


🎯 base를 안 쓰면 생기는 문제

예시: 캐릭터 기본 공격을 무시해버림

class Character
{
    public virtual void Attack()
    {
        Console.WriteLine("기본 공격!");
    }
}

class Warrior : Character
{
    public override void Attack()
    {
        Console.WriteLine("워리어 스킬 발동!");
    }
}
  • 👉 이 경우 기본 공격 출력 안 됨
  • Character의 공격 로직이 완전히 무시됨 → 부모 기능 상실

✅ base를 써서 부모 기능도 유지

class Warrior : Character
{
    public override void Attack()
    {
        base.Attack();  // 부모의 기본 공격 먼저 실행
        Console.WriteLine("워리어 스킬 발동!");
    }
}

➡️ 결과:

 
기본 공격!
워리어 스킬 발동!

✅ → 부모 로직 + 자식 로직이 순차적으로 실행됨 = 기능 확장


🔥 실전에서 base를 잘 쓰는 대표적인 상황

UI 초기화, 애니메이션 제어 부모가 기본 처리 다 해놓고, 자식은 추가 효과만 넣고 싶을 때
MonoBehaviour의 Start(), Update() 재정의 자식에서 base.Start() 호출 안 하면 부모의 Start 로직이 사라짐
디버깅, 추적, 로깅 부모에서 로깅 다 해놓고, 자식이 그 위에 로직 덧붙일 수 있음
템플릿 메서드 패턴 부모의 흐름 유지하면서 일부만 바꿔야 할 때 base로 확장 가능

❗ 안 쓰면 벌어지는 일

  • 부모 클래스의 중요한 로직이 사라짐
  • 자식 클래스가 전체 흐름을 깨뜨려버림
  • 유지보수할 때 “왜 안 되지?”하고 원인을 찾기 어려워짐

✅ 한 줄 정리

base는 **"부모의 로직을 살리면서 자식에서 기능을 확장"**하고 싶을 때 정말 중요한 도구야.

 

오 그래도 이렇게 보니까 base의 기능이나 필요성을 잘 알거같다 나중에 유니티 개발할때 꼭 사용해봐야겠다!

반응형