Menu
Coddy logo textTech

기초 상속 (:) 문법

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#은 단일 상속만을 지원하며, 이는 클래스가 오직 하나의 기본 클래스로부터만 상속받을 수 있음을 의미합니다. 하지만 파생 클래스가 다른 클래스의 기본 클래스가 되는 상속 체인을 구축할 수 있습니다. 이를 통해 코드를 체계적이고 재사용 가능하게 유지하면서 실제 세계의 관계를 모델링하는 계층 구조를 만들 수 있습니다.

challenge icon

챌린지

쉬움

상속을 통해 파생 클래스가 기본 클래스의 기능을 공유하면서 자신만의 고유한 동작을 추가하는 방법을 보여주는 차량 계층 구조를 만들어 보겠습니다.

코드를 정리하기 위해 세 개의 파일을 생성합니다:

  • 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() 호출
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨