C# 클래스 확장: 상속, 오버라이딩, 추상 클래스, 인터페이스
이번 글에서는 C#의 상속을 통한 클래스 확장 방법과 다형성에 대해 알아보겠습니다. 객체 지향 프로그래밍에서 중요한 개념인 상속과 다형성은 코드의 재사용성과 확장성을 향상시키는 데 큰 역할을 합니다.
1. 상속의 기본 개념
상속은 객체 지향 프로그래밍에서 한 클래스의 속성과 메서드를 다른 클래스가 물려받는 기능을 의미합니다. 이를 통해 기존의 코드 재사용성을 높이고, 클래스 간의 계층적 관계를 표현할 수 있습니다.
// 기본 클래스 (Base Class)
class Animal
{
// 공용 메서드
public void Eat()
{
Console.WriteLine("The animal eats.");
}
}
// Dog 클래스는 Animal 클래스를 상속받는 파생 클래스
class Dog : Animal
{
// Dog 클래스만의 특정 메서드
public void Bark()
{
Console.WriteLine("The dog barks.");
}
}
▶ 위 코드에서 Dog 클래스는 Animal 클래스를 상속받아 Eat 메서드를 사용할 수 있습니다.
2. 오버라이딩과 다형성
오버라이딩은 상속받은 메서드를 파생 클래스에서 재정의하는 것을 의미합니다. 다형성은 하나의 인터페이스나 클래스가 여러 형태로 동작할 수 있게 하는 기능입니다. 오버라이딩은 다형성의 중요한 부분입니다.
// 기본 클래스 (Base Class)
class Animal
{
// 가상 메서드: 파생 클래스에서 오버라이드 가능
public virtual void Speak()
{
Console.WriteLine("The animal speaks.");
}
}
// Dog 클래스는 Animal 클래스를 상속받음
class Dog : Animal
{
// Speak 메서드를 오버라이드하여 개 특성에 맞게 재정의
public override void Speak()
{
Console.WriteLine("The dog barks.");
}
}
// Cat 클래스는 Animal 클래스를 상속받음
class Cat : Animal
{
// Speak 메서드를 오버라이드하여 고양이 특성에 맞게 재정의
public override void Speak()
{
Console.WriteLine("The cat meows.");
}
}
▶ 위 코드에서 Animal 클래스의 Speak 메서드는 virtual 키워드를 사용하여 오버라이딩될 수 있음을 나타냅니다. Dog와 Cat 클래스에서는 Speak 메서드를 오버라이드하여 각각의 동물의 소리를 출력합니다.
3. 추상 클래스와 인터페이스의 이해
추상 클래스는 인스턴스화 될 수 없는 클래스를 의미합니다. 이 클래스는 기본 구현을 제공하면서 파생 클래스에서 반드시 구현되어야 하는 메서드를 정의할 수 있습니다. 인터페이스는 구현을 가지지 않은 메서드와 속성만 정의할 수 있는 타입입니다.
// 추상 클래스: 인스턴스화할 수 없으며 파생 클래스에게 구현을 강제함
abstract class AbstractAnimal
{
// 추상 메서드: 본체가 없으며 파생 클래스에서 반드시 구현해야 함
public abstract void Speak();
}
// Lion 클래스는 추상 클래스 AbstractAnimal을 상속받음
class Lion : AbstractAnimal
{
// 추상 메서드 Speak의 구현
public override void Speak()
{
Console.WriteLine("The lion roars.");
}
}
// 인터페이스: 계약의 역할을 함. 클래스는 여러 인터페이스를 구현할 수 있음
interface IEatable
{
// 인터페이스의 메서드는 본체가 없으며 구현 클래스에서 반드시 구현해야 함
void Eat();
}
// Horse 클래스는 IEatable 인터페이스를 구현함
class Horse : IEatable
{
// IEatable 인터페이스의 Eat 메서드 구현
public void Eat()
{
Console.WriteLine("The horse eats grass.");
}
}
▶ 위 코드에서 AbstractAnimal은 추상 클래스로, Speak 메서드는 파생 클래스에서 반드시 구현되어야 합니다. Horse 클래스는 IEatable 인터페이스를 구현하며, Eat 메서드를 정의합니다.
▶ 상속과 다형성은 C# 프로그래밍의 중심적인 개념 중 하나입니다. 이를 잘 이해하고 활용하면 코드의 유연성과 재사용성을 크게 향상시킬 수 있습니다.
참고자료
- Microsoft 공식 문서: 클래스 (C# 프로그래밍 가이드)
함께 보면 좋은 이전 게시글
- C# 클래스 정의하기: 멤버 변수, 속성, 생성자, 메서드 소개
- C# 객체 생성 및 활용: 초기화부터 가비지 컬렉션까지
- C# 메서드 오버로딩의 기본 개념 및 사용 예제
- C# 확장 메서드 활용 및 사용 예제
- C# 열거형 고급 활용: 플래그와 연산
이 글이 도움이 되셨다면 공유 부탁 드립니다.