티스토리 뷰
반응형
✅ 정적 멤버 변수란?
C++ 객체지향에서 '공통 정보'를 다루는 정확한 방법
1️⃣ 문제 제기: 객체지향은 왜 "공통 정보"를 다루기 어려운가?
C++에서 클래스를 만들면, 보통 다음과 같이 코딩합니다:
class Person {
public:
string name;
int age;
};
이렇게 만들면 `Person` 객체가 100개면, 각각 `name`, `age`를 따로 가집니다.즉, 객체마다 자기 데이터만 존재하게 됩니다.
✔️ 이것이 객체지향의 기본 원칙입니다:
“객체는 자기 상태를 자기 안에 가진다.”그러나 이 원칙만으로는 해결되지 않는 상황도 존재합니다.
2️⃣ 어떤 정보는 '객체 개별 정보'가 아니다
예를 들어 다음과 같은 정보는 어떨까요?
- 모든
Person
이 말할 때 사용하는 공통 언어 ("Korean"
) - 모든
NetworkClient
가 접속하는 공통 서버 주소 - 프로그램의 버전 번호
- 생성된 전체 객체 수
이런 정보는 객체 내부가 아닌 클래스 자체에 속해야 하는 정보입니다.
3️⃣ 해결책: 그 정보를 "클래스에다 직접 붙이자" → 정적 멤버 변수
C++은 이런 요구를 충족시키기 위해 정적 멤버 변수(static member variable)를 제공합니다.
class Person {
public:
static string language; // 모든 객체가 공유
};
정적 멤버 변수의 주요 특징:
반응형
4️⃣ 예제: 왜 이게 필요한지 실제로 보여주기
🎯 문제: 모든 Person 객체는 공통 언어(language)를 알아야 한다
class Person {
public:
string name;
static string language;
void speak() {
cout << name << " speaks " << language << endl;
}
};
// 클래스 외부에서 정의
string Person::language = "Korean";
int main() {
Person p1, p2;
p1.name = "Alice";
p2.name = "Bob";
p1.speak(); // Alice speaks Korean
p2.speak(); // Bob speaks Korean
Person::language = "English";
p1.speak(); // Alice speaks English
p2.speak(); // Bob speaks English
}
✅ 결과 해석- 각 객체는 독립적이지만
- 정적 변수
language
는 하나의 메모리를 참조 - 누가 바꾸든 전체에 즉시 반영됨
5️⃣ 정적 멤버 변수를 쓸 때 생기는 장점들
6️⃣ 상위 객체로 해결하면 안 되나?
“Store, Config 같은 상위 객체를 만들어서 공유하면 되지 않나요?”
✔ 가능합니다. 복잡한 시스템에서는 그게 더 나을 수도 있습니다.
하지만 다음 상황이라면 정적 멤버 변수가 더 적합합니다:
- 정보가 단순하여 별도 클래스가 필요 없는 경우
- 객체가 독립적으로 생성되는데 공통 설정이 필요한 경우
- 그 정보가 클래스의 속성처럼 간주되는 경우
class App {
public:
static constexpr const char* VERSION = "1.2";
};
7️⃣ 정적 멤버 변수의 사용법 요약
✅ 선언: 클래스 내부에서
class MyClass {
public:
static int count;
};
✅ 정의: 클래스 외부에서
int MyClass::count = 0;
✅ 접근: 클래스 이름으로
MyClass::count++;
반응형
✅ 최종 요약
💬 한 문장 정리
정적 멤버 변수는 객체가 아닌 ‘클래스 자체’가 가져야 할 정보를 정확하게 표현하는 도구입니다.
모든 객체가 공유해야 하는 단 하나의 데이터가 필요할 때, 이보다 더 명확한 구조는 없습니다.
반응형
'프로그래밍 > 홍정모의 따라배우는 C++' 카테고리의 다른 글
클래스 friend 선언, 왜 쓰는가? C++ (0) | 2025.05.18 |
---|---|
정적 멤버 함수(static member function)이란? C++ (0) | 2025.05.18 |
클래스에서 const 오버로딩 (0) | 2025.05.13 |
왜 인자 전달 앞에 붙이는 const를 붙일까? (0) | 2025.05.13 |
클래스에서 Const란? 1편 (0) | 2025.05.13 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- C
- 강화학습
- 티스토리챌린지
- 윤성우
- 인프런
- 뇌와행동의기초
- stl
- 일본어문법무작정따라하기
- 백준
- 오블완
- 류근관
- 데이터분석
- 여인권
- 심리학
- 열혈프로그래밍
- 정보처리기사
- K-MOOC
- 회계
- 보세사
- 파이썬
- 인지부조화
- 코딩테스트
- 통계학
- 일본어
- 일문따
- 통계
- c++
- C/C++
- 사회심리학
- Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함