클래스는 객체를 생성하기 위한 청사진(설계도)이다.
멤버 변수(데이터)와 멤버 함수(기능)를 정의한 사용자 정의 타입이다.
class Car {
public:
string brand;
int speed;
void drive() {
cout << brand << " is driving at " << speed << " km/h." << endl;
}
};
위 예시는 Car라는 클래스를 정의한 것으로, 브랜드와 속도를 저장하고 운전하는 기능을 포함한다.
하지만 이 시점에서는 아직 메모리에 존재하지 않는다.
객체는 클래스에 기반해 실제 메모리에 생성된 것이다.
클래스를 바탕으로 만들어진 실체로, 변수와 함수들을 사용할 수 있다.
Car myCar; // Car 클래스의 객체 생성
myCar.brand = "Hyundai";
myCar.speed = 100;
myCar.drive(); // 출력: Hyundai is driving at 100 km/h.
인스턴스는 객체와 거의 같은 의미이지만, 클래스를 기반으로 생성된 '특정한 하나의 객체'를 강조할 때 사용하는 용어이다.
즉, 인스턴스는 객체의 하위 개념으로 보면 된다.
Car car1;
Car car2;
car1, car2는 모두 Car 클래스의 인스턴스이다.
즉, 하나의 클래스(Car)에서 여러 인스턴스(car1, car2)를 만들 수 있다.
"객체(object)"와 "인스턴스(instance)"는 거의 같은 의미로 쓰이지만, 약간의 의미 차이가 있다.
"모든 인스턴스는 객체이지만, 모든 객체가 인스턴스는 아니다."
| 용어 | 설명 |
|---|---|
| 객체(Object) | 클래스 또는 구조체 등으로부터 생성된 메모리 상의 실체. 일반적으로 "오브젝트"는 넓은 개념. |
| 인스턴스(Instance) | 특정 클래스에서 생성된 특정 객체를 지칭할 때 사용. 클래스와의 관계를 강조할 때 사용. |
class Car {
public:
string brand;
int speed;
};
Car car1; // Car 클래스의 인스턴스 (== 객체)
Car car2; // 또 다른 인스턴스
car1은 Car 클래스의 객체이며, 동시에 Car 클래스의 인스턴스이다.
다시 말해, 객체이자 인스턴스이다.
프로그래밍 일반 문맥에서는 보통 객체(object) 라고 부른다.
클래스와의 관계를 강조할 땐 인스턴스(instance) 라고 부른다.
예)
"Car 클래스의 인스턴스를 하나 생성한다." → 클래스와의 관계에 집중
"객체를 생성했다." → 좀 더 일반적인 표현
예를 들어, 아래처럼 구조체로 만든 것도 객체이다:
struct Point {
int x, y;
};
Point p1; // 이건 객체(object)이지만, 인스턴스(instance)라는 말은 잘 안 씀
클래스가 아닌 일반 타입(예: 배열, 구조체, 포인터)로 만든 것도 객체라고 하지만,
"인스턴스"라는 말은 클래스 기반에서만 주로 사용.
| 구분 | 객체 (Object) | 인스턴스 (Instance) |
|---|---|---|
| 의미 | 메모리에 존재하는 모든 실체 | 특정 클래스 기반으로 만들어진 객체 |
| 관계 | 더 넓은 개념 | 객체의 부분집합 |
| 사용 | 문맥 일반적인 실체를 지칭할 때 | 클래스 기반임을 강조할 때 |