본문 바로가기
C++

[C++] 객체 지향 프로그래밍 마스터하기: 클래스와 객체의 모든 것! ✨

by 다다면체 2025. 1. 6.
728x90
반응형

C++의 핵심인 객체 지향 프로그래밍(OOP)은 효율적이고 확장 가능한 코드를 작성하는 데 필수적인 패러다임이에요! 오늘은 클래스와 객체를 중심으로 OOP의 기본 개념부터 활용법까지 알아볼 거예요. 🚀 준비되셨나요? 그럼 시작합니다!


반응형

1. 클래스와 객체란? 🤔

클래스는 객체를 정의하는 청사진(템플릿)이며, 객체는 클래스에서 생성된 실체입니다. 클래스와 객체를 이해하면 데이터와 함수를 하나로 묶어 더 체계적인 프로그램을 설계할 수 있어요.

(1) 클래스 정의하기

클래스는 class 키워드를 사용해 정의합니다. 클래스 내부에는 멤버 변수와 멤버 함수가 포함됩니다. 📌 예제

class Car {
public:
    std::string brand;
    int speed;

    void displayInfo() {
        std::cout << "Brand: " << brand << ", Speed: " << speed << " km/h" << std::endl;
    }
};

(2) 객체 생성

클래스는 객체를 생성해야 실제 데이터를 다룰 수 있습니다. 📌 예제

Car myCar;
myCar.brand = "Tesla";
myCar.speed = 200;
myCar.displayInfo(); // Brand: Tesla, Speed: 200 km/h

2. 접근 지정자: public, private, protected 🛡️

C++에서 멤버의 접근 권한을 설정하려면 접근 지정자를 사용해야 합니다. 접근 지정자는 클래스의 캡슐화를 돕습니다.

(1) public

public 멤버는 클래스 외부에서 접근할 수 있습니다. 📌 예제

class Example {
public:
    int data;
};
Example obj;
obj.data = 10; // 가능

(2) private

private 멤버는 클래스 내부에서만 접근할 수 있습니다. 📌 예제

class Example {
private:
    int data;
public:
    void setData(int value) {
        data = value;
    }
    int getData() {
        return data;
    }
};
Example obj;
obj.setData(10);
std::cout << obj.getData(); // 10

(3) protected

protected 멤버는 파생 클래스에서 접근할 수 있습니다. 주로 상속에서 활용됩니다.


3. 생성자와 소멸자 사용법 🛠️

생성자와 소멸자는 객체의 생애주기 동안 초기화와 정리를 담당하는 특별한 함수입니다.

(1) 생성자(Constructor)

생성자는 클래스 이름과 동일하며, 객체가 생성될 때 자동으로 호출됩니다. 📌 예제

class Car {
public:
    std::string brand;
    int speed;

    Car(std::string b, int s) {
        brand = b;
        speed = s;
    }

    void displayInfo() {
        std::cout << "Brand: " << brand << ", Speed: " << speed << " km/h" << std::endl;
    }
};
Car myCar("Tesla", 200);
myCar.displayInfo(); // Brand: Tesla, Speed: 200 km/h

(2) 소멸자(Destructor)

소멸자는 객체가 삭제되거나 범위를 벗어날 때 호출됩니다. 메모리 정리에 사용되며 ~를 클래스 이름 앞에 붙여 정의합니다. 📌 예제

class Example {
public:
    ~Example() {
        std::cout << "소멸자가 호출되었습니다!" << std::endl;
    }
};
Example obj; // 범위를 벗어나면 소멸자가 호출됩니다.

4. 객체 지향 프로그래밍의 핵심 원칙 🌟

OOP는 다음 네 가지 원칙을 기반으로 합니다:

(1) 캡슐화 (Encapsulation)

데이터와 함수를 하나의 클래스로 묶어 외부로부터 숨깁니다. 이를 통해 데이터 무결성을 유지할 수 있습니다.

(2) 상속 (Inheritance)

기존 클래스의 속성과 동작을 재사용하며, 새로운 클래스를 확장할 수 있습니다. 📌 예제

class Vehicle {
public:
    int wheels;
    void displayWheels() {
        std::cout << "Wheels: " << wheels << std::endl;
    }
};
class Car : public Vehicle {
public:
    std::string brand;
};
Car myCar;
myCar.wheels = 4;
myCar.brand = "BMW";
myCar.displayWheels(); // Wheels: 4

(3) 다형성 (Polymorphism)

동일한 함수 이름이 다양한 동작을 수행할 수 있도록 합니다. 이는 오버로딩과 오버라이딩으로 구현됩니다. 📌 예제

class Shape {
public:
    virtual void draw() {
        std::cout << "Drawing Shape" << std::endl;
    }
};
class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing Circle" << std::endl;
    }
};
Shape* shape = new Circle();
shape->draw(); // Drawing Circle

(4) 추상화 (Abstraction)

복잡한 내부 구현을 숨기고 필요한 기능만 외부에 제공합니다. 이는 순수 가상 함수와 인터페이스를 통해 구현됩니다.


5. 마무리 🎉

클래스와 객체는 C++의 강력한 도구로, OOP의 시작점이자 핵심이에요. 캡슐화, 상속, 다형성, 추상화를 이해하고 적용하면 유지보수성과 확장성이 뛰어난 프로그램을 작성할 수 있습니다. 꾸준히 연습하며 이 개념들을 자신의 코드에 통합해 보세요! 다음에는 더 고급 주제를 다뤄보겠습니다. 😊

728x90
반응형