본문 바로가기
프로그래밍언어 & 프레임워크/C#

C# 개체(Object)와 개체지향프로그래밍

by 공부하는개미 2021. 6. 11.
반응형

 

 

 

아래 글은 C# 개체와 개체지향프로그래밍 관련 개념 정리 및 작성자 공부를 위해 작성되었습니다.

 

 

 

 

 

 

📃 참고자료

 

  • C# 교과서(길벗 출판사) - 47단원 개체와 개체지향프로그래밍 628 ~ 640페이지
  • 유튜브 채널 VisualAcademy [C# 교과서 마스터하기 47. 개체와 개체지향프로그래밍]
  • 닷넷코리아 (https://www.dotnetkorea.com/)

 

 

 

 

https://www.youtube.com/watch?v=cD6PA0ngXDM 

 

 

 

 

 

✳ 개체(Object)

 

- 현실세계에서 어떤 특징(속성)을 가지며 어떤 동작(메서드)을 수행할 수 있는 단위 하나를 개체로 표현할 수 있습니다.

 예를들어 자동차, 사람, 컴퓨터 등이 있다고 할 때 다음 문장처럼 표현할 수 있습니다.

 

 

빨간색 자동차 개체 좌회전 동작을 한다.

 

 

코드에서는 개체를 만들어 내는 설계도가 클래스고, 이 클래스에서 조립된 물건 하나가 바로 개체입니다.

 

 

자동차 설계도(클래스) -> 조립(인스턴스화) -> 자동차(개체, Object)

 

 

마지막으로 클래스는 대문자로 시작하고, 개체는 소문자로 시작하는 것이 기본 원칙입니다.

 

 

 

 

 

 

using System;
using System.Collections;

// 인터페이스 : 표준, 다중상속
interface IStandard { void Run(); void Back(); }

// 네임스페이스 : 클래스명 충돌 방지
namespace Benz
{
    // 클래스 : 설계도
    class Car : IStandard
    {
        #region Public Methods
        public void Run()
        {
            Console.WriteLine("{0} 자동차가 달립니다.", name);
        }   // 메서드 : 기능/동작
        public void Back() { }
        #endregion
        #region Constructors
        public Car(string name) // 생성자 : 시동, 필드 초기화
        {
            this.name = name;
        }
        public Car()
        {
            this.name = "벤츠"; // 기본값
        }
        public Car(int length)
        {
            this.Name = "벤츠"; // 개선
            _Length = length;
            names = new string[length]; //넘겨온 값으로 요소생성    
        }
        #endregion
        #region Private Member Variables
        private string name; // 필드 : 부품 
        private string[] names; // 배열형 필드
        private readonly int _Length; // 읽기전용 필드
        #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 자동차클래스
{
    static void Main(string[] args)
    {
        #region ...
        Benz.Car car = new Benz.Car("A클래스");
        car.Run(); // A클래스 자동차가 달립니다.
        Car car1 = new Car();
        car1.Name = "S클래스";
        car1.Run(); // S클래스 자동차가 달립니다. 
        Car myCar = new Car(2);
        myCar[0] = "CLA";
        myCar[1] = "GLA";
        for (int i = 0; i < myCar.Length; i++)
        {
            Console.WriteLine(myCar[i]);
        }
        foreach (string name in myCar)
        {
            Console.WriteLine(name);
        }
        #endregion
        Car btn = new Car("CLS");
        btn.Click += new Car.EventHandler(btn.Run);
        btn.Click += new Car.EventHandler(btn.Run);
        btn.OnClick();
    }
}
반응형