TIL(Today I Learned)

2026/06/26

BreadMushroom 2026. 6. 26. 20:56

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