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(); } } }