생성자 상속하기

    앞에서 알아본 base() 형태를 생성자 상속이라고 합니다. 이번에는 생성자 상속 예제를 만들어 보겠습니다. 다음 내용을 입력한 후 실행해 보세요. 현재 코드는 “부록 A. 디버거 사용하기”를 참고하여 F10을 여러 번 누르면서 단계별로 실행되는 순서를 살펴보면 좀 더 이해하기 쉽습니다.

    생성자 상속: ConstructorInheritance.cs

    using System;
    
    namespace ConstructorInheritance
    {
        public class Parent
        {
            public string Word { get; set; }
            public Parent(string word) //생성자로 속성을 초기화
            {
                this.Word = word;
            }
        }
        
        public class Child : Parent
        {
            //① this() 형태로, 자신의 매개변수가 있는 생성자에 기본 문자열 전달
            public Child() : this("[1] 매개변수가 없는 생성자 실행") { }
    
            //② base() 형태로, 매개변수 값을 부모 클래스의 매개변수가 있는 생성자에 전달
            public Child(string message) : base(message) { }
            public void Say() => Console.WriteLine(base.Word); //부모의 World 속성 출력
        }
    
        class ConstructorInheritance
        {
            static void Main()
            {
                (new Child()).Say();
                (new Child("[2] 매개변수가 있는 생성자 실행")).Say();
            }
        }
    }

    실행 결과

    [1] 매개변수가 없는 생성자 실행
    [2] 매개변수가 있는 생성자 실행

    클래스 내에서 this()는 자신의 매개변수가 없는 생성자를 의미합니다. 또 this(매개변수)는 매개변수가 있는 생성자를 호출합니다.

    은 매개변수가 없는 생성자가 호출되면 기본값으로 자신의 매개변수가 있는 생성자를 호출합니다.

    는 매개변수가 있는 생성자에서 받은 message 변수 값을 다시 부모 클래스의 생성자를 가리키는 base(message)를 호출하여 부모 생성자에 전달합니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.