티스토리 뷰
🟩 오늘의 목표
- 변수의 주소 추출과 포인터 변수의 선언 및 연결 원리를 복습한다.
- 역참조(Dereference)를 통한 데이터 읽기와 원격 수정 기법을 복습한다.
- nullptr 안전장치와 배열-포인터 간의 긴밀한 관계를 복습한다.
- 레퍼런스(참조자)의 개념과 상수 레퍼런스를 통한 원본 보호 방식을 복습한다.
- 포인터와 레퍼런스의 초기화 방식 및 동작 차이점을 명확히 비교하고 분석한다.
🟧 1. 포인터의 기초와 주소 연결
🟦 주소 추출과 타입 일치
변수명 앞에 & 연산자를 사용하여 메모리 주소를 추출하는 법을 익혔다. 추출한 주소는 일반 변수가 아닌 해당 타입의 포인터 변수(int*, double*)에만 담을 수 있음을 확인했다. 포인터의 타입과 가리키는 변수의 타입이 반드시 일치해야 한다는 타입 일치(Type Matching) 원칙을 복습했다.
🟧 2. 역참조를 통한 데이터 제어
🟦 값 읽기와 원격 수정
포인터 변수 앞에 *를 붙이는 역참조 연산자를 통해 주소에 담긴 값을 읽거나 수정하는 법을 습득했다. 포인터를 이용해 값을 수정하면 가리키고 있는 원본 변수의 데이터가 직접 변경되는 '리모컨' 원리를 이해했다. 하나의 변수에 여러 포인터를 연결하여 제어하는 다중 포인터 활용법도 복습했다.
🟧 3. 포인터의 안전장치와 배열
🟦 nullptr 활용
포인터가 아무것도 가리키지 않을 때 메모리 오염을 방지하기 위해 nullptr로 초기화하는 법을 복습했다. 역참조를 수행하기 전 if (ptr != nullptr)와 같이 안전 검사를 수행하여 프로그램이 예기치 않게 종료되는 상황을 방지하는 실무 패턴을 익혔다.
🟦 배열과 포인터의 관계
배열의 이름 자체가 배열 첫 번째 요소의 주소와 같다는 점을 확인했다. 배열 이름을 포인터에 바로 대입할 수 있으며, 포인터 변수임에도 배열처럼 인덱스(ptr[1])를 사용하여 데이터에 접근할 수 있는 유연성을 복습했다.
🟧 4. 레퍼런스와 상수 참조
🟦 별명으로서의 레퍼런스
기존 변수의 또 다른 이름인 레퍼런스(&)의 특징을 복습했다. 레퍼런스는 포인터와 달리 선언과 동시에 반드시 초기화해야 하며, 별명을 통해 값을 바꾸면 원본 데이터가 실시간으로 동기화되어 변경됨을 확인했다.
🟦 상수 레퍼런스 (const &)
const를 붙여 선언하는 상수 레퍼런스는 '읽기 전용 별명'임을 이해했다. 원본 데이터의 크기가 클 때 효율적으로 데이터를 참조하면서도, 별명을 통한 수정을 금지하여 원본 데이터를 안전하게 보호하는 방식을 복습했다.
🟧 5. 포인터와 레퍼런스의 초기화 및 특징 비교
🟦 초기화 의무와 대상 변경
포인터는 선언 시 초기화하지 않아도 문법적 에러가 발생하지 않으며, nullptr을 대입해 비워두거나 나중에 가리키는 대상을 자유롭게 바꿀 수 있음을 확인했다. 반면 레퍼런스는 선언과 동시에 반드시 실존하는 변수와 연결해야 하며, 한 번 연결된 별명은 절대로 다른 변수를 가리키도록 변경할 수 없다는 차이점을 학습했다.
🟦 메모리 점유와 접근 방식
포인터는 주소값을 저장하기 위한 별도의 메모리 공간(64비트 기준 8바이트)을 차지하지만, 레퍼런스는 내부적으로 주소를 활용할 뿐 실제로는 원본 변수와 동일한 주소를 공유하는 '별명'일 뿐이라는 점을 이해했다. 역참조 시 포인터는 * 연산자가 필요하지만 레퍼런스는 일반 변수처럼 이름만으로 접근할 수 있다는 사용상의 편의성도 비교했다.
🟫 오늘 느낀 점
튜터님과의 반복 타이핑 세션을 통해 포인터와 레퍼런스의 초기화 제약과 메모리 동작 차이를 완벽히 이해하게 되었고 C++의 메모리 제어 방식에 대한 자신감을 얻었다.
'내일배움캠프 Unreal_7기 > 본캠프' 카테고리의 다른 글
| TIL - 24일차 (0) | 2025.12.31 |
|---|---|
| TIL - 23일차 (0) | 2025.12.30 |
| TIL - 21일차 (0) | 2025.12.29 |
| TIL - 20일차 (0) | 2025.12.26 |
| TIL - 19일차 (0) | 2025.12.24 |

