객체와 클래스
객체와 클래스는 객체지향 프로그래밍OOP의 핵심 개념으로, 클래스는 객체를 정의하는 템플릿template, 객체는 이 클래스로부터 생성된 구체적인 실체입니다.
클래스란?
클래스Class는 객체를 생성하기 위한 설계도로, 객체가 가질 수 있는 속성과 메서드를 정의합니다. 예를 들어, 자동차를 모델링하는 프로그램에서 Car
라는 클래스를 정의하여 각 자동차의 정보를 표현할 수 있습니다.
클래스 예시: Car
public class Car
{
// 필드(속성)
public string Brand { get; set; }
public string Model { get; set; }
public bool IsEngineRunning { get; private set; }
// 메서드(기능)
public void StartEngine()
{
IsEngineRunning = true;
Console.WriteLine($"{Brand} {Model} engine started.");
}
// 메서드(기능)
public void StopEngine()
{
IsEngineRunning = false;
Console.WriteLine($"{Brand} {Model} engine stopped.");
}
}
위 코드에서 Car
클래스는 자동차의 속성(브랜드, 모델, 엔진 상태)과 엔진을 켜고 끄는 기능을 정의한 메서드를 포함합니다.
객체란?
객체Object는 클래스의 인스턴스로, 클래스에서 정의된 속성과 메서드를 실제로 사용할 수 있는 구체적인 실체입니다. Car
클래스에서 생성된 각각의 자동차는 객체입니다.
객체 생성 예시
// 객체 생성
Car car1 = new Car();
car1.Brand = "Hyundai";
car1.Model = "Sonata";
car1.StartEngine(); // "Hyundai Sonata engine started." 출력
car1.StopEngine(); // "Hyundai Sonata engine stopped." 출력
위 예제에서 car1
은 Car
클래스의 인스턴스이며, 실제로 자동차 한 대를 나타냅니다. StartEngine()
과 StopEngine()
메서드를 호출하면, 각각 자동차의 엔진을 켜고 끄는 동작을 수행합니다.
클래스와 객체의 관계
- 클래스는 설계도, 객체는 실체:
Car
클래스는 자동차의 속성과 기능을 정의하는 틀이고,car1
은 이 클래스로부터 생성된 실제 자동차입니다. - 다양한 객체 생성: 하나의
Car
클래스로부터 여러 대의 자동차Object를 생성할 수 있습니다.
여러 객체 생성 예시
Car car1 = new Car { Brand = "Hyundai", Model = "Sonata" };
Car car2 = new Car { Brand = "Kia", Model = "K5" };
// 메서드 호출
car1.StartEngine(); // "Hyundai Sonata engine started." 출력
car2.StartEngine(); // "Kia K5 engine started." 출력
여기서는 car1
과 car2
두 개의 객체를 생성했습니다. 두 객체는 서로 다른 속성을 가지고 있지만, 동일한 Car
클래스를 기반으로 만들어졌습니다.
생성자란?
생성자Constructor는 객체가 생성될 때 호출되는 메서드로, 객체를 초기화하는 역할을 합니다. 생성자를 사용하면 객체 생성 시 속성을 쉽게 설정할 수 있습니다.
생성자 예시
public class Car
{
// 필드
public string Brand { get; set; }
public string Model { get; set; }
public bool IsEngineRunning { get; private set; }
// 생성자
public Car(string brand, string model)
{
Brand = brand;
Model = model;
IsEngineRunning = false;
}
// 메서드
public void StartEngine()
{
IsEngineRunning = true;
Console.WriteLine($"{Brand} {Model} engine started.");
}
public void StopEngine()
{
IsEngineRunning = false;
Console.WriteLine($"{Brand} {Model} engine stopped.");
}
}
이 생성자를 통해 자동차를 생성할 때 브랜드와 모델을 쉽게 초기화할 수 있습니다.
생성자를 사용한 객체 생성
Car car1 = new Car("Hyundai", "Sonata");
Car car2 = new Car("Kia", "K5");
이제 Car
객체를 생성할 때 생성자를 통해 속성을 초기화할 수 있습니다.
클래스와 객체의 장점
- 재사용성: 한 번 정의한 클래스를 여러 곳에서 재사용할 수 있습니다. 예를 들어,
Car
클래스를 한 번 정의하면, 여러 자동차를 표현하는 객체를 쉽게 만들 수 있습니다. - 유지보수성: 클래스를 통해 코드가 모듈화되어 있어, 각 클래스의 수정이 다른 부분에 최소한의 영향을 미칩니다.
- 확장성: 새로운 속성이나 메서드가 필요할 때 기존 클래스를 확장하거나 수정하여 시스템을 유연하게 확장할 수 있습니다.
클래스와 객체의 활용
클래스와 객체는 프로그램의 기능을 확장하고 구조화하는 데 사용됩니다. 예를 들어, 자동차 관리 시스템에서 Car
클래스 외에도 Garage
클래스를 추가하여 여러 대의 자동차를 관리할 수 있습니다.
Garage
클래스 예시
public class Garage
{
public List<Car> Cars { get; set; } = new List<Car>();
public void AddCar(Car car)
{
Cars.Add(car);
Console.WriteLine($"{car.Brand} {car.Model} added to the garage.");
}
public void StartAllEngines()
{
foreach (var car in Cars)
{
car.StartEngine();
}
}
}
Garage
객체 사용 예시
Garage garage = new Garage();
Car car1 = new Car("Hyundai", "Sonata");
Car car2 = new Car("Kia", "K5");
garage.AddCar(car1); // "Hyundai Sonata added to the garage."
garage.AddCar(car2); // "Kia K5 added to the garage."
garage.StartAllEngines(); // 두 자동차의 엔진이 모두 시작됩니다.
위 예시에서 Garage
클래스는 여러 대의 자동차를 관리하고, 자동차의 엔진을 동시에 켤 수 있는 기능을 제공합니다.
맺음말
객체와 클래스는 객체지향 프로그래밍에서 시스템을 설계하고 구현하는 데 필수적인 개념입니다. 클래스는 객체의 속성 및 동작을 정의하는 설계도이며, 객체는 실제로 프로그램 내에서 동작하는 실체입니다. 이 개념을 잘 이해하면 복잡한 시스템을 보다 논리적이고 유연하게 설계할 수 있습니다.