C# 계층적 상속이란?
계층적 상속(Hierarchical Inheritance)은 하나의 기본 클래스(Base Class)로부터 둘 이상의 파생 클래스(Derived Class)가 동시에 상속을 받는 구조를 말합니다. 마치 한 부모에게서 여러 자식이 태어나는 것처럼, 하나의 부모 클래스가 여러 자식 클래스에게 자신의 멤버를 물려주는 형태입니다.
이러한 구조는 공통 기능을 하나의 기본 클래스에 모아두고, 각 파생 클래스가 필요한 기능을 추가로 확장할 수 있게 해주므로 코드의 재사용성과 유지보수성을 크게 높여줍니다.
기본 클래스(Father) 정의하기
이번 예제에서는 Father 클래스를 기본 클래스로 사용하겠습니다. Father 클래스에는 간단한 메시지를 출력하는 display() 메서드가 포함되어 있습니다.
class Father {
public void display() {
Console.WriteLine("Display...");
}
}파생 클래스(Son, Daughter) 추가하기
이제 Father 클래스를 상속받는 두 개의 파생 클래스인 Son과 Daughter를 만들어 보겠습니다. C#에서는 콜론(:) 기호를 사용하여 상속 관계를 표현합니다.
Son 클래스
class Son : Father {
public void displayOne() {
Console.WriteLine("Display One");
}
}Daughter 클래스
class Daughter : Father {
public void displayTwo() {
Console.WriteLine("Display Two");
}
}Son과 Daughter는 각각 Father의 display() 메서드를 물려받으면서, 자신만의 고유한 메서드(displayOne(), displayTwo())를 추가로 가지고 있습니다. 이것이 바로 계층적 상속의 핵심입니다.
전체 예제 코드
다음은 지금까지 설명한 내용을 모두 합친 C# 계층적 상속의 완전한 예제입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Inheritance {
class Test {
static void Main(string[] args) {
// 기본 클래스 객체 생성
Father f = new Father();
f.display();
// Son 객체 생성 - 상속받은 메서드와 고유 메서드 호출
Son s = new Son();
s.display();
s.displayOne();
// Daughter 객체 생성 - 상속받은 메서드와 고유 메서드 호출
Daughter d = new Daughter();
d.display();
d.displayTwo();
Console.ReadKey();
}
// 기본 클래스
class Father {
public void display() {
Console.WriteLine("Display...");
}
}
// 파생 클래스 1
class Son : Father {
public void displayOne() {
Console.WriteLine("Display One");
}
}
// 파생 클래스 2
class Daughter : Father {
public void displayTwo() {
Console.WriteLine("Display Two");
}
}
}
}
실행 결과
Display...
Display...
Display One
Display...
Display Two
예제 코드 분석
위 코드의 실행 흐름을 살펴보면 다음과 같습니다.
1. Father 객체 생성: Father 클래스의 인스턴스를 만들어 display() 메서드를 호출하면 "Display..."가 출력됩니다.
2. Son 객체 생성: Son 클래스는 Father를 상속했기 때문에, Son 객체에서도 부모의 display() 메서드를 그대로 호출할 수 있습니다. 동시에 Son만의 고유한 displayOne() 메서드도 사용 가능합니다.
3. Daughter 객체 생성: 마찬가지로 Daughter 객체 역시 Father로부터 상속받은 display() 메서드와 자신만의 displayTwo() 메서드를 모두 사용할 수 있습니다.
계층적 상속의 장점
계층적 상속을 활용하면 다음과 같은 이점을 얻을 수 있습니다.
코드 재사용성 향상: 공통 기능을 기본 클래스에 한 번만 작성하면, 모든 파생 클래스가 이를 재사용할 수 있어 중복 코드가 줄어듭니다.
유지보수 용이성: 공통 로직에 수정 사항이 생기면 기본 클래스만 변경하면 되므로, 여러 곳을 일일이 수정할 필요가 없습니다.
명확한 구조 설계: 클래스 간의 관계가 계층 구조로 표현되어 프로그램의 전체적인 설계를 한눈에 파악하기 쉽습니다.
마무리
이번 글에서는 C#의 계층적 상속 개념을 Father, Son, Daughter 클래스 예제를 통해 알아보았습니다. 하나의 기본 클래스에서 여러 파생 클래스가 상속받는 이 구조는 실무에서도 매우 널리 활용되는 패턴이니, 직접 코드를 작성해 보며 익혀보시기 바랍니다.