47.6 클래스의 멤버 종합 연습: 자동차 클래스 구현하기

    이번에는 자동차 클래스를 만들고 클래스의 주요 멤버를 모두 사용하는 예제를 작성하면서 전체 키워드를 정리하는 연습을 하겠습니다. 코드에 있는 #region#endregion은 예제 다음 단락에서 바로 이어서 설명할 것입니다. 소멸자 내용을 보려면 닷넷 프레임워크(.NET Framework) 기반으로 콘솔 앱을 만드세요. 일단 다음 내용을 입력한 후 실행해 보세요.

    자동차 클래스 구현: CarWorld.cs

    using System;
    using System.Collections;
    
    /*
    *① 네임스페이스: 클래스 이름 충돌 방지
    */
    namespace CarWorld
    {
        //② 인터페이스: 표준, 다중 상속
        interface IStandard { void Run(); }
    
        ///<summary>
        ///③ 클래스: 설계도
        ///</summary>
        class Car : IStandard
        {
            #region ④ 필드: Private Member Variables
            private string name;                       //필드: 부품
            private string[] names;                   //배열형 필드
            private readonly int _Length;              //읽기 전용 필드
            #endregion
    
            #region ⑤ 생성자: Constructors
            public Car()
            {
                this.name = "좋은차";                  //필드를 기본값으로 초기화
            }
            public Car(string name)                    //생성자: 시동, 필드 초기화
            {
                this.name = name;
            }
                public Car(int length)
            {
                this.Name = "좋은차";
                _Length = length;                     //읽기 전용 필드는 생성자로 초기화 가능
                names = new string[length];           //넘어온 값으로 요소 생성
            }
            #endregion
    
            #region ⑥ 메서드: Public Methods
            //메서드: 기능/동작
            public void Run() => Console.WriteLine("{0} 자동차가 달립니다.", name);
            #endregion
    
            #region ⑦ 속성: Public Properties
            public string Name                        //속성: private 필드 -> 외부 공개
            {
                get { return name; }
                set { name = value; }
            }
            public int Length { get { return _Length; } }
            #endregion
    
            #region ⑧ 소멸자: Destructor
            ~Car()                                    //소멸자: 폐차, 만들어진 객체가 소멸될 때
            {
                Console.WriteLine("{0} 자동차가 폐차됨.", name);
            }
            #endregion
    
            #region ⑨ 인덱서: Indexer
            public string this[int index]              //인덱서: 카탈로그화
            {
                get { return names[index]; }
                set { names[index] = value; }
            }
            #endregion
    
            #region ⑩ 이터레이터: Iterators
            public IEnumerator GetEnumerator()    //반복기
            {
                for (int i = 0; i < _Length; i++)
                {
                    yield return names[i];
                }
            }
            #endregion
    
            #region ⑪ 대리자: Public Delegates
            public delegate void EventHandler(); //대리자: 다중 메서드 호출
            #endregion
    
            #region ⑫ 이벤트: Public Events
            public event EventHandler Click;     //이벤트
            #endregion
    
            #region ⑬ 이벤트 처리기: Event Handlers
            public void OnClick()               //이벤트 핸들러
            {
                if (Click != null)
                {
                    Click();
                }
            }
            #endregion
        }
    
        class CarWorld
        {
            static void Main()
            {
                //ⓐ 클래스, 생성자, 메서드 테스트
                Car campingCar = new Car("캠핑카");
                campingCar.Run();              //캠핑카 자동차가 달림
    
                //ⓑ 속성 테스트
                Car sportsCar = new Car();
                sportsCar.Name = "스포츠카";
                sportsCar.Run();              //스포츠카 자동차가 달림
    
                //ⓒ 인덱서 테스트
                Car cars = new Car(2);
                cars[0] = "1번 자동차";
                cars[1] = "2번 자동차";
                for (int i = 0; i < cars.Length; i++)
                {
                    Console.WriteLine(cars[i]);
                }
    
                //ⓓ 이터레이터 테스트
                foreach (string name in cars)
                {
                    Console.WriteLine(name);
                }
    
                //ⓔ 대리자, 이벤트, 이벤트 처리기 테스트
                Car btn = new Car("전기자동차");
                btn.Click += new Car.EventHandler(btn.Run);
                btn.Click += new Car.EventHandler(btn.Run);
                btn.OnClick();
            }
        }
    }
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.