c++
C++ 객체 지향 프로그래밍 (OOP) 시작하기
난개발자
2025. 2. 1. 16:23
728x90
C++는 **객체 지향 프로그래밍(Object-Oriented Programming, OOP)**의 강력한 기능을 제공하는 언어입니다. 객체 지향 프로그래밍은 코드를 더 효율적이고 유지보수하기 쉽게 만들어 주는 프로그래밍 패러다임으로, 클래스와 객체를 기반으로 합니다.
이번 글에서는 C++에서 객체 지향 프로그래밍의 기초 개념을 소개하고, 클래스와 객체의 개념, 그리고 이를 어떻게 사용하는지에 대해 알아보겠습니다.
1. 객체 지향 프로그래밍(OOP)란?
객체 지향 프로그래밍은 **현실 세계의 사물(객체)**을 프로그래밍으로 모델링하는 방법입니다.
OOP의 4대 원칙:
- 캡슐화(Encapsulation): 데이터를 보호하고 숨기는 것. 객체의 내부 구현을 외부에 노출하지 않습니다.
- 상속(Inheritance): 기존 클래스를 기반으로 새로운 클래스를 만드는 것.
- 다형성(Polymorphism): 같은 인터페이스로 다양한 형태의 동작을 구현하는 것.
- 추상화(Abstraction): 불필요한 정보를 숨기고 필요한 정보만 보여주는 것.
C++는 이 모든 개념을 지원하는 강력한 객체 지향 언어입니다.
2. 클래스와 객체
(1) 클래스란?
클래스는 **데이터(속성)**와 **함수(메서드)**를 하나로 묶은 사용자 정의 데이터 타입입니다.
(2) 객체란?
객체는 클래스로부터 생성된 실제 인스턴스입니다. 클래스는 설계도, 객체는 그 설계도로 만든 제품이라고 할 수 있습니다.
3. 클래스 작성하기
(1) 기본 클래스 구조
#include <iostream>
using namespace std;
// 클래스 정의
class Car {
public:
// 속성 (멤버 변수)
string brand;
string model;
int year;
// 메서드 (멤버 함수)
void displayInfo() {
cout << "브랜드: " << brand << endl;
cout << "모델: " << model << endl;
cout << "연식: " << year << endl;
}
};
int main() {
// 객체 생성
Car myCar;
myCar.brand = "Hyundai";
myCar.model = "Sonata";
myCar.year = 2022;
// 메서드 호출
myCar.displayInfo();
return 0;
}
(2) 출력 결과:
브랜드: Hyundai
모델: Sonata
연식: 2022
4. 생성자와 소멸자
(1) 생성자(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 << ", 모델: " << model << ", 연식: " << year << endl;
}
};
int main() {
Car myCar("Kia", "K5", 2021);
myCar.displayInfo();
return 0;
}
(2) 소멸자(Destructor)
- 소멸자는 객체가 소멸될 때 자동으로 호출되는 함수입니다.
- 주로 메모리 해제나 리소스 반환을 담당합니다.
class Car {
public:
string brand;
// 생성자
Car(string b) {
brand = b;
cout << brand << " 자동차가 생성되었습니다." << endl;
}
// 소멸자
~Car() {
cout << brand << " 자동차가 소멸되었습니다." << endl;
}
};
int main() {
Car myCar("Genesis");
return 0;
}
(3) 출력 결과:
Genesis 자동차가 생성되었습니다.
Genesis 자동차가 소멸되었습니다.
5. 접근 지정자 (Access Specifiers)
(1) 접근 지정자의 종류
- public: 어디서나 접근 가능
- private: 클래스 내부에서만 접근 가능 (외부에서는 접근 불가)
- protected: 클래스 내부와 상속받은 클래스에서만 접근 가능
(2) 예제: 캡슐화 활용하기
class Account {
private:
int balance; // private으로 외부 접근 금지
public:
// 생성자
Account(int initial_balance) {
balance = initial_balance;
}
// balance에 접근하기 위한 메서드 (Getter)
int getBalance() {
return balance;
}
// balance를 수정하기 위한 메서드 (Setter)
void deposit(int amount) {
if (amount > 0) balance += amount;
}
};
int main() {
Account myAccount(1000);
myAccount.deposit(500);
cout << "잔액: " << myAccount.getBalance() << endl; // 잔액: 1500
return 0;
}
728x90