C++는 절차적 프로그래밍을 넘어 객체지향 프로그래밍(OOP)을 지원하는 언어.
이 장에서는 C++의 핵심 개념인 객체(Object), 클래스(Class), 인스턴스(Instance), 생성자(Constructor), 소멸자(Destructor) 등을 살펴보자.
3.1 객체(Object)란?
C++에서 객체(Object)는 데이터(변수)와 해당 데이터를 다룰 수 있는 함수(메서드)를 하나로 묶은 단위입니다.
- C++의 객체는 클래스(Class)를 기반으로 생성됩니다.
- 객체 = 변수 + 메서드(함수)
- 객체를 사용하면 코드를 재사용하고 데이터를 보호할 수 있음 (캡슐화, 상속, 다형성 지원)
📌 객체의 핵심 개념
1️⃣ 객체는 현실 세계의 개념을 코드로 표현한 것
2️⃣ 클래스(Class)를 통해 객체를 정의하고 생성
3️⃣ 객체 내부의 데이터를 보호하기 위해 접근제어자를 사용 (private, public 등)
📌 객체 예시
- 자동차 객체 → 속성: 색상, 브랜드, 속도 / 동작: 가속, 감속
- 학생 객체 → 속성: 이름, 나이, 학번 / 동작: 공부, 출석
3.2 클래스(Class)란?
클래스(Class)는 객체를 만들기 위한 설계도(틀)입니다.
즉, 객체를 생성하기 위한 청사진(템플릿) 역할을 합니다.
📌 클래스 선언 예시
#include <iostream>
using namespace std;
// 클래스 선언 (설계도)
class Car {
public:
string brand; // 멤버 변수
int speed;
void accelerate() { // 멤버 함수
speed += 10;
cout << "현재 속도: " << speed << "km/h" << endl;
}
};
int main() {
Car myCar; // 클래스 기반 객체 생성
myCar.brand = "BMW";
myCar.speed = 0;
cout << "자동차 브랜드: " << myCar.brand << endl;
myCar.accelerate(); // 객체의 멤버 함수 호출
}
📌 정리
✅ 클래스는 객체를 만들기 위한 설계도
✅ 객체는 클래스를 기반으로 생성됨
✅ 클래스에는 변수(속성)과 함수(동작)가 포함됨
3.3 인스턴스(Instance)란?
인스턴스(Instance)란 클래스를 기반으로 실제로 생성된 객체를 의미합니다.
즉, 클래스는 설계도, 인스턴스는 그 설계도로 만든 실제 객체입니다.
📌 인스턴스 생성
Car myCar; // Car 클래스의 인스턴스 생성
📌 클래스와 인스턴스의 차이
개념 | 설명 |
클래스(Class) | 객체를 만들기 위한 설계도 |
인스턴스(Instance) | 클래스를 기반으로 실제로 생성된 객체 |
📌 클래스와 인스턴스 예제
Car car1; // 첫 번째 인스턴스
Car car2; // 두 번째 인스턴스
- car1과 car2는 서로 다른 객체(인스턴스)이며, 독립적으로 동작함.
3.4 생성자(Constructor)
생성자(Constructor)는 객체가 생성될 때 자동으로 실행되는 함수입니다.
- 객체의 초기값을 설정하는 역할
- 클래스 이름과 동일한 함수명
- 반환 타입 없음 (void도 사용 X)
📌 생성자 예제
#include <iostream>
using namespace std;
class Car {
public:
string brand;
int speed;
// 생성자 정의
Car(string b, int s) {
brand = b;
speed = s;
cout << "자동차 객체 생성됨: " << brand << " 속도: " << speed << "km/h" << endl;
}
};
int main() {
Car car1("BMW", 0); // 생성자가 자동으로 호출됨
Car car2("Tesla", 10);
}
📌 실행 결과
자동차 객체 생성됨: BMW 속도: 0km/h
자동차 객체 생성됨: Tesla 속도: 10km/h
3.5 소멸자(Destructor)
소멸자(Destructor)는 객체가 소멸될 때 자동으로 실행되는 함수입니다.
- 객체가 더 이상 필요 없을 때 메모리를 정리하는 역할
- 클래스 이름 앞에 ~(틸드)를 붙여 사용
- 반환 타입 없음, 매개변수 없음
📌 소멸자 예제
#include <iostream>
using namespace std;
class Car {
public:
string brand;
// 생성자
Car(string b) { brand = b; }
// 소멸자
~Car() {
cout << brand << " 객체 소멸됨!" << endl;
}
};
int main() {
Car car1("BMW");
Car car2("Tesla");
return 0; // 프로그램 종료 시 소멸자 자동 호출
}
📌 실행 결과
BMW 객체 소멸됨!
Tesla 객체 소멸됨!
3.6 접근 지정자 (Access Specifier)
C++에서는 클래스 내부 변수(멤버 변수)와 함수(멤버 함수)의 접근 범위를 설정할 수 있습니다.
이를 접근 지정자(Access Specifier)라고 합니다.
📌 접근 지정자 종류
접근 지정자 | 설명 |
public | 모든 곳에서 접근 가능 |
private | 클래스 내부에서만 접근 가능 (외부 접근 불가) |
protected | 클래스 내부 및 상속받은 클래스에서만 접근 가능 |
📌 접근 지정자 예제
#include <iostream>
using namespace std;
class Car {
private:
string brand; // private 멤버 변수
public:
void setBrand(string b) { // public 멤버 함수
brand = b;
}
void getBrand() {
cout << "자동차 브랜드: " << brand << endl;
}
};
int main() {
Car car;
car.setBrand("Tesla"); // ✅ OK (public 멤버 함수 사용)
car.getBrand();
// car.brand = "BMW"; ❌ 오류 발생 (private 변수는 직접 접근 불가능)
}
📌 3장 정리
✅ 객체(Object)는 데이터(변수)와 동작(함수)을 포함하는 단위
✅ 클래스(Class)는 객체를 생성하는 설계도
✅ 인스턴스(Instance)는 클래스를 기반으로 실제로 생성된 객체
✅ 생성자(Constructor)는 객체 생성 시 자동 실행되는 함수
✅ 소멸자(Destructor)는 객체가 소멸될 때 자동 실행되는 함수
✅ 접근 지정자(public, private, protected)를 활용해 데이터 보호 가능
'SW > C++' 카테고리의 다른 글
6장. 복사 생성자와 임시 객체 (0) | 2025.02.26 |
---|---|
5장. 클래스 (0) | 2025.02.26 |
4장. 함수와 네임스페이스 (0) | 2025.02.26 |
2장. C와 C++의 차이 (0) | 2025.02.11 |
1장. C만 배워본 내가 C++을 시작 (0) | 2025.02.11 |