본문 바로가기
밑바닥부터 시작하는 게임 개발/C++

[밑바닥 C++] 2. HP 표기 등을 위한 변수

by KK1 2021. 7. 10.

프로그래밍을 시작하면 우선 데이터를 어떻게 다루는지부터 배웁니다.

검은사막 모바일 능력치 화면 (출처: 검은사막 모바일 공식 홈페이지 가이드)

레벨, 전투력, 경험치 등을 프로그램에서 저장하기 위한 변수(Variable)

최대 경험치 100%를 표현할 값, 최대 강화값 등 변하지 않는 값을 저장하기 위한 상수(Constant)

변수를 조작하는 다양한 연산자(Operator)를 알아보겠습니다.


변수 (Variable)

변수데이터를 저장하기 위한 메모리 공간, 그 공간에 변수의 이름을 부여합니다. 

변수에 저장된 데이터는 프로그램이 실행되는 동안 얼마든지 변할 수 있습니다.

 


변수 선언

변수에는 다양한 자료형이 존재합니다. 자료형에 따라 데이터를 저장할 수 있는 공간의 타입크기를 결정합니다.

 

시작은 변수 선언부터 해보겠습니다. 

int num;

위 코드에서는 int 라는 정수형 데이터를 저장할 num이라는 메모리 공간을 마련한 코드입니다.

변수선언하는 것은 컴퓨터에게 데이터를 저장할 공간을 마련하라고 시키는 행위입니다.

변수 선언

변수 선언을 그림으로 보면 위와 같습니다. 컴퓨터의 메모리는 위 그림과 같이 블록을 쌓아둔 느낌으로 생각하고 내용을 봅니다. 첫 번째 블록에 num이라는 변수를 선언한 것입니다.

 

다음은 변수 초기화입니다.

num = 10;

다음은 num이라는 메모리 공간데이터(값)을 저장하는 코드입니다.

변수 초기화라고 변수 공간에 최초로 데이터(값)을 저장하는 행위입니다.

 

변수 초기화

변수 초기화를 그림으로 보았을 때, 첫 번째 num이라는 블록에 10이라는 값을 저장한 것입니다.

 

int num = 10;

위 코드는 변수를 선언함과 동시에 초기화를 진행하는 코드입니다.

변수를 초기화 하지 않으면 프로그램이 비정상적인 동작을 할 수 있으니 변수는 반드시 초기화를 해줘야합니다.


자료형 (Data type)

변수는 다양한 방법으로 표현하기 위한 여러 자료형이 존재합니다. 각 자료형을 종류별로 알아보겠습니다.

 

정수를 표현할 수 있는 자료형 (1, 2, 3 ... 100, 200 ...)

int, short, long, long long

integer

 

실수를 표현할 수 있는 자료형 (0.01, 0.001, 3.1415...)

float, double, long double

 

단일 문자를 표현하는 자료형 (a, b, c, A, B, C, 1, 2, 3, ! ...)

char

character

 

논리를 표현하는 자료형 (true, false)

bool

boolean (C++ 부터 사용 가능)

 

위와 같이 같은 표현을 할 수 있음에도 다양한 자료형이 존재하는 이유는 같은 표현도 표현할 수 있는 범위가 다르고, 범위가 다르기에 크기도 각각 다르기 때문입니다.

 

데이터 표현방식에 대해 조금 더 본다음 각 자료형의 크기와 표현 범위를 정리해보겠습니다.

 

 

데이터 표현 방식

컴퓨터는 데이터를 표현할 때 0과 1로 구성된 2진수로 표현합니다. 메모리 주소는 1Byte(8bits)당 하나의 주소가 할당되고 각 비트에 2진수로 값을 채워서 표현합니다.

 

예를 들어 num 변수의 10진수 10이라는 값을 2진수로 표현하면 위 그림과 같이 0000 1010으로 표현할 수 있습니다.

 

 

정수의 표현법 (양수와 음수)

정수는 unsignedsigned 두 가지로 표현을 결정합니다. 둘의 차이는 정수 앞에 부호가 붙을 수 있나 없나 입니다.

signed는 부호를 붙일 수 있고 unsigend는 부호가 없는 양수만을 표현할 때 사용합니다.

이때 각각 표현할 수 있는 범위도 달라집니다.

unsigned int num = 10;

부호가 없는 수를 표현하고 싶다면 위와 같이 변수앞에 unsigned를 붙여서 선언하면 됩니다.

int num = 10;

기본적으로 자료형은 signed로 표현하기에 자료형 앞에 생략한채로 선언합니다.

 

 

실수 자료형 표현 방식

실수는 float와 double 두가지 표현 방식이 있고 부동 소수점 표현 방식을 사용합니다.

(고정 소수점 표현 방식도 존재하지만 사용할 일이 특별히 많지 않아 여기서는 생략하겠습니다.)

 

둘의 차이변수의 크기소수점 아래를 얼마나 표현할 수 있는가 차이가 있습니다.

float num = 0.f;

float는 실수값을 표현할 때 뒤에 f가 문자가 붙습니다.

(0.0f로 써도 되지만 소숫점 아래가 0뿐이라면 생략 가능)

실수값에 f를 붙이지 않으면 기본적으로 double로 인식하기 때문에 f를 붙여 32비트 실수형인 것을 인식하게 합니다.

double num = 0.0;

double는 위와 같이 그냥 실수로 표현하면 됩니다.

 

 

논리 표현 방식

프로그램을 진행할 때 논리값(true, false)로 분기를 나누는 경우가 많다.

이때 bool 타입 변수를 사용한다.

bool bIsAttack = true; // 공격은 가능한 상태인가?
bool bIsJump = false; // 점프는 가능한 상태인가?

조건문(if)를 배우게 되면 많이 사용하게 된다.

 

 

문자의 표현법

char a = 'a';
cout << a << endl; // a를 출력

문자는 위와 같이 char 자료형작은 따옴표문자 하나를 저장하는식으로 사용할 수 있습니다. (여러개는 불가능)

출력해보면 a가 출력되는 것을 볼 수 있습니다. 

 

char는 사실은 숫자로 된 값이 메모리에 저장되어 있습니다.

하지만 출력할 때 숫자가 아닌 a라는 문자가 출력된 이유는 ASCII (아스키) 코드표를 통하여 출력하였기 때문입니다.

ASCII (아스키) 코드표

위 코드표를 보았을 때 소문자 a10진수97이 지정되어 있습니다.

cout << int(a) << endl;

위 코드 a를 출력할 때 임시로 int(a)로 시도해보면 97이 출력되는 것을 볼 수 있습니다.

char a = 97;
cout << a << endl; // a를 출력

반대로 char에 97이라는 숫자를 넣어서 a를 출력할 수 있습니다.

 

 

문자열 출력

Hello World 프로그램을 작성할 때 이미 문자열 출력을 해보았습니다. 문자열 변수는 추후 알아봅니다.

cout << "Hello World !!!" << endl;

문자열큰따옴표로 표현하여 여러 문자를 넣을 수 있습니다.


변수 이름 규칙

코딩을 할 때에는 혼자 하는 경우도 있지만 보통 회사에가면 다같이 코드를 작성하게 됩니다.

여러 사람이 작업을 하다보니 남이 짠 코드도 볼 수 있어야하고 내가 짠 코드도 쉽게 볼 수 있어야 합니다.

그러한 Coding Standard 라고 작성하여 그 룰을 숙지하며 코드를 작성합니다.

 

조직, 팀 마다 다르게 쓸 수 있으나 본 문서 게임 개발이니 Unreal Engine 코딩 표준을 따를 예정입니다.

 

변수를 배웠으니 변수 작성 규칙을 보겠습니다. 코딩 규칙과 작성할 때 주의, 에러를 발생할 수 있는 내용입니다.

 

  • 데이터를 저장할 성격에 맞게 이름을 부여한다.

예를 들어 플레이어의 HP를 저장하는 변수라면 int PlayerHp 와 같이 명확한 이름을 부여합니다.

누가 봐도 이해하기 어려운 애매한 이름은 남발하지 않습니다.

(예, a b c 와 같은 의미 없이 사용한 이름, 물론 의미를 부여할 수 있지만 다른 사람도 보고 이해해야한다.)

  • 변수 이름 맨 앞에는 숫자가 올 수 없다.
int 2a = 0; // X, Error 발생
int _a = 0; // O
int a2 = 0; // O

변수 맨 앞에 숫자가 올 경우 빌드 에러가 발생합니다.

  • 변수 이름에 공백이 있어서는 안된다.
int Player Hp = 0; // X, Error 발생
int PlayerHP = 0; // O

변수 이름의 공백 또한 빌드 에러가 발생합니다.

  • 대소문자는 확실히 구별한다.
int playerhp = 0; 
int PlayerHp = 0; // 둘은 다른 공간에 할당되어 있다

위 두 함수는 다른 메모리 공간에 할당되어 있습니다. 완전히 서로 다른 변수.

  • _(언더바)를 제외한 특수문자는 사용이 불가능하다.
int Num% = 0; // X, Error 발생
int _PlayerHp = 0; // O
  • 같은 공간 { } (코드블럭, 중괄호 사이)에서 같은 이름의 변수는 사용할 수 없다.
{
    int a = 0;
    int a = 0; // X, Error 발생, 위 a와 같은 이름
}
int a = 0; // O, 위 a와 다른 코드 블럭. 사용 가능!

{ }를 보통 코드블럭이라 부르며 그 사이에서 선언 된 변수는 그 공간에서만 사용됩니다.

  • 변수 이름은 각 단어 첫 글자는 대문자로 작성하며, 단어 사이 공백(_)은 띄우지 않는다. (Unreal Engine)
int PlayerHp = 100;
float PlayerExp = 0.5f
  • bool 변수 이름 맨 앞에는 명시적으로 b를 붙여준다.
bool bIsDead = true; // 죽은 상태인가?

C++에서 변수 데이터 입력 받기 예제

#include <iostream>
using namespace std;

int main()
{
	int PlayerHp = 0;
	cout << "Hp를 입력: ";
	cin >> PlayerHp;
	cout << "플레이어의 HP: " << PlayerHp << endl;
}

cin이라는 기능(객체)>> 연산자를 통하여 변수에 값을 입력받을 수 있습니다.

cout은 << 를 이어서 사용하여 여러 값을 이어 붙여 출력할 수 있습니다.


혼자 해보기

혼자 해보기 1 결과

1) 위 화면과 같이 입력을 받고 출력하는 프로그램을 작성하세요.

 

혼자 해보기 2 결과

char H = 0;
char e = 0;
char l = 0;
char o = 0;

2) 위 변수를 ASCII 코드표의 10진수 값을 활용하여 Hello를 출력하는 프로그램을 작성하세요.


이전편

2021.07.04 - [밑바닥부터 시작하는 게임 개발/C++] - [밑바닥 C++] 1. 역시 시작은 Hello World

 

다음편

2021.07.11 - [밑바닥부터 시작하는 게임 개발/C++] - [밑바닥 C++] 3. HP 등 값을 조작하는 연산자, 변하지 않는 값 상수

반응형

댓글