문제 12 · 인스턴스 멤버와 클래스 멤버
문제 12 [4점]
아래 제시어에 대한 설명을 예시와 함께 서술하시오.
인스턴스 멤버instance member와 클래스 멤버class member, 정적 멤버
풀이 및 해설
인스턴스 멤버는 객체(인스턴스)마다 각각 따로 존재하는 멤버입니다. 객체를 만들 때마다 별도의 저장 공간이 생기며, 객체.멤버로 접근합니다. 한 객체의 인스턴스 멤버를 바꿔도 다른 객체에는 영향이 없습니다.
**클래스 멤버(정적 멤버, static)**는 개별 객체가 아니라 클래스 전체에 하나만 존재하며, 모든 객체가 공유합니다. 객체를 하나도 만들지 않아도 존재하고, 클래스명::멤버로 접근할 수 있습니다. 정적 멤버 변수는 클래스 밖에서 한 번 정의해 주어야 합니다.
cpp
class Counter {
public:
int id; // 인스턴스 멤버: 객체마다 별도
static int total; // 클래스 멤버: 모든 객체가 공유
Counter() {
total++; // 객체가 생길 때마다 공유값 증가
id = total; // 이 객체만의 번호
}
};
int Counter::total = 0; // 정적 멤버 정의id(인스턴스 멤버): 객체a,b,c가 각각1,2,3을 가짐.total(클래스 멤버): 세 객체가 공유하며3하나만 존재.Counter::total로도 접근.
정리하면, "각 객체의 상태"는 인스턴스 멤버로, "클래스 전체에서 공통으로 관리할 값(개수·상수 등)"은 클래스 멤버로 둡니다.