안녕하세요! 이번 포스팅에서는 C#의 객체 지향 프로그래밍(OOP)의 핵심 개념인 객체, 클래스, 인스턴스, 그리고 상속에 대해 자세히 알아보겠습니다. C#을 처음 접하는 분들이나 객체 지향 개념을 확실하게 이해하고 싶은 분들은 꼭 끝까지 읽어보세요!
객체(Object)란?
객체(Object)는 현실 세계의 사물이나 개념을 프로그래밍적으로 표현한 것입니다. 쉽게 말해, 우리가 보는 자동차, 강아지, 책 같은 것들을 프로그래밍 세계에서 구현할 수 있도록 만든 것이 바로 객체입니다.
객체는 **속성(데이터)과 동작(메서드)**을 가질 수 있습니다. 예를 들어, 자동차 객체는 색상, 브랜드 같은 속성과, 주행, 정지 같은 동작을 가질 수 있죠.
클래스(Class)란?
클래스(Class)는 **객체를 만들기 위한 청사진(설계도)**입니다. 객체는 클래스를 기반으로 생성되며, 클래스를 통해 객체의 속성과 동작을 정의할 수 있습니다.
클래스 선언 방법
C#에서 클래스를 선언하는 방법은 다음과 같습니다.
class Car
{
// 속성 (필드)
public string Color;
public string Brand;
// 동작 (메서드)
public void Drive()
{
Console.WriteLine("자동차가 달립니다.");
}
}
위 예제에서 Car 클래스는 Color와 Brand 속성을 가지고 있으며, Drive()라는 메서드를 가지고 있습니다.
인스턴스(Instance)란?
클래스는 그 자체로는 실행되지 않고, 실제 메모리에 생성된 객체를 인스턴스라고 합니다.
클래스에서 객체를 생성하려면 new 키워드를 사용합니다.
Car myCar = new Car();
myCar.Color = "Red";
myCar.Brand = "Hyundai";
myCar.Drive(); // 출력: 자동차가 달립니다.
위 코드에서 myCar는 Car 클래스의 인스턴스입니다. 즉, myCar는 Car 클래스를 기반으로 생성된 객체이며, 클래스에서 정의한 속성과 메서드를 사용할 수 있습니다.
상속(Inheritance)이란?
상속(Inheritance)은 기존 클래스의 기능을 그대로 물려받아 새로운 클래스를 만드는 것입니다. 상속을 사용하면 코드의 재사용성을 높이고, 유지보수를 쉽게 할 수 있습니다.
상속 구현 방법
C#에서 클래스 상속은 : 기호를 사용하여 선언합니다.
class Vehicle
{
public int Speed;
public void Move()
{
Console.WriteLine("이동 중...");
}
}
class Car : Vehicle
{
public string Brand;
}
위 코드에서 Car 클래스는 Vehicle 클래스를 상속받았습니다. 따라서 Car 클래스는 Vehicle 클래스의 Speed 속성과 Move() 메서드를 그대로 사용할 수 있습니다.
Car myCar = new Car();
myCar.Speed = 100;
myCar.Move(); // 출력: 이동 중...
부모 클래스의 생성자 호출
부모 클래스의 생성자가 있다면, 자식 클래스에서 이를 호출해야 할 수도 있습니다. 이때 base 키워드를 사용합니다.
class Vehicle
{
public string Name;
public Vehicle(string name)
{
Name = name;
Console.WriteLine($"{name} 차량이 생성되었습니다.");
}
}
class Car : Vehicle
{
public Car(string name) : base(name)
{
Console.WriteLine("자동차 객체 생성 완료!");
}
}
Car myCar = new Car("Hyundai");
// 출력: Hyundai 차량이 생성되었습니다.
// 출력: 자동차 객체 생성 완료!
Car 클래스가 생성될 때 부모 클래스 Vehicle의 생성자가 먼저 실행되는 것을 볼 수 있습니다.
메서드 오버라이딩 (Overriding)
자식 클래스에서 부모 클래스의 메서드를 재정의(Overriding) 할 수도 있습니다.
class Animal
{
public virtual void Speak()
{
Console.WriteLine("동물이 소리를 냅니다.");
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("멍멍!");
}
}
Dog myDog = new Dog();
myDog.Speak(); // 출력: 멍멍!
virtual 키워드로 부모 메서드를 선언하고, 자식 클래스에서 override 키워드를 사용하여 재정의합니다.
정리
- 객체(Object): 현실 세계의 사물을 프로그래밍적으로 표현한 것
- 클래스(Class): 객체를 만들기 위한 청사진(설계도)
- 인스턴스(Instance): 클래스를 기반으로 메모리에 생성된 실제 객체
- 상속(Inheritance): 기존 클래스를 확장하여 새로운 클래스를 만드는 것
이제 C#에서 객체와 클래스, 인스턴스, 상속 개념을 이해하셨을 겁니다! 😊
궁금한 점이 있다면 댓글로 남겨주세요! 👍