1. 포인터(Pointer) vs 레퍼런스(Reference)
클래스 객체를 가리키거나 전달할 때 사용하는 두 가지 방식입니다.
- 포인터 (Battery* ptr):
- 개념: 객체의 '메모리 주소'를 저장하는 변수입니다.
- 특징: nullptr을 가질 수 있고, 나중에 다른 객체를 가리키도록 바꿀 수 있습니다.
- 접근: 화살표 연산자(->)를 사용하여 멤버에 접근합니다. (예: ptr->useBattery())
- 레퍼런스 (Battery& ref):
- 개념: 기존 객체에 붙이는 '별명(Alias)'입니다.
- 특징: 선언과 동시에 반드시 초기화해야 하며, 한 번 정해지면 죽을 때까지 그 객체만 가리킵니다.
- 접근: 일반 객체처럼 점(.) 연산자를 사용합니다. (예: ref.useBattery())
2. 클래스와 포인터/레퍼런스의 결합
- 동적 할당과 포인터: new 연산자는 객체를 만들고 그 주소를 반환하기 때문에 반드시 포인터로 받아야 합니다. (Battery* b = new Battery();)
- 매개변수 전달: 클래스 객체는 덩치가 크기 때문에, 함수에 보낼 때 복사본을 만드는 대신 레퍼런스나 포인터로 전달하여 메모리 효율을 높입니다.
- void Charge(Battery& b) (권장: 별명을 통해 직접 수정)
- void Charge(Battery* b) (주소를 넘겨서 수정)
3. 객체지향 핵심 요약 (복습 포함)
- 캡슐화: private과 Getter/Setter로 데이터를 보호함.
- 생성자/소멸자: 객체의 시작과 끝을 관리함. (new 시 delete 필수)
- 다형성 & 추상 클래스:
- 부모의 순수 가상 함수(= 0)는 자식의 필수 과제.
- 부모 포인터로 자식 객체들을 일괄 제어 가능.
4. 메모리 할당 방식
- 정적 할당: Battery b; → 스택 영역, 자동 소멸.
- 동적 할당: Battery* b = new Battery(); → 힙 영역, delete로 수동 소멸.
💡 오늘의 최종 회고
"포인터는 주소를 들고 다니는 '이정표'이고, 레퍼런스는 '또 다른 이름'이다. 클래스 객체를 다룰 때 이 둘을 적재적소에 사용해야 메모리 낭비 없이 효율적인 게임 로직을 짤 수 있다는 것을 깨달았다. 특히 다형성을 구현할 때 부모 타입의 포인터나 레퍼런스를 사용하는 원리가 이제 명확히 이해된다."
'TIL' 카테고리의 다른 글
| [C++] 함수 오버로딩, 템플릿, 그리고 STL 컨테이너 기초 정리 (0) | 2026.05.06 |
|---|---|
| [C++]객체 지향과 메모리 관리 (0) | 2026.05.04 |
| [TIL] C++ 클래스 기초: 캡슐화와 객체 간 상호작용 (feat. 언리얼 엔진 대비) (0) | 2026.04.29 |
| [UE5] 언리얼 C++: 좌표 이동과 확률 시스템 구현하기 (0) | 2026.04.28 |
| [UE5]가장 가까운 몬스터 추적 UI 및 Is Valid 에러 해결 (0) | 2026.04.27 |