'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()는 부모 버전의 메서드를 명시적으로 호출합니다. 이는 부모의 동작을 완전히 대체하기보다는 확장하고 싶을 때 유용합니다.
챌린지
쉬움파생 클래스가 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() 호출 결과를 출력하세요
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.