객체 지향 프로그래밍 (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) 기초에 대해 학습하는 것이었습니다. 다음 날부터는 생성자와 소멸자에 대해 더 깊이 있게 다룰 것입니다.
내일은 "생성자와 소멸자"에 대해 다룰 예정입니다. 질문이나 피드백이 있으면 댓글로 남겨 주세요!
'-----ETC----- > C++ 마스터 시리즈' 카테고리의 다른 글
[C++ 마스터] Day 14: 연산자 오버로딩 (0) | 2024.08.01 |
---|---|
[C++ 마스터] Day 11: 구조체와 열거형 (0) | 2024.08.01 |
[C++ 마스터] Day 9: 포인터와 참조자 (0) | 2024.08.01 |
[C++ 마스터] Day 10: 동적 메모리 할당 (new, delete) (0) | 2024.08.01 |
[C++ 마스터] Day 7: 함수와 재귀 (0) | 2024.08.01 |