기초 상속 (:) 문법
Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 19번째.
상속은 한 클래스가 다른 클래스의 속성과 메서드를 획득할 수 있게 해줍니다. 동일한 코드를 다시 작성하는 대신, 공유 기능을 가진 기본 클래스(부모)를 만든 다음, 이를 상속받는 파생 클래스(자식)를 만듭니다.
C#에서 상속을 나타내려면 콜론 : 기호를 사용합니다:
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}Dog 클래스는 Animal로부터 모든 것을 상속받습니다. Name 속성과 Eat() 메서드를 다시 선언하지 않고도 접근할 수 있으며, 여기에 자체적인 Bark() 메서드를 추가합니다:
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // 출력: Buddy is eating.
myDog.Bark(); // 출력: Buddy says Woof!C#은 단일 상속만을 지원하며, 이는 클래스가 오직 하나의 기본 클래스로부터만 상속받을 수 있음을 의미합니다. 하지만 파생 클래스가 다른 클래스의 기본 클래스가 되는 상속 체인을 구축할 수 있습니다. 이를 통해 코드를 체계적이고 재사용 가능하게 유지하면서 실제 세계의 관계를 모델링하는 계층 구조를 만들 수 있습니다.
챌린지
쉬움상속을 통해 파생 클래스가 기본 클래스의 기능을 공유하면서 자신만의 고유한 동작을 추가하는 방법을 보여주는 차량 계층 구조를 만들어 보겠습니다.
코드를 정리하기 위해 세 개의 파일을 생성합니다:
Vehicle.cs:Transport네임스페이스에Vehicle클래스를 정의합니다. 이것은 모든 차량이 공유하는 기본 클래스가 됩니다. 이 클래스는Brand속성(string)과Year속성(int)을 가져야 하며,"{Brand} engine started."를 출력하는StartEngine()메서드를 포함해야 합니다.Car.cs:Vehicle을 상속받는Car클래스를Transport네임스페이스에 정의합니다. 자동차는 자신만의 속성인NumberOfDoors(int)와"{Brand} goes Beep Beep!"을 출력하는Honk()메서드를 추가합니다.Program.cs: 메인 파일에서 입력값을 사용하여Car인스턴스를 생성합니다. 상속받은 속성을 포함하여 속성들을 설정한 다음, 자동차가 자신의 메서드와Vehicle로부터 상속받은 메서드를 모두 사용할 수 있음을 보여줍니다.
세 가지 입력을 받게 됩니다:
- Brand name
- Year
- Number of doors
자동차의 정보를 출력하고 다음 형식으로 그 기능을 보여주세요:
Car: {Brand} ({Year})
Doors: {NumberOfDoors}
{StartEngine output}
{Honk output}예를 들어, 입력값이 Toyota, 2022, 4라면 출력은 다음과 같아야 합니다:
Car: Toyota (2022)
Doors: 4
Toyota engine started.
Toyota goes Beep Beep!Car 클래스가 Vehicle에 정의되어 있음에도 불구하고 Brand 속성과 StartEngine() 메서드에 어떻게 접근할 수 있는지 확인해 보세요. 이것이 바로 상속의 힘입니다. 파생 클래스는 기본 클래스로부터 모든 것을 자동으로 물려받습니다!
치트 시트
상속을 사용하면 콜론 : 기호를 사용하여 한 클래스가 다른 클래스의 속성과 메서드를 물려받을 수 있습니다:
public class Animal
{
public string Name { get; set; }
public void Eat()
{
Console.WriteLine($"{Name} is eating.");
}
}
public class Dog : Animal
{
public void Bark()
{
Console.WriteLine($"{Name} says Woof!");
}
}파생 클래스(Dog)는 기본 클래스(Animal)의 모든 속성과 메서드를 상속받으며, 여기에 고유한 기능을 추가할 수 있습니다:
Dog myDog = new Dog();
myDog.Name = "Buddy";
myDog.Eat(); // 상속된 메서드
myDog.Bark(); // 자체 메서드C#은 단일 상속만을 지원합니다. 즉, 하나의 클래스는 오직 하나의 기본 클래스로부터만 상속받을 수 있습니다. 하지만 상속 체인을 만들어 계층 구조를 형성할 수 있습니다.
직접 해보기
using System;
using Transport;
class Program
{
public static void Main(string[] args)
{
// 입력 읽기
string brand = Console.ReadLine();
int year = Convert.ToInt32(Console.ReadLine());
int doors = Convert.ToInt32(Console.ReadLine());
// TODO: Car 인스턴스 생성
// TODO: 자동차 속성 설정 (Brand, Year, NumberOfDoors)
// TODO: 요구된 형식으로 자동차 정보 출력:
// Car: {Brand} ({Year})
// Doors: {NumberOfDoors}
// 그 다음 StartEngine()과 Honk() 호출
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.