반응형
아래 글은 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();
}
}
반응형
'프로그래밍언어 & 프레임워크 > C#' 카테고리의 다른 글
C# 확장 메서드(Extension Method) 만들기 (0) | 2021.06.13 |
---|---|
C# 제네릭(Generic) 클래스 만들기 (0) | 2021.06.12 |
C# 특성(Attribute)과 리플렉션(Reflection) 맛보기 (0) | 2021.06.10 |
C# 메서드(Method) 오버라이드 (0) | 2021.06.09 |
C# 상속(Inherits)으로 클래스 확장하기 (0) | 2021.06.08 |