C++에서 struct와 class는 거의 동일한 개념이지만, 차이점이 존재합니다.
struct TestStruct
{
int _a;
int _b;
};
class TestClass
{
int _a;
int _b;
};
struct | class | |
|---|---|---|
| 기본 접근 지정자 | public | private |
| 사용 목적 | 데이터 묶음 표현 | 객체 지향 프로그래밍 |
int main()
{
TestStruct ts;
ts._a = 10; // struct는 기본 접근 지정자가 public이므로 직접 접근 가능
TestClass tc;
// tc._a = 10; // class는 기본 접근 지정자가 private이므로 직접 접근 불가 (컴파일 오류)
}
C++은 C 언어에서 발전했기 때문에, struct를 유지하여 C 언어와의 호환성을 고려했습니다.static 키워드는 정적(고정된)이라는 뜻을 가지며, 클래스 내부에서 정적 변수를 선언하면 모든 객체가 공유하는 변수가 됩니다.
class Marine
{
public:
int _hp;
void TakeDamage(int damage)
{
_hp -= damage;
}
static void SetAttack()
{
s_attack = 100;
// _hp = 100; // 오류! 정적 함수는 멤버 변수에 접근 불가
}
static int s_attack;
};
// static 변수는 클래스 외부에서 정의해야 함
int Marine::s_attack = 0;
static int s_attack;는 클래스의 모든 객체가 공유하는 변수입니다.Marine::s_attack = 100;처럼 클래스 이름을 통해 접근할 수 있습니다.Marine 객체가 여러 개 생성되더라도, s_attack은 하나의 값만을 가지며 모든 객체가 이를 공유합니다.static void SetAttack();은 객체 없이 호출 가능합니다._hp)에 접근할 수 없습니다. 함수 내부에서 static 변수를 선언하면 프로그램이 종료될 때까지 유지됩니다.
int GenerateId()
{
static int s_id = 1; // 정적 지역 변수
return s_id++; // 함수 호출 시 값 증가
}
int main()
{
cout << GenerateId() << endl; // 1
cout << GenerateId() << endl; // 2
cout << GenerateId() << endl; // 3
}
#include <iostream>
using namespace std;
class Marine
{
public:
void TakeDamage(int damage)
{
_hp -= damage;
}
static void SetAttack()
{
s_attack = 100;
// _hp = 100; // 오류! 정적 함수는 멤버 변수에 접근할 수 없음
}
public:
int _hp;
static int s_attack;
};
// static 변수는 반드시 클래스 외부에서 초기화해야 함
int Marine::s_attack = 0;
int GenerateId()
{
static int s_id = 1; // 정적 지역 변수
return s_id++;
}
int main()
{
// struct vs class 차이 확인
struct TestStruct
{
int _a;
int _b;
};
class TestClass
{
int _a;
int _b;
};
TestStruct ts;
ts._a = 10; // struct는 기본적으로 public
TestClass tc;
// tc._a = 10; // class는 기본적으로 private (컴파일 오류 발생)
// static 변수 활용 예시
Marine m1;
m1._hp = 40;
Marine::s_attack = 6;
Marine m2;
m2._hp = 40;
Marine::SetAttack();
// 정적 지역 변수 확인
cout << GenerateId() << endl;
cout << GenerateId() << endl;
cout << GenerateId() << endl;
return 0;
}
struct와 class의 차이점:struct는 기본 접근 지정자가 publicclass는 기본 접근 지정자가 privatestruct는 주로 데이터 묶음을 표현할 때 사용.class는 객체 지향 프로그래밍의 개념을 나타낼 때 사용.정적 변수 (static int s_attack;)
Marine::s_attack = 100;).정적 함수 (static void SetAttack();)
Marine::SetAttack();).static 변수는 한 번 생성되면 프로그램이 종료될 때까지 유지됨.