C++

4. Variables and Constants

Kelvin의 게임개발 2023. 12. 7. 00:53
728x90
반응형

1. What is a Variable

 

변수는 메모리 위치의 추상화이다 (실질적으로 데이터는 특정 메모리 위치에 존재하고 변수가 이를 추상화 한다)

 

변수는 값을 나타내는 의미있는 이름을 사용하게 해준다

 

변수는 타입과 값으로 구성된다, 타입은 변수가 저장할 수 있는 값의 타입을 의미하며 값은 변수에 들어갈 값이다

 

변수는 사용전에 반드시 선언되어야 한다 (static typing -> 런타임에 선언되지 않고 미리 선언된 걸 컴파일할 때 실행한다)

 

프로그램이 실행되며 변수의 값은 변할 수 있다

 

 

2. Declaring and Initializing Variable

 

변수 선언은 타입 변수이름;으로 선언한다

 

int는 정수, double은 실수, string은 문자열 타입이며 C++에서는 사용자 정의 타입도 만들어 사용이 가능하다

 

변수 이름에는 글자, 숫자, 밑줄을 사용할 수 있다, 하지만 첫 글자는 숫자가 될 수 없다, C++ 키워드는 이름으로 사용할 수 없다, 같은 범위에서 선언된 이름은 재사용이 불가능하다, 대소문자를 구별한다

 

긴 이름은 중간중간에 대문자를 사용하거나 _를 이용하여 가독성을 좋게 만드는게 좋다 ex) MyVariableName, My_Variable_Name

 

변수의 이름은 의미가 확실해야 하며 가능한 줄임말을 사용하지 않도록 한다 (가독성, 유지에 좋다)

 

초기화 되지 않은 변수를 사용하면 위험하다

 

변수는 최대한 필요할 때마다 (사용하기 직전에) 선언하는게 좋다 (미리 여러개를 선언하고 밑에가서 사용하는 로직은 좋지 않음)

 

int main()
{
	int Age; //unitialized -> 이상한 값이 들어갈 수 있다

	int Age1 = 21; //선언과 동시에 초기화 가능 C-like Initialization
	int Age2(21); //생성자 방식 초기화 Constructor Initialization
	int Age3{ 21 }; //C++11 스타일 초기화

}

위와 같이 여러가지 초기화 방식을 사용하여 변수를 선언 후 초기화를 해주어야 한다

 

 

3. Global Variable

 

{ } 안에 선언한 변수는 local variable (지역변수)라고 부른다, 함수 밖에서 선언된 변수는 global variable이라 부른다 (지역변수는 해당 { }안에서만 사용이 가능하고 전역변수는 어디에서든 접근하여 사용이 가능하다)

 

전역변수는 자동으로 0으로 초기화 된다

 

전역변수는 프로그램의 어느 부분에서든 접근할 수 있기 때문에 변경되기 쉽다 (디버깅 하기 힘들수도 있음, 전역변수를 남발하는 습관은 좋지 않다)

 

int age{ 21 }; //global variable

int main()
{
	int age{ 18 }; //local variable

	cout << age << endl; //지역변수를 먼저 체크하기 때문에 18이 나오게 된다
}

전역변수와 지역변수는 이름이 같아도 된다, 전역과 지역변수의 이름이 같은 변수를 사용할 때 지역변수를 먼저 체크하게 되고 없으면 전역변수를 사용한다

 

 

4. C++ Built-in Primitive Types

 

Char Types


'A', 'X'등과 같은 문자를 표현하는데 사용되는 타입이다, 문자를 표현할 때는 ' '안에 기입해서 표현한다
char는 8bit로 구현된다
char16_t 는 16bit, char32_t는 32bit로 구현된다
char만으로 알파벳을 나타내기 충분하지만 더 많은 문자를 표현할수 있기 때문에 다양한 크기의 char type이 존재한다
wchar_t는 유니코드를 표현할 때 사용되며 유니코드란 모든 문자에 대한 유일코드이다

 

int main()
{
	char MiddleInitial{ 'J' };
}


Integer Types


Integer Type은 정수를 표현하는데 사용되는 타입이다

 

signed/unsigned는 부호가 있고 없고를 나타낸다

 

signed 타입을 나타낼때는 signed를 굳이 붙힐 필요가 없다 (default)

 

short int (16), int (16), long int(32), long long int(64)로 구현된다 -> 이때 int는 빼고 사용이 가능하다 ex) short, int long, long long

 

이 타입들 앞에 unsigned를 붙혀 부호가 없는 타입도 사용할 수 있다 (음수의 범위가 양수로 넘어온다)

 

변수에 어떤 값을 넣을지 생각해서 적절한 크기의 타입을 사용해야 한다

 

int main()
{
	unsigned short Score{ 55 };
	int Age{ 65 };
	long PeopleCount{ 20610000 };
	
	long PeopleOnEarth{ 7600000000 };
	//overflow 발생 (타입의 크기보다 더 큰 값을 넣게 되면 overflow가 발생하여 이상한 값이 나온다 (bit가 다르기 때문임) 이때 { }로 초기화하면 에러가 발생하지만 C-Like Style로 초기화하면 에러가 발생하지 않고 이상한 값이 나오게 된다 이것이 C++ 11 초기화의 장점)
	//곱셈 시 overflow가 잘 발생하기 때문에 조심해야 한다
}


Float Types

 

Float Type은 실수를 표현하는데 사용되는 타입이다 (실수는 근사값이다)
float(소수점 7자리), double (소수점 15자리), long double (소수점 19자리)로 구현된다 더 큰 타입을 쓸수록 정밀한 실수를 표현할 수 있다

 

int main()
{
	float CarPayment{ 401.23 };
	double Pi{ 3.141592 };
	long double LargeAmount{ 2.3e120 };
}


Boolean Type

 

Bool Type은 참/거짓을 표현하는데 사용되는 타입이다
0은 false이고 0이 아닌값은 true이다 (true (1), false (0) 키워드가 C++에서 존재한다)

 

int main()
{
	bool bIsGameOver{ false };
	cout << bIsGameOver << endl; //false이기 때문에 0출력
}

 

 

5. Size of Variable

 

sizeof() 연산자는 타입의 크기를 byte로 반환한다

 

sizeof(타입), sizeof(변수)로 사용이 가능하다

 

#include <climits>, #include <cfloat>으로 여러 타입의 크기를 쉽게 알 수 있다 (타입의 크기가 정의된 상수가 존재)

 

#include <iostream>
#include <climits> //climit include

using namespace std;


int main()
{
	cout << sizeof(char) << endl;
	cout << sizeof(long long) << endl;
	cout << sizeof(int) << endl;

	//climits에 있는 타입 크기 상수 사용
	cout << CHAR_MIN << endl;
	cout << LONG_MIN << endl;
	cout << SHRT_MAX << endl;
	cout << LLONG_MAX << endl;

	int age{ 21 };
	
	cout << sizeof(age) << endl; //변수 이름으로도 사용 가능
}

 

 

6. Constant

 

상수는 한번 선언되면 값이 바뀌지 않는값을 의미한다 (바꾸려고 하면 컴파일 에러 발생)
ex) 한번 정해지면 바뀌지 않는 특정 데이터를 계속해서 사용해야 할 때 하드코딩으로 계속 그 값을 작성하는 것 보다 상수를 사용하는게 좋다 (추후에 변경될 가능성X, 가독성이 좋다, 값이 변경 될 경우 하나하나 다 바꾸지 않고 상수값 하나만 바꿔도 되는 장점이 있다)

Literal Constants (리터럴 상수)

값의 타입이 Integer일 경우 뒤에 U, L, LL등을 붙혀 Integer Literal 상수를 표현한다 ex) 12 (integer), 12U (unsigned integer), 12L (long Interger), 12LL (long long Integer)
값의 타입이 실수일 경우 F, L을 붙혀 실수 Literal 상수를 표현한다 ex) 12.1 (double), 12.1F (float), 12.1L (long double)
값의 타입이 Character일 경우 escape code로 Character Literal 상수를 표현한다
 \n 한 줄 아래로, \r 커서 맨 앞으로, \t tab, \b backspace, \' 작은따옴표, \" 큰따옴표, \\ backslash를 표현한다

Declared Constant
상수를 선언할 때 const 키워드를 이용한다
const 타입 변수이름;으로 선언하고 선언과 동시에 초기화가 되어야 한다 (바로 초기화 하지 않으면 컴파일 에러)

Defined Constant (Modern C++ 에서 사용하지 말 것)
#define 이름 값 으로 사용이 가능하다 (값 대신 이름을 사용하면 됨) ex) #define pi 3.141592 이면 pi를 사용한다 -> 전처리 단계에서 처리되기 때문에 error를 찾기 어렵다

 

#include <iostream>
#include <climits>

#define pi 3.141592 //Modern C++에서는 사용하지 않는 상수 선언법

using namespace std;

int main()
{
	cout << "Hi" << endl;
	cout << "\nHow many rooms would you like cleaned? "; //\n으로 한 칸 밑에서 콘솔 텍스트가 출력됨 (Character Literal Constant)
	
	int NumberOfRooms{ 0 };

	cin >> NumberOfRooms;

	const int PricePerRoom{ 30 }; //30이라는 값을 상수로 선언

	PricePerRoom = 100; //const값을 수정하려고 했기 때문에 CompileError!

	cout << "\nEstimate for carpet cleaning service" << endl;
	cout << "Number of rooms : " << NumberOfRooms << endl;
	cout << "Price per room  : $" << PricePerRoom << endl; //상수인 PricePerRoom 사용
	cout << "Cost : $" << PricePerRoom * NumberOfRooms << endl;
}

 

728x90
반응형

'C++' 카테고리의 다른 글

6. Operators (연산자)  (131) 2023.12.12
5. Array And Vector  (202) 2023.12.09
3. Structure of a C++ Program  (2) 2023.11.22
2. Getting Started C++(2)  (1) 2023.11.21
1. Getting Started C++(1)  (4) 2023.11.17