Menu
Coddy logo textTech

'base' 키워드

Coddy C# 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 70개 중 20번째.

파생 클래스가 기본 클래스로부터 상속받을 때, 부모의 멤버에 직접 접근해야 하는 경우가 자주 있습니다. base 키워드는 이러한 연결을 제공하여, 기본 클래스 생성자를 호출하거나 해당 메서드 및 속성에 접근할 수 있도록 해줍니다.

base의 가장 일반적인 용도는 부모의 생성자를 호출하는 것입니다. 파생 객체를 생성할 때, 기초 클래스로 값을 전달할 수 있습니다:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

: base(name) 구문은 Dog 생성자 본문이 실행되기 전에 Animal 생성자를 호출합니다. 이는 기본 클래스가 먼저 적절하게 초기화되도록 보장합니다.

또한 파생 클래스 내에서 부모 메서드를 호출하기 위해 base를 사용할 수 있습니다:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Animal의 Speak를 호출합니다
        Console.WriteLine("Woof!");
    }
}

여기서 base.Speak()는 부모 버전의 메서드를 명시적으로 호출합니다. 이는 부모의 동작을 완전히 대체하기보다는 확장하고 싶을 때 유용합니다.

challenge icon

챌린지

쉬움

파생 클래스가 base 키워드를 사용하여 부모 클래스를 올바르게 초기화하고 상속된 동작을 확장하는 방법을 보여주는 제품 인벤토리 시스템을 구축해 보겠습니다.

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

  • Product.cs: Inventory 네임스페이스에 Product 클래스를 정의합니다. 이 기본 클래스는 Name 속성(string)과 Price 속성(decimal)을 가진 모든 제품을 나타냅니다. 두 값을 모두 받는 생성자와 "{Name}: ${Price}"를 반환하는 GetInfo() 메서드를 포함하세요.
  • ElectronicProduct.cs: Product를 상속받는 ElectronicProduct 클래스를 Inventory 네임스페이스에 정의합니다. 이 클래스는 WarrantyMonths 속성(int)을 추가합니다. 생성자는 이름, 가격, 보증 기간을 인자로 받아야 하며, base를 사용하여 이름과 가격을 부모 생성자에 전달해야 합니다. 먼저 base를 사용하여 부모의 GetInfo()를 호출한 다음, 출력 내용을 확장하기 위해 " (Warranty: {WarrantyMonths} months)"를 덧붙이는 GetInfo() 메서드를 만드세요.
  • Program.cs: 메인 파일에서 입력 값을 사용하여 ElectronicProduct를 생성하고 GetInfo()를 호출하여 전체 정보를 표시합니다.

세 가지 입력을 받게 됩니다:

  • 제품 이름
  • 가격
  • 보증 기간(월)

전자 제품에 대해 GetInfo()를 호출한 결과를 출력하세요.

예를 들어, 입력값이 Laptop, 999.99, 24라면 출력은 다음과 같아야 합니다:

Laptop: $999.99 (Warranty: 24 months)

파생 클래스가 로직을 중복하는 대신 기본 클래스의 출력을 어떻게 활용하는지 확인해 보세요. base 키워드를 사용하면 부모의 동작을 원활하게 재사용하고 확장할 수 있습니다!

치트 시트

base 키워드를 사용하면 파생 클래스에서 부모 클래스의 멤버에 접근할 수 있습니다.

부모 클래스의 생성자를 호출하려면 base를 사용하세요:

public class Animal
{
    public string Name { get; set; }
    
    public Animal(string name)
    {
        Name = name;
    }
}

public class Dog : Animal
{
    public string Breed { get; set; }
    
    public Dog(string name, string breed) : base(name)
    {
        Breed = breed;
    }
}

: base(name) 구문은 파생 클래스의 생성자 본문이 실행되기 전에 부모 생성자를 호출하여 적절한 초기화를 보장합니다.

파생 클래스에서 부모 메서드를 호출하려면 base를 사용하세요:

public class Animal
{
    public void Speak()
    {
        Console.WriteLine("Animal sound");
    }
}

public class Dog : Animal
{
    public void Speak()
    {
        base.Speak();  // Animal의 Speak를 호출합니다
        Console.WriteLine("Woof!");
    }
}

이를 통해 부모의 동작을 완전히 대체하는 대신 확장할 수 있습니다.

직접 해보기

using System;
using Inventory;

class Program
{
    public static void Main(string[] args)
    {
        // 입력값 읽기
        string name = Console.ReadLine();
        decimal price = Convert.ToDecimal(Console.ReadLine());
        int warrantyMonths = Convert.ToInt32(Console.ReadLine());

        // TODO: 입력된 값들로 ElectronicProduct 객체를 생성하세요
        
        // TODO: 생성한 전자 제품 객체의 GetInfo() 호출 결과를 출력하세요
        
    }
}
quiz icon실력 점검

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

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