this 포인터가 무엇이고, 왜 멤버 함수가 “객체를 스스로 수정”할 수 있는지함수(&객체, ...) 형태라는 감각을 가질 수 있다.this가 무엇을 가리키는지(= 호출한 객체의 주소) 말로 설명할 수 있다.class는 객체를 만들기 위한 설계도(타입 정의) 입니다.class Knight { ... }; 자체는 “규칙”일 뿐, 그 순간엔 아직 k1 같은 실물이 없어서 메모리도 없다고 보면 됩니다. [클래스 = 설계도/붕어빵 틀] [객체 = 인스턴스/붕어빵]
┌──────────────┐ ┌──────────────┐
│ Knight │ "뿅" 찍어냄 │ k1 (객체1) │
│ - _hp │ ───────────────► │ hp: 100 │
│ - _attack │ │ attack: 10 │
│ - _defence │ └──────────────┘
│ + Attack() │ ┌──────────────┐
│ + HealMe() │ ───────────────► │ k2 (객체2) │
└──────────────┘ │ hp: 80 │
(메모리 없음) │ attack: 12 │
└──────────────┘
(스택/힙에 실제 할당)
| 구분 | 클래스 | 객체 |
|---|---|---|
| 개념 | 설계도(타입) | 클래스 기반 실체(인스턴스) |
| 메모리 | 없음(규칙만) | 스택/힙에 할당됨 |
| 목적 | 생성 규칙 정의 | 실제 상태 보관 + 행동 수행 |
Knight k1; → k1은 “나이트 타입의 실물 객체”이며, 보통 스택에 생성됩니다._hp, _attack, _defence 등_hp와 k2의 _hp는 서로 다른 값)Attack(), HealMe(int), Die() 등)class Player {
public:
void Attack();
void HealMe(int value);
int _hp;
int _attack;
int _defence;
};
this 가 전달됩니다.this는 “현재 멤버 함수를 호출한 객체의 주소”입니다._hp += value;는 내부적으로 this->_hp += value;처럼 동작합니다.예: 생성자에서 이름 충돌이 날 때 this->가 특히 자주 보입니다.
class Knight {
public:
Knight(int hp, int attack, int defence) {
this->_hp = hp;
this->_attack = attack;
this->_defence = defence;
}
private:
int _hp;
int _attack;
int _defence;
};
참고:
this는 “멤버 함수(비정적)”에서만 의미가 있습니다. (정적 함수엔this가 없음)
┌─────────────────────────────────────────────────────────────────────────────┐
│ [스택/힙 영역] (객체 데이터) [코드 영역] (함수 코드, 1번만) │
├─────────────────────────────────────────────────────────────────────────────┤
│ k1: {_hp=100, _attack=10, _defence=2} ──┐ Knight::Attack() │
│ k2: {_hp= 80, _attack=12, _defence=3} ──┼─ Knight::HealMe(int) │
│ └─ Knight::Die() │
└─────────────────────────────────────────────────────────────────────────────┘
main()에서 호출: Knight::HealMe(int value) 내부:
k1.HealMe(10); ───► this == &k1
this->_hp += value;
k1.HealMe(10)과 k2.HealMe(10)이 같은 함수 코드를 쓰는데도 결과가 다른 이유는?this는 무엇을 가리키며, 왜 멤버 함수에서 자연스럽게 멤버 변수를 수정할 수 있을까?