본문 바로가기
-----ETC-----/C++ 마스터 시리즈

[C++ 마스터] Day 12: 클래스와 객체 지향 프로그래밍 (OOP) 기초

by cogito21_cpp 2024. 8. 1.
반응형

객체 지향 프로그래밍 (Object-Oriented Programming)

객체 지향 프로그래밍(OOP)은 객체를 중심으로 프로그램을 구성하는 프로그래밍 패러다임입니다. C++는 OOP를 지원하며, 이를 통해 더 구조적이고 재사용 가능한 코드를 작성할 수 있습니다. OOP의 주요 개념에는 클래스, 객체, 상속, 다형성, 캡슐화, 추상화 등이 있습니다.

 

클래스 (Classes)

클래스는 객체를 정의하는 데 사용되는 청사진 또는 틀입니다. 클래스는 데이터 멤버(변수)와 멤버 함수(메서드)를 포함합니다.

 

1. 클래스 선언과 정의

클래스를 선언하고 정의하는 방법은 다음과 같습니다:

class Car {
public:  // 접근 지정자
    string brand;
    string model;
    int year;

    void displayInfo() {  // 멤버 함수
        cout << "Brand: " << brand << endl;
        cout << "Model: " << model << endl;
        cout << "Year: " << year << endl;
    }
};

 

2. 객체 생성

클래스를 사용하여 객체를 생성할 수 있습니다:

Car myCar;
myCar.brand = "Toyota";
myCar.model = "Corolla";
myCar.year = 2020;
myCar.displayInfo();

 

3. 접근 지정자

접근 지정자는 클래스 멤버의 접근 권한을 설정합니다. 주요 접근 지정자는 다음과 같습니다:

  • public: 모든 접근 허용
  • private: 클래스 내에서만 접근 허용
  • protected: 클래스 및 파생 클래스에서 접근 허용

예제:

class Person {
private:
    string name;

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

    string getName() {
        return name;
    }
};

Person person;
person.setName("Alice");
cout << person.getName() << endl;

 

4. 생성자 (Constructor)

생성자는 객체가 생성될 때 자동으로 호출되는 특수한 함수입니다. 생성자는 클래스 이름과 같아야 하며 반환 타입이 없습니다.

class Car {
public:
    string brand;
    string model;
    int year;

    // 생성자
    Car(string b, string m, int y) {
        brand = b;
        model = m;
        year = y;
    }

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

Car myCar("Toyota", "Corolla", 2020);
myCar.displayInfo();

 

5. 소멸자 (Destructor)

소멸자는 객체가 소멸될 때 자동으로 호출되는 특수한 함수입니다. 소멸자의 이름은 클래스 이름 앞에 ~ 기호를 붙여서 만듭니다.

class Car {
public:
    string brand;
    string model;
    int year;

    Car(string b, string m, int y) {
        brand = b;
        model = m;
        year = y;
    }

    ~Car() {
        cout << "Destructor called for " << brand << endl;
    }

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

Car myCar("Toyota", "Corolla", 2020);
myCar.displayInfo();

 

예제 문제

문제 1: 학생 정보를 저장하는 클래스를 작성하고 객체를 생성하여 출력

학생의 이름, 나이, 학번을 저장하는 클래스를 작성하고, 객체를 생성하여 학생 정보를 출력하는 프로그램을 작성하세요.

 

해설:

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
    string name;
    int age;
    int studentID;

public:
    Student(string n, int a, int id) {
        name = n;
        age = a;
        studentID = id;
    }

    void displayInfo() {
        cout << "Name: " << name << endl;
        cout << "Age: " << age << endl;
        cout << "Student ID: " << studentID << endl;
    }
};

int main() {
    Student student1("Alice", 20, 12345);
    student1.displayInfo();

    Student student2("Bob", 22, 67890);
    student2.displayInfo();

    return 0;
}

 

이 프로그램은 학생 정보를 저장하는 클래스를 작성하고, 객체를 생성하여 학생 정보를 출력합니다.

 

문제 2: 두 개의 좌표를 저장하는 클래스를 작성하고 거리 계산

두 개의 좌표를 저장하는 클래스를 작성하고, 두 좌표 사이의 거리를 계산하는 프로그램을 작성하세요.

 

해설:

#include <iostream>
#include <cmath>

using namespace std;

class Point {
private:
    double x;
    double y;

public:
    Point(double xCoord, double yCoord) {
        x = xCoord;
        y = yCoord;
    }

    double distanceTo(Point other) {
        double dx = x - other.x;
        double dy = y - other.y;
        return sqrt(dx * dx + dy * dy);
    }

    void displayPoint() {
        cout << "Point(" << x << ", " << y << ")" << endl;
    }
};

int main() {
    Point p1(3.0, 4.0);
    Point p2(0.0, 0.0);

    p1.displayPoint();
    p2.displayPoint();

    cout << "Distance: " << p1.distanceTo(p2) << endl;

    return 0;
}

 

이 프로그램은 두 개의 좌표를 저장하는 클래스를 작성하고, 두 좌표 사이의 거리를 계산합니다.

 

문제 3: 은행 계좌 클래스를 작성하고 입금 및 출금 기능 구현

은행 계좌 클래스를 작성하고, 입금 및 출금 기능을 구현하는 프로그램을 작성하세요.

 

해설:

#include <iostream>

using namespace std;

class BankAccount {
private:
    string owner;
    double balance;

public:
    BankAccount(string o, double b) {
        owner = o;
        balance = b;
    }

    void deposit(double amount) {
        balance += amount;
    }

    void withdraw(double amount) {
        if (amount <= balance) {
            balance -= amount;
        } else {
            cout << "Insufficient funds" << endl;
        }
    }

    void displayAccount() {
        cout << "Owner: " << owner << endl;
        cout << "Balance: $" << balance << endl;
    }
};

int main() {
    BankAccount account("Alice", 1000.0);

    account.displayAccount();

    account.deposit(500.0);
    cout << "After deposit:" << endl;
    account.displayAccount();

    account.withdraw(200.0);
    cout << "After withdrawal:" << endl;
    account.displayAccount();

    account.withdraw(1500.0);  // Insufficient funds
    cout << "After insufficient withdrawal attempt:" << endl;
    account.displayAccount();

    return 0;
}

 

이 프로그램은 은행 계좌 클래스를 작성하고, 입금 및 출금 기능을 구현합니다.

 

다음 단계

12일차의 목표는 C++의 클래스와 객체 지향 프로그래밍(OOP) 기초에 대해 학습하는 것이었습니다. 다음 날부터는 생성자와 소멸자에 대해 더 깊이 있게 다룰 것입니다.

 

내일은 "생성자와 소멸자"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!

반응형