본문 바로가기
프로그래밍/C++

[C++] 6. C++의 "구조체와 클래스"

by iwbap 2024. 6. 17.
728x90

C++ 학습: 구조체와 클래스

C++에서 구조체와 클래스는 데이터를 구조화하고 객체 지향 프로그래밍을 실현하는 기본 단위입니다. 이번 글에서는 구조체 정의와 사용, 클래스와 객체, 접근 지정자, 생성자와 소멸자, 그리고 this 포인터에 대해 알아보겠습니다.


1. 구조체 정의와 사용: C++ 구조체

구조체는 여러 변수를 하나의 단위로 묶어주는 데이터 구조입니다. C++에서는 구조체를 사용하여 관련 데이터를 그룹화할 수 있습니다.

 

구조체 정의와 사용 예제

[cpp]
 
#include <iostream>
using namespace std;

// 구조체 정의
struct Person {
    string name;
    int age;
    float height;
};

int main() {
    // 구조체 변수 선언 및 초기화
    Person person1;
    person1.name = "Alice";
    person1.age = 30;
    person1.height = 165.5;

    // 구조체 멤버 접근 및 출력
    cout << "Name: " << person1.name << endl;
    cout << "Age: " << person1.age << endl;
    cout << "Height: " << person1.height << endl;

    return 0;
}
 

위의 예제에서 Person 구조체는 이름, 나이, 키를 포함하는 멤버를 가집니다. person1이라는 구조체 변수를 선언하고 각 멤버에 값을 할당한 후 출력합니다.


2. 클래스와 객체: 클래스 정의, 객체 생성 및 사용

클래스는 구조체와 유사하지만, 객체 지향 프로그래밍의 핵심 요소로, 데이터와 함수를 포함할 수 있습니다. 객체는 클래스의 인스턴스입니다.

 

클래스 정의와 사용 예제

[cpp]
 
#include <iostream>
using namespace std;

// 클래스 정의
class Car {
public:
    string brand;
    string model;
    int year;

    void displayInfo() {
        cout << "Brand: " << brand << endl;
        cout << "Model: " << model << endl;
        cout << "Year: " << year << endl;
    }
};

int main() {
    // 객체 생성 및 초기화
    Car car1;
    car1.brand = "Toyota";
    car1.model = "Corolla";
    car1.year = 2020;

    // 멤버 함수 호출
    car1.displayInfo();

    return 0;
}
 

위의 예제에서 Car 클래스는 브랜드, 모델, 연도를 포함하는 멤버 변수를 가지며, displayInfo라는 멤버 함수를 포함합니다. car1 객체를 생성하고 초기화한 후, 멤버 함수를 호출하여 정보를 출력합니다.


3. 접근 지정자: public, private, protected

클래스 멤버에 대한 접근 권한을 제어하기 위해 접근 지정자를 사용합니다. C++에서는 public, private, protected 접근 지정자가 있습니다.

  • public : 모든 코드에서 접근할 수 있습니다.
  • private : 클래스 내부에서만 접근할 수 있습니다.
  • protected : 클래스 내부와 파생 클래스에서만 접근할 수 있습니다.

접근 지정자 사용 예제

[cpp]
 
#include <iostream>
using namespace std;

class Student {
private:
    string name;
    int age;

public:
    void setName(string n) {
        name = n;
    }

    string getName() {
        return name;
    }

    void setAge(int a) {
        if (a > 0) {
            age = a;
        }
    }

    int getAge() {
        return age;
    }
};

int main() {
    Student student1;
    student1.setName("Bob");
    student1.setAge(20);

    cout << "Name: " << student1.getName() << endl;
    cout << "Age: " << student1.getAge() << endl;

    return 0;
}
 

위의 예제에서 Student 클래스는 이름과 나이를 private 멤버로 선언하고, 이를 설정하고 가져오는 public 멤버 함수를 제공합니다.


4. 생성자와 소멸자: 객체 생성과 소멸 시점에 호출되는 함수

생성자는 객체가 생성될 때 호출되며, 객체의 초기화를 담당합니다. 소멸자는 객체가 소멸될 때 호출되며, 자원을 해제합니다.

 

생성자와 소멸자 사용 예제

[cpp]
 
#include <iostream>
using namespace std;

class Book {
public:
    string title;
    string author;

    // 생성자
    Book(string t, string a) {
        title = t;
        author = a;
        cout << "Book created: " << title << " by " << author << endl;
    }

    // 소멸자
    ~Book() {
        cout << "Book destroyed: " << title << " by " << author << endl;
    }
};

int main() {
    // 객체 생성
    Book book1("1984", "George Orwell");
    Book book2("Brave New World", "Aldous Huxley");

    return 0;
}
 

위의 예제에서 Book 클래스는 생성자와 소멸자를 정의합니다. 객체가 생성될 때 생성자가 호출되어 책의 제목과 저자를 초기화하고, 객체가 소멸될 때 소멸자가 호출되어 메시지를 출력합니다.


5. this 포인터: 객체 자신을 가리키는 포인터

this 포인터는 객체 자신을 가리키는 포인터로, 클래스의 멤버 함수 내에서 사용됩니다. 이를 통해 객체의 멤버 변수와 함수를 참조할 수 있습니다.

 

this 포인터 사용 예제

[cpp]
 
#include <iostream>
using namespace std;

class Rectangle {
private:
    int width;
    int height;

public:
    Rectangle(int w, int h) {
        this->width = w;
        this->height = h;
    }

    int area() {
        return this->width * this->height;
    }

    void display() {
        cout << "Width: " << this->width << ", Height: " << this->height << ", Area: " << this->area() << endl;
    }
};

int main() {
    Rectangle rect(10, 5);
    rect.display();

    return 0;
}
 

위의 예제에서 Rectangle 클래스는 this 포인터를 사용하여 멤버 변수와 함수를 참조합니다. 이를 통해 객체 자신을 가리키는 포인터를 명확하게 나타낼 수 있습니다.


이번 글에서는 C++의 구조체와 클래스에 대해 알아보았습니다. 구조체 정의와 사용, 클래스와 객체, 접근 지정자, 생성자와 소멸자, 그리고 this 포인터를 이해하면 객체 지향 프로그래밍의 기초를 다질 수 있습니다. 다음 단계에서는 상속과 다형성 등 고급 객체 지향 개념을 학습해보세요. Happy Coding!

728x90