✅ 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의 기능이나 필요성을 잘 알거같다 나중에 유니티 개발할때 꼭 사용해봐야겠다!
'C#' 카테고리의 다른 글
| C# - Object Type(오브젝트 타입) & Object Memori(오브젝트 메모리 설명) (3) | 2025.07.04 |
|---|---|
| C# - Parent obj = new Child(); 메모리는 어떻게 될까? & 다형성 (1) | 2025.07.03 |
| C# - Class Inheritance(클래스 상속)& Interface(인터페이스) vs abstract Class (1) | 2025.07.03 |
| C# - Virtual & abstract (0) | 2025.07.03 |
| C# - 자료구조 (1) | 2025.07.02 |

