C#에서 상속(Inheritance)이란?
상속(Inheritance)은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 하나의 클래스를 다른 클래스를 기반으로 정의할 수 있게 해주는 기능입니다. 상속을 활용하면 애플리케이션을 더 쉽게 만들고 유지보수할 수 있으며, 이미 작성된 코드의 기능을 재사용할 수 있어 개발 시간도 크게 단축됩니다.
상속은 기본 클래스(Base Class)와 파생 클래스(Derived Class)라는 두 가지 개념을 바탕으로 동작합니다. 파생 클래스는 기본 클래스의 필드(데이터)와 메서드(함수)를 물려받아 그대로 사용하거나, 필요에 따라 새로운 기능을 추가해 확장할 수 있습니다.
참고로 C#에서는 하나의 클래스가 여러 클래스를 동시에 상속하는 다중 상속은 지원되지 않으며, 오직 하나의 기본 클래스만 상속받을 수 있습니다. 대신 인터페이스(interface)는 여러 개를 동시에 구현할 수 있어, 다중 상속이 주는 이점을 상당 부분 대체할 수 있습니다.
기본 클래스와 파생 클래스 문법
파생 클래스를 선언할 때는 콜론(:) 기호를 사용하여 상속받을 기본 클래스를 지정합니다. 아래 예시에서 Shape는 기본 클래스이고, Rectangle은 이를 상속받는 파생 클래스입니다.
class Rectangle : Shape {
// 메서드
}
상속 예제
다음은 C#에서 기본 클래스와 파생 클래스를 함께 사용하는 방법을 보여주는 완전한 예제입니다. Shape 클래스는 너비와 높이를 설정하는 메서드를 제공하고, 이를 상속받은 Rectangle 클래스는 상속받은 멤버들을 활용해 사각형의 넓이를 계산합니다.
using System;
namespace InheritanceApplication {
class Shape {
public void setWidth(int w) {
width = w;
}
public void setHeight(int h) {
height = h;
}
protected int width;
protected int height;
}
// 파생 클래스
class Rectangle : Shape {
public int getArea() {
return (width * height);
}
}
class RectangleTester {
static void Main(string[] args) {
Rectangle Rect = new Rectangle();
Rect.setWidth(5);
Rect.setHeight(7);
// 객체의 넓이 출력
Console.WriteLine("Total area: {0}", Rect.getArea());
Console.ReadKey();
}
}
}
코드 설명
Shape클래스의width와height필드는protected로 선언되어, 외부에서는 접근할 수 없지만 이를 상속받은Rectangle클래스 내부에서는 자유롭게 사용할 수 있습니다.Rectangle클래스는 별도로 너비와 높이를 저장하는 코드 없이, 기본 클래스의setWidth()와setHeight()메서드를 그대로 호출하여 사용합니다.Main메서드에서는 너비 5, 높이 7을 설정한 뒤getArea()를 호출해 넓이를 계산하고 콘솔에 출력합니다.
실행 결과
Total area: 35
위 결과에서 확인할 수 있듯이, 파생 클래스인 Rectangle은 기본 클래스 Shape의 모든 기능을 물려받아 문제없이 동작합니다. 이처럼 상속을 잘 활용하면 중복 코드를 줄이고, 구조적이며 유지보수하기 좋은 프로그램을 작성할 수 있습니다.