상속(Inheritance)은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 기존 클래스의 멤버를 새로운 클래스가 물려받아 재사용할 수 있게 해줍니다. 이번 글에서는 그중 가장 기본적인 형태인 단일 상속(Single Inheritance)을 C# 코드 예제를 통해 살펴보겠습니다.
단일 상속이란 하나의 파생 클래스(자식 클래스)가 오직 하나의 기본 클래스(부모 클래스)만을 상속받는 구조를 의미합니다.
기본 클래스(Father) 선언
먼저 상속을 해주는 기본 클래스인 Father를 아래와 같이 선언합니다. 이 클래스에는 Display() 메서드 하나가 정의되어 있습니다.
class Father {
public void Display() {
Console.WriteLine("Display");
}
}파생 클래스(Son) 선언
다음으로 Father 클래스를 상속받는 파생 클래스 Son을 선언합니다. 콜론(:) 기호를 사용하여 상속 관계를 표현하며, Son 클래스는 부모의 모든 public 멤버를 물려받습니다.
class Son : Father {
public void DisplayOne() {
Console.WriteLine("DisplayOne");
}
}전체 예제 코드
아래는 C#에서 단일 상속을 구현한 완전한 예제입니다. Main 메서드 안에서 각 클래스의 객체를 생성하고 메서드를 호출하는 방식으로 동작을 확인할 수 있습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace MyAplication {
class Demo {
static void Main(string[] args) {
// Father 클래스 객체 생성 및 호출
Father f = new Father();
f.Display();
// Son 클래스 객체 생성 및 호출
Son s = new Son();
s.Display(); // 부모 클래스의 메서드 호출 가능
s.DisplayOne(); // 자신의 메서드 호출
Console.ReadKey();
}
class Father {
public void Display() {
Console.WriteLine("Display");
}
}
class Son : Father {
public void DisplayOne() {
Console.WriteLine("DisplayOne");
}
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.
Display Display DisplayOne
코드 설명
출력 결과를 보면 Son 객체인 s를 통해 부모 클래스의 Display() 메서드도 정상적으로 호출된 것을 알 수 있습니다. 이것이 바로 상속의 핵심입니다. 파생 클래스는 별도의 구현 없이도 기본 클래스의 접근 가능한(public) 멤버를 그대로 사용할 수 있습니다.
정리하면 다음과 같습니다.
- Father: 기본 클래스(부모)로,
Display()메서드를 정의 - Son: 파생 클래스(자식)로,
Father를 상속받아DisplayOne()메서드 추가 - Son 객체는 자신의 메서드뿐 아니라 부모의 메서드도 호출 가능
C#은 다중 상속(여러 클래스를 동시에 상속)을 클래스에 대해서는 허용하지 않으며, 단일 상속만 지원합니다. 다만 인터페이스(interface)를 활용하면 여러 인터페이스를 구현하는 방식으로 다중 상속과 유사한 효과를 얻을 수 있습니다.