C++ Rookiss Part1 C++ 프로그래밍 입문 : 객체지향 마무리 복습
🙇♀️객체지향 마무리 복습
- struct vs class
- struct는 기본 접근 지정자가 public이고 class는 기본 접근 지정자가 private이다
- static 변수, static 함수 (static = 정적 = 고정된)
🪐struct vs class
기본 접근자가 무엇인지 다르고 나머지는 거의 모두 비슷하게 작용한다.
비슷하게 작용하는데 왜 필요할까?
정확한 이유는 모르지만 C++은 C에서 발전되어 파생되었기 때문에 C에서의 struct(구조체 : 자료 모음)이 C++에서의 class(객체지향)와 비슷하게 된것 같다.
비슷하게 작용하지만 만들어진 이유를 생각하여서 struct는 단순 자료 모음집으로 class는 객체지향적으로 사용할 필요가 있어 보인다.
🪐static 변수, static 함수
- static 변수는 어떤 메모리?
- 초기화 하면 .data
- 초기화 안하면 .bss
class Marine
{
public:
void TakeDamage(int damage) // 일반 멤버 함수
{
_hp -= damage;
}
static void SetAttack(int attack) // static 멤버 함수
{
s_attack = attack;
}
public:
// 특정 마린 객체에 종속적
int _hp;
// 특정 마린 객체와 무관
// 마린이라는 '클래스' 자체와 연관
static int s_attack;
};
int Marine::s_attack = 0;
int main()
{
// 마린 공격력 업그레이드!
Marine::s_attack = 7;
Marine::SetAttack(8);
}
class내에서 객체 하나하나 값을 변경하는게 아니라 모두가 변경되는 그런 변수들을 static으로 잡으면 쉽게 관리 가능하다
static은 함수로도 만들수 있는데 이때 변수는 static변수만 사용가능!
int Generateld()
{
// 생명주기: 프로그램 시작/종료 (메모리에 항상 올라가 있음)
// 가시범위: 함수 내부
// 정적 지역 객체
static int s_id = 1;
return s_id++;
}
int main()
{
// 스택아님. .data 영역
static int id = 10;
int a = id;
return 0;
}
static의 생명주기는 프로그램을 따라가지만 가시 범위는 함수내부에서 그친다.
id발급 등에서 유용하게 사용된다.