본문 바로가기
Computer Science/C++

[C++] 타입 (변수,상수)

by BrickSky 2023. 10. 25.

1) 변수(variable)란?

변수(variable)란 데이터(data)를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리 공간을 의미한다. 즉, 변수란 데이터(data)를 저장할 수 있는 메모리 공간을 의미하며, 이렇게 저장된 값은 변경될 수 있다.

C++에서 숫자 표현에 관련된 변수는 정수형 변수와 실수형 변수로 구분할 수 있는데, 정수형 변수는 char형, int형, long형, long long형 변수로, 실수형 변수는 float형, double형 변수로 구분된다.

 

01. 변수의 이름 생성 규칙

C++에서는 변수의 이름을 비교적 자유롭게 지을 수 있다. 해당 변수에 저장될 데이터의 의미를 잘 나타내도록 짓는 것이 좋다.

아래는 반드시 지켜야 하는 규칙이다.

  • 변수의 이름은 영문자(대소문자), 숫자, 언더스코어(_)로만 구성된다.
  • 변수의 이름은 숫자로 시작될 수 없다.
  • 변수의 이름 사이에는 공백을 포함할 수 없다.
  • 변수의 이름으로 C++에서 미리 정의된 키워드(keyword)는 사용할 수 없다.
  • 변수 이름의 길이에는 제한이 없다.

 

02. 비트(bit)와 바이트(byte)

컴퓨터는 모든 데이터를 2진수로 표현하고 처리한다.

비트(bit)란 컴퓨터가 데이터를 처리하기 위해 사용하는 데이터의 최소 단위이며 이러한 비트에는 2진수의 값(0과 1)을 단 하나만 저장할 수 있다.

바이트(byte)란 위와 같은 비트가 8개 모여서 구성되며, 한 문자를 표현할 수 있는 최소 단위이다.

 

03. 변수와 메모리 주소

변수는 기본적으로 메모리의 주소(address)를 기억하는 역할을 한다.

메모리 주소란 물리적인 메모리 공간을 서로 구분하기 위해 사용되는 일종의 식별자이다.

즉, 메모리 주소란 메모리 공간에서의 정확한 위치를 식별하기 위한 고유 주소를 의미한다.

 

변수를 참조할 때는 메모리의 주소를 참조하는 것이 아닌, 해당 주소에 저장된 데이터를 참조한다.

따라서 변수는 데이터가 저장된 메모리의 주소뿐만 아니라, 저장된 데이터의 길이와 형태에 관한 정보도 같이 기억해야 한다.

그림에서 하나의 메모리 공간에는 8개의 비트로 이루어진 1바이트의 데이터가 저장되어 있다. 해당 변수의 길이는 총 4개의 메모리 공간을 포함하므로, 해당 변수는 총 4바이트의 데이터를 저장하고 있는 것이다. (총 32비트)

 

 

 

 

 

 

 

 

04. 변수의 선언

C++에서는 변수를 사용하기 전에 반드시 먼저 해당 변수를 저장하기 위한 메모리 공간을 할당받아야 한다. 이렇게 해당 변수만을 위한 메모리 공간을 할당받는 행위를 변수의 선언이라고 부른다.

 

C++에서 변수를 선언하는 방법에는 두 가지 방법이 있다.

  1. 변수의 선언만 하는 방법
  2. 변수의 선언과 동시에 초기화하는 방법

 

1. 변수의 선언만 하는 방법

이 방법은 먼저 변수를 선언하여 메모리 공간을 할당받고, 나중에 변수를 초기화하는 방법이다.

하지만 이렇게 선언만 된 변수는 초기화하지 않았기 때문에 해당 메모리 공간에는 알 수 없는 쓰레깃값만이 들어가 있다. 따라서 초기화하지 않은 변수는 절대로 사용해서는 안 된다.

문법
타입 변수이름;
int num;

...

num = 20;

위의 예제처럼 정수를 저장하기 위한 메모리 공간을 할당받으면, 반드시 해당 타입의 데이터만을 저장해야 한다. 그렇지 않고 다른 타입의 데이터를 저장할 경우에는 저장된 데이터에 변형이 일어날 수도 있다.

 

2. 변수의 선언과 동시에 초기화하는 방법

C++에서는 변수의 선언과 동시에 그 값을 초기화할 수 있는데, 선언하고자 하는 변수들의 타입이 같다면 이를 동시에 선언할 수 있다.

문법
1. 타입 변수이름[, 변수이름];

2. 타입 변수이름 = 초깃값[, 변수이름 = 초깃값];
int num1, num2;

double num3 = 1.23, num4 = 4.56;

단! 선언하고자 하는 변수의 타입이 서로 다르다면 동시에 선언할 수 없다.

 

 

2) 상수

C++에서 상수는 표현 방식에 따라 다음과 같이 나눌 수 있다.

  1. 리터럴 상수(literal constant)
  2. 심볼릭 상수(symbolic constant)

 

01. 리터럴 상수(literal constant)

리터럴 상수(literal constant)는 변수와는 달리 데이터가 저장된 메모리 공간을 가리키는 이름을 가지고 있지 않는다. C++에서 상수는 타입에 따라 정수형 리터럴 상수, 실수형 리터럴 상수, 문자형 리터럴 상수 등으로 구분할 수 있다.

정수형 리터럴 상수는 123, -456과 같이 아라비아 숫자와 부호로 표현하고,

실수형 리터럴 상수는 3.14, -45.6과 같이 소수 부분을 가지는 아라비아 숫자로 표현하고,

문자형 리터럴 상수는 'a', 'Z'와 같이 따옴표('')로 감싸진 문자로 표현한다.

 

정수형 리터럴 상수의 경우,

10진수뿐만 아니라 8진수(0으로 시작)나 16진수(0x로 시작)로도 표현할 수 있다. cout 객체의 dec, hex, oct 조정자를 통해 여러 진법으로 표현된 정수형 상수의 출력이 가능해진다.

int a = 10;

 
cout << "숫자 10을 10진수로 표현하면 " << a << "이며, " << endl;

cout << oct;

cout << "숫자 10을 8진수로 표현하면 " << a << "이며, " << endl;

cout << hex;

cout << "숫자 10을 16진수로 표현하면 " << a << " 입니다.";
숫자 1010진수로 표현하면 10이며, 

숫자 108진수로 표현하면 12이며, 

숫자 1016진수로 표현하면 a 입니다.

C++에서 정수형 리터럴 상수는 다음과 같은 경우를 제외하면 모두 int형으로 저장된다.

  • 데이터의 값이 너무 커서 int형으로 저장할 수 없는 경우
  • 정수형 상수에 접미사를 사용하여, 해당 상수의 타입을 직접 명시하는 경우

 

실수형 리터럴 상수의 경우,

C++에서 실수형 리터럴 상수는 모두 부동 소수점 방식으로 저장된다.

이러한 실수형 리터럴 상수는 모두 double형으로 저장되며, 접미사를 추가하여 저장되는 타입을 직접 명시할 수도 있다.

 

💡 부동 소수점 방식이란?

실수를 컴퓨터상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고 그 위치를 나타내는 수를 따로 적는 것

 

02. 심볼릭 상수(symbolic constant)

심볼릭 상수는 변수와 마찬가지로 이름을 가지고 있는 상수이다. 심볼릭 상수는 선언과 동시에 반드시 초기화해야 한다. 이러한 심볼릭 상수는 매크로를 이용하거나, const 키워드를 사용하여 선언할 수 있는데, 매크로를 이용한 선언은 C언어의 문법이므로, C++에서는 가급적 const 키워드를 사용하여 선언하는 게 좋다.

const int ages = 30;

위의 예제처럼 const 키워드를 사용한 상수는 선언과 함께 반드시 초기화해야 한다.

매크로를 이용한 선언보다 const 키워드를 사용한 심볼릭 상수의 장점은 다음과 같다.

  • 상수의 타입을 명시적으로 지정할 수 있다.
  • 구조체와 같은 복잡한 사용자 정의 타입에도 사용할 수 있다.
  • 해당 심볼릭 상수를 특정 함수나 파일에서만 사용할 수 있도록 제한할 수 있다.

'Computer Science > C++' 카테고리의 다른 글

[C++] 배열과 포인터(1차원 배열,다차원 배열)  (0) 2023.11.05
[C++] 제어문  (0) 2023.10.28
[C++] 연산자  (1) 2023.10.27
[C++] 타입 (기본 타입,타입 변환)  (0) 2023.10.26
[C++] C++ 시작  (1) 2023.10.25