게임 개발자를 위한 C++ 문법

게임 개발자를 위한 C++ 문법 / 1-1 ~ 1-4

jh009 2026. 4. 30. 12:12

1-1. 프로그래밍 기초

Visual Studio = IDE(통합 개발 환경)

 

Resource Files

  • 외부지원이 필요할 때 사용

Header Files

  • 클래스 정의할때
  • 라이브러리 - 가져다가 쓰면됨
  • 사용자정의 - 해더파일에 추가해서 사용

iostream → input output stream → 입출력 스트림

#include <iostream>
< > → C++에서 제공하는 헤더파일


#include " "
" " → 내가 구현한 헤더파일
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
cout → Console out

 

<<, >>는 원래 비트 이동 연산자
cout, cin에서만 입출력 의미로 바뀜


<<  → 출력 cout
>>  → 입력 cin
endl; → 한줄 띄어쓰기

#include <iostream>

using namespace std;

int main() 
{
	cout << "Hello, World" << endl;
	return 0;
}

변수 문법

C++ → 사용 편의성을 위해 메모리에 이름을 붙여서 관리할 수 있게 제공

 

cin → 변수로 할당한 공간에 입력을 받을 때

cout → 변수에 저장된 값을 콘솔에 출력할 때

 

변경 할 수 없게 값 설정

const 사용 (read only)


작업의 구성요소

  • 인자: 작업에 사용되는 외부 값
  • 동작: 어떤 작업을 수행할지 정의
  • 반환: 작업을 수행한 후 최종적으로 외부에 전달할 값을 의미

1-2. 포인터와 레퍼런스

포인터

변수의 주소값을 담을 수 있음

담고 있는 주소값에 해당되는 메모리에 있는 값을 읽거나 수정 가능

 

배열

배열 이름은 주소값을 담고 있음 / 기존 포인터과 마찬가지로 * 연산자를 활용해서 해당 주소에 있는 값을 확인 가능

buf					주소  값

22		→	→		 22   X
					 23   A
                     24   B
                     25   C
                     
buf[0] = X                     
*buf = X                     	
*(buf + 0) = X


buf[k] = *(buf + k)

알아두면 좋음. 
구현을 하다보면 라이브러리에서 구현된 코드, 타인이 구현한 코드를 분석할 때 저런 패턴이 많음.

 

배열과 포인터의 차이

l-value = r-value

 

왼쪽에 오는 원소: l-value

오른쪽에 오는 원소: r-value

 

주소값 연산을 할 때

r-value 에 배열이름이 들어가면 첫 번째 주소값을 l-value 로 반환 / 하지만 주소값은 변경할 수 없음.

 

 

포인터 배열

* → Askerisk

 

포인터를 원소로 갖는 배열

int* ptrArr[4] 크기가 4인 배열

 

각 원소가 포인터인 배열

배열 포인터

배열 전체를 가리키는 포인터

 

Ex)

int [4] 

// 정수형 크기가 4인 정수 배열 타입을 가리키는 포인터 


ptr + 1 실행 → ptr 이 가리키는 주소에서 한 단위 메모리 주소가 이동

 

(*ptr) + 1 실행 

ptr 이 가리키는 변수의 값을 1 증가시킴.

ptr 이 22번지를 기리키고, 그 주소에 7이라는 값이 있으면

(*ptr) + 1 은 8

 

*ptr → 가르킨 주소를 역참조 → 22번지의 주소의 값을 먼저 가져옴 → 7


레퍼런스 

선언과 동시에 초기화를 해야됨 → 선언과 동시에 어떤 변수를 참조해야됨

 

일반 변수는

int x;

x = 3 

이렇게 해도 가능함

  • 일반 변수와 거의 동일하게 사용 가능
  • 내부적으로는 해당 변수를 직접 가리켜 주는 역할을 함
  • 특정 변수에 대한 별명을 부여함
  • 복잡한 문법 없이도 참조하고 있는 변수의 값을 제어할 수 있음

선언 방법

데이터형 뒤에 & 붙임

 

Ex)

int x = 3;

int y = x;

y = 4; → x = 3

 

int x = 3;

int& y = x;

y = 4 → x = 4  

y는 x의 별명이기 때문에 같은 공간을 바라봄 → 동일한 영역의 값으로 변경


포인터와 레퍼런스의 차이점

1. 선언과 초기화 시점이 다름

 

포인터는 선언 후 나중에 * 연산자를 통해 가리킬 대상을 변경할 수 있음

레퍼런스는 선언과 동시에 초기화를 해야됨. 초기화 이후에는 다른 대상에 재연결 X 

 

2. NULL은 존재 

포인터: 유효한 대상이 없을 나타내기 위해 NULL 혹은 nullptr 사용 가능 (nullptr 사용하는 습관을 들이면 좋다고 함)

레퍼런스: 항상 다른 변수와 연결되어 있음 / NULL은 존재 X

 

3. 간접 참조 문법의 유무

포인터: 주소값을 담으므로 접근할 때 * 연산 사용 / 주소를 가져올 때 & 연산 사용

레퍼런스: 변수 자체의 별명이므로 일반 변수와 연산하는 방법이 동일


상수 레퍼런스

상수 제약을 걸어서 읽기 전용으로 사용 가능

 

Ex)

const int& cref = x; 

복사 과정 없이 x의 값을 읽을 수는 있지만 x값을 수정할 수는 없음