TIL 쓰기전 항상 명심 할 것
작성 타이밍: 공부가 다 끝나고 쓰려고 하면 지쳐서 안쓴다. 모르는게 있을 때 즉시 적기
작성 강도: 메모가 절대로 '공부'나 '또 하나의 짐'처럼 무거워지면 안됨.
[개념] 접근 제어자 (private / public)★ ★ ★ ★ ★
- 한 줄 요약: 자판기로 비유하면 클래스 내부 멤버 변수를 유리(private)로 숨기고, 안전한 동전 구멍(public 함수)을 통해서만 값을 바꾸게 강제하여 버그를 막는 설계
- 언제 중요한지:변수에 말도 안 되는 예외 값(예: HP가 음수가 되거나, 소지 골드가 마이너스가 되는 현상)이 들어와서시스템이 터지는 것을 막고 싶을 때.
- 코드:
// ❌ [Before] 변수가 public으로 열려있어 데이터가 오염되는 경우
class APlayer {
public:
int HP = 100;
int Defense = 10;
};
void ApplyDamage(APlayer& Player, int RawDamage) {
// 강력한 보스 몬스터가 공격력 200으로 공격한 상황
Player.HP -= (RawDamage - Player.Defense);
// 🚨 결과: Player.HP가 -90이 됨!
// 변수가 public이라 제동 장치 없이 음수가 그대로 대입되어 버그 발생.
}
// [After] 변수를 private으로 숨기고 안전장치(함수)를 구축한 경우
class APlayer {
private:
int HP = 100;
int Defense = 10;
public:
// 외부에서는 오직 이 함수를 통해서만 데미지를 줄 수 있음
void TakeDamage(int RawDamage) {
int FinalDamage = RawDamage - Defense;
if (FinalDamage < 0) FinalDamage = 0; // 음수 데미지 방지
HP -= FinalDamage;
// 🛡️ 최소 보장선(방어벽) 구축
if (HP < 0) {
HP = 0;
}
}
// 값을 안전하게 읽어갈 수 있도록 Getter 제공
int GetHP() const { return HP; }
};
// 이제 외부(전투 시스템 등)에서는 안전하게 함수만 호출하면 됨
void ApplyDamage(APlayer& Player, int RawDamage) {
Player.TakeDamage(RawDamage);
// 결과: RawDamage가 200이 들어와도 Player.HP는 안전하게 0에서 멈춤!
}
'TIL(Today I Learned)' 카테고리의 다른 글
| 2026/06/25 (0) | 2026.06.25 |
|---|---|
| 2026/06/24 (0) | 2026.06.24 |
| 2026/06/19 (0) | 2026.06.19 |
| 2026/06/18 (0) | 2026.06.18 |
| 2026/06/16 (0) | 2026.06.16 |