C++ 포인터란? 주소와 역참조부터 동적 메모리 할당까지
프로그램에서 사용하는 변수와 객체는 메모리의 특정 위치에 저장됩니다. 일반 변수에는 정수나 문자와 같은 값이 저장되지만, 포인터(Pointer)에는 다른 데이터가 위치한 메모리 주소를 저장할 수 있습니다. int number = 10; int* pointer = &number; 위 코드에서…
Series Archive
C++의 문법 자체를 설명하기 보다는 왜 이런 구조가 필요한지, 내부에서 어떤 일이 일어나는지, 그리고 실제 게임 개발과 엔진 개발에서 어떻게 활용되는지를 중심으로 정리하는 카테고리입니다.
프로그램에서 사용하는 변수와 객체는 메모리의 특정 위치에 저장됩니다. 일반 변수에는 정수나 문자와 같은 값이 저장되지만, 포인터(Pointer)에는 다른 데이터가 위치한 메모리 주소를 저장할 수 있습니다. int number = 10; int* pointer = &number; 위 코드에서…
C++에서는 변수를 선언할 때 일반적으로 변수의 타입을 직접 작성합니다. int number = 10; double speed = 5.5; const char* npcName = "Toto"; 하지만 변수의 초기화 값만 보아도 타입을 명확하게 알 수 있는 경우가 있습니다.…
C++ 코드를 작성하다 보면 같은 타입을 여러 곳에서 반복해서 사용하거나, 함수 포인터처럼 선언이 복잡한 타입을 다뤄야 할 때가 있습니다. 예를 들어 다음과 같은 함수 포인터 선언은 한눈에 의미를 파악하기 쉽지 않습니다. int (*function)(char, double);…
함수를 호출하면 프로그램은 함수에 전달할 인자를 준비하고, 함수의 코드를 실행한 뒤 다시 호출한 위치로 돌아옵니다. 이러한 함수 호출에는 일정한 비용이 발생합니다. 함수의 크기가 매우 작고 자주 호출된다면 함수 호출에 필요한 작업이 함수 본문을 실행하는…
C++ 소스 파일에 코드를 작성했다고 해서 컴퓨터가 그 내용을 바로 실행할 수 있는 것은 아닙니다. 우리가 작성한 C++ 코드는 빌드 과정을 거쳐 기계어로 변환되고, 다른 소스 파일 및 라이브러리와 결합된 뒤 하나의 실행 파일이…
C++ 학습을 시작하려면 먼저 소스 코드를 작성하고 실행할 수 있는 개발 환경이 필요합니다. 이번 글에서는 Visual Studio 프로젝트의 기본 경로를 설정하고, 콘솔에 문자열을 출력하는 첫 번째 C++ 프로그램을 작성해 보겠습니다. 그리고 예제에 사용한 #include,…
Unity 개발자가 C++ 게임 엔진 구조를 공부하면서 게임 루프, 객체 관리, 메모리 구조를 더 깊게 이해하는 과정을 표현한 이미지Unity를 활용해 게임을 개발하면 초반에는 대부분의 기능을 빠르게 구현할 수 있습니다. 캐릭터 이동, 충돌 처리, UI,…
게임이나 프로그램을 개발하다보면 동적으로 메모리가 필요할 때가 있습니다. 이때 보통은 객체가 필요하면 생성하고, 필요 없어지면 제거하면 된다고 생각하게 됩니다. 이렇게 필요할 때 new로 필요한 메모리를 할당하고, 모두 사용한 객체는 delete로 해제해 사용하는 방식은 대부분의…
이번에는 placement new라는 문법에 대해 살펴보려고 합니다. placement new는 일반적으로 사용하는 new와 문법에서 다소 차이가 있습니다. 사용 방법은 아래와 같습니다. new (memory) Actor(); new와 타입 사이에 메모리 주소가 들어가는 특이한 형태의 문법입니다. 저도 처음…
게임 개발을 하거나 게임 개발 공부를 하다보면, 힙에서 사용할 객체를 생성할 때 자연스럽게 new를 사용하게 됩니다. 사전에 객체 생성 시점을 정확하게 예측하기 어렵고, 언제 해제될지도 명확하지 않은 상황이라면 힙 메모리를 사용하는 것이 맞습니다. new를…