기본 패턴
csharp
public class Animal
{
public virtual void Speak() => Console.WriteLine("...");
}
public class Dog : Animal
{
public override void Speak() => Console.WriteLine("Woof");
}설명
- 상속은 공통 인터페이스와 기본 동작을 부모 클래스에 두고, 자식 클래스가 세부 구현을 바꾸게 합니다.
- 부모의 메서드를 재정의하려면
virtual, 자식에서는override를 사용합니다. - 자식 타입은 부모 타입으로 취급될 수 있으므로 다형성 기반 설계가 가능합니다.
- 단순 코드 재사용만을 위해 상속을 남용하면 클래스 계층이 복잡해질 수 있습니다.
짧은 예제
csharp
Animal[] animals =
{
new Animal(),
new Dog()
};
foreach (Animal animal in animals)
{
animal.Speak();
}빠른 정리
| 항목 | 설명 |
|---|---|
: | 상속 선언 |
virtual | 부모에서 재정의 가능하도록 열어 둠 |
override | 자식에서 재정의 |
| 다형성 | 부모 타입으로 여러 자식 타입을 다룸 |
base | 부모 구현이나 생성자에 접근 |
주의할 점
상속은 "is-a" 관계가 분명할 때 더 잘 맞습니다. 단지 기능 몇 개를 재사용하고 싶다는 이유만으로는 합성이나 인터페이스가 더 나을 수 있습니다.