C++ 프로그래밍

C++의 클래스 기본 문법

ROBL 2025. 2. 8.
728x90
반응형

C++에서 클래스는 객체지향 프로그래밍의 핵심 요소로, 데이터와 그 데이터를 처리하는 메서드를 하나의 단위로 묶어 관리하는 구조체입니다. 클래스는 객체를 생성하기 위한 설계도 역할을 하며, 객체의 속성과 행동을 정의합니다. 이 글에서는 C++의 클래스 기본 문법, 구성 요소, 객체 생성 및 사용법, 접근 제어, 생성자와 소멸자, 그리고 클래스의 고급 개념에 대해 자세히 살펴보겠습니다.

1. 클래스의 기본 구조

C++에서 클래스는 class 키워드를 사용하여 정의합니다. 클래스의 기본 구조는 다음과 같습니다.

class ClassName {
public: // 접근 제어 지시어
    // 데이터 멤버(속성)
    int attribute1;
    double attribute2;

    // 메서드(함수)
    void method1() {
        // 메서드의 구현
    }

    double method2(int parameter) {
        // 메서드의 구현
        return parameter * attribute2;
    }
};

위의 코드에서 ClassName은 클래스의 이름이며, 클래스 내부에는 데이터 멤버와 메서드가 정의되어 있습니다. 접근 제어 지시어인 public은 해당 멤버가 외부에서 접근 가능함을 의미합니다.

2. 클래스의 구성 요소

클래스는 다음과 같은 주요 구성 요소로 이루어져 있습니다.

2.1 데이터 멤버

데이터 멤버는 클래스의 속성을 정의하는 변수입니다. 데이터 멤버는 클래스의 인스턴스(객체)마다 고유한 값을 가질 수 있습니다.

class Person {
public:
    string name; // 이름
    int age; // 나이
};

위의 코드에서 nameagePerson 클래스의 데이터 멤버입니다. 각 객체는 이 속성을 통해 자신의 상태를 유지합니다.

2.2 메서드

메서드는 클래스의 동작을 정의하는 함수입니다. 메서드는 데이터 멤버에 접근하여 객체의 상태를 변경하거나, 특정 작업을 수행할 수 있습니다.

class Person {
public:
    string name;
    int age;

    void introduce() {
        cout << "안녕하세요, 제 이름은 " << name << "이고, 나이는 " << age << "세입니다." << endl;
    }
};

위의 코드에서 introduce 메서드는 Person 객체의 이름과 나이를 출력하는 기능을 수행합니다.

3. 클래스의 객체 생성

클래스를 정의한 후, 해당 클래스를 기반으로 객체를 생성할 수 있습니다. 객체는 클래스의 인스턴스이며, 클래스에서 정의한 속성과 메서드를 사용할 수 있습니다.

int main() {
    Person person; // Person 클래스의 객체 생성
    person.name = "Alice"; // 데이터 멤버 초기화
    person.age = 30; // 데이터 멤버 초기화
    person.introduce(); // 메서드 호출
    return 0;
}

위의 코드에서 personPerson 클래스의 객체로, nameage 데이터 멤버를 초기화하고, introduce 메서드를 호출하여 정보를 출력합니다.

4. 접근 제어 지시어

C++에서는 클래스의 멤버에 대한 접근을 제어하기 위해 접근 제어 지시어를 사용합니다. 주요 접근 제어 지시어는 다음과 같습니다.

  • public: 해당 멤버는 클래스 외부에서 접근할 수 있습니다.
  • private: 해당 멤버는 클래스 내부에서만 접근할 수 있으며, 외부에서는 접근할 수 없습니다.
  • protected: 해당 멤버는 클래스 내부와 상속받은 클래스에서 접근할 수 있습니다.
class Example {
private:
    int privateAttribute; // private 멤버

public:
    void setPrivateAttribute(int value) { // public 메서드
        privateAttribute = value; // private 멤버에 접근
    }

    int getPrivateAttribute() { // public 메서드
        return privateAttribute; // private 멤버에 접근
    }
};

위의 코드에서 privateAttributeprivate로 선언되어 외부에서 직접 접근할 수 없지만, setPrivateAttributegetPrivateAttribute 메서드를 통해 간접적으로 접근할 수 있습니다.

 

5. 생성자와 소멸자

클래스에는 객체가 생성될 때 자동으로 호출되는 생성자와, 객체가 소멸될 때 호출되는 소멸자가 있습니다. 생성자는 객체의 초기화를 담당하며, 소멸자는 자원을 해제하는 역할을 합니다.

5.1 생성자

생성자는 클래스와 동일한 이름을 가지며, 반환 타입이 없습니다. 다음은 생성자의 예제입니다.

class Person {
public:
    string name;
    int age;

    // 생성자
    Person(string n, int a) {
        name = n;
        age = a;
    }
};

위의 코드에서 Person 클래스의 생성자는 이름과 나이를 매개변수로 받아 객체를 초기화합니다. 객체를 생성할 때 생성자를 호출하여 초기값을 설정할 수 있습니다.

int main() {
    Person person("Alice", 30); // 생성자 호출
    person.introduce(); // 메서드 호출
    return 0;
}

5.2 소멸자

소멸자는 클래스 이름 앞에 ~ 기호를 붙여 정의하며, 객체가 소멸될 때 호출됩니다. 다음은 소멸자의 예제입니다.

class Person {
public:
    string name;
    int age;

    // 소멸자
    ~Person() {
        cout << name << "의 객체가 소멸되었습니다." << endl;
    }
};

위의 코드에서 Person 클래스의 소멸자는 객체가 소멸될 때 해당 객체의 이름을 출력합니다. 소멸자는 자원 해제를 위한 중요한 역할을 합니다.

6. 클래스의 고급 개념

클래스는 기본적인 데이터 구조를 넘어서 다양한 고급 개념을 지원합니다.

6.1 상속(Inheritance)

상속은 기존 클래스(부모 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스)가 물려받는 기능입니다. 이를 통해 코드의 재사용성을 높이고, 계층 구조를 형성할 수 있습니다.

class Vehicle { // 부모 클래스
public:
    void start() {
        cout << "차량이 시작되었습니다." << endl;
    }
};

class Car : public Vehicle { // 자식 클래스
public:
    void honk() {
        cout << "빵빵!" << endl;
    }
};

int main() {
    Car myCar;
    myCar.start(); // 부모 클래스의 메서드 호출
    myCar.honk(); // 자식 클래스의 메서드 호출
    return 0;
}

위의 코드에서 Car 클래스는 Vehicle 클래스를 상속받아 start 메서드를 사용할 수 있습니다.

6.2 다형성(Polymorphism)

다형성은 동일한 이름의 메서드가 서로 다른 동작을 수행할 수 있는 능력을 의미합니다. C++에서는 함수 오버로딩과 가상 함수를 통해 다형성을 구현할 수 있습니다.

class Animal {
public:
    virtual void sound() { // 가상 함수
        cout << "동물의 소리" << endl;
    }
};

class Dog : public Animal {
public:
    void sound() override { // 오버라이딩
        cout << "멍멍!" << endl;
    }
};

int main() {
    Animal* myDog = new Dog();
    myDog->sound(); // 다형성: Dog 클래스의 sound() 호출
    delete myDog;
    return 0;
}

위의 코드에서 Animal 클래스의 포인터를 사용하여 Dog 클래스의 메서드를 호출함으로써 다형성을 구현하고 있습니다.

7. 결론

C++의 클래스 기본 문법은 객체지향 프로그래밍의 기초를 형성합니다. 클래스는 데이터와 메서드를 묶어 관리할 수 있는 강력한 도구로, 객체를 생성하고 조작하는 데 필수적입니다. 클래스의 구성 요소인 데이터 멤버, 메서드, 접근 제어 지시어, 생성자 및 소멸자를 이해하고 활용함으로써, 보다 신뢰성 있고 확장성 있는 C++ 프로그램을 구할 수 있습니다. 또한, 상속과 다형성과 같은 고급 개념을 통해 코드의 재사용성과 유연성을 높일 수 있습니다. 다음 포스팅에서는 C++의 생성자와 소멸자에 대해 더 깊이 다루어 보겠습니다.

728x90
반응형

댓글