대충보는 C++ & CMake - 9. 변수와 auto

이 글에서는 C++에서 변수를 선언하는 법그 변수에 값을 저장하는 법을 알아봅니다.

TL;DR

  • C++에서는 문장을 쓰고 마침표의 의미로 세미콜론(;)을 씀
  • 자료형 변수명; (e.g. int num;) 이라고 작성하여 메모리 공간 중 일부에 변수명이라는 이름을 붙여 활용할 수 있으며, = 연산자를 활용하여 그 공간에 값을 저장할 수도 있음
  • 자료형을 적어야 할 때 그 데이터의 자료형을 컴파일러가 결정할 수 있는 상태라면 자료형을 굳이 직접 쓰지 않아도 auto라는 키워드를 통해 컴파일러에게 자료형 결정을 떠넘길 수 있음 (e.g. auto num = 3;이라고 쓰면 컴파일러가 auto 부분을 알아서 int로 인식함)

세미콜론(;)

우리말은 문장이 끝났다는 의미로 마침표('.')를 적습니다.

C++에서도 컴파일러에게 한 문장이 끝났다는 것을 명시해주어야 합니다. 이 때 마침표의 의미로 사용하는 기호가 세미콜론(;)입니다.

너무나 당연하게 자주 사용하고 보게 될 기호입니다만, 따로 강의글까지 만들 정도의 내용은 아닌 것 같아, 여기서 간단하게 설명하고 넘어갑니다.


변수

변수란 간단히 말해 자유로운 데이터 저장소입니다. 제한조건은 단 한 가지, 미리 그 저장소의 자료형을 정해두어야 한다는 것입니다.

변수의 선언(declaration)

변수의 선언이란, C++ 프로그램에서 이 변수를 사용하겠다라고 선언하는 것을 뜻합니다. 코드로는 자료형 변수명;과 같이 적습니다.

변수명으로는 알파벳 대소문자(A~Z, a~z), 숫자(0~9), 언더바(_)를 자유롭게 조합하여 사용할 수 있습니다. (일부 C++에서 사용하는 문구는 불가능한 경우도 있습니다.)

예시를 보자면 다음과 같습니다.

int num; // Declare an int-type variable named "num"
double dbl_val; // Declare a double-type variable named "dbl_val"

값의 저장과 사용

변수를 만들어두었다면, 이 변수에 임의의 값을 저장해 둘 수 있습니다. 저장할 때에는 변수명 = 저장할값;과 같이 적습니다. = 기호는 같다는 의미의 연산자가 아니라 우측의 값을 좌측의 메모리공간에 대입하는 연산자입니다.

만약, 변수를 선언함과 동시에 값의 저장까지 하고 싶다면, 자료형 변수명 = 저장할값;과 같이 한 데 묶어서 적을 수도 있습니다1.

이 때, 변수의 자료형과 저장할 값의 자료형은 동일해야 합니다2.

값이 저장되어 있다면, 이후에는 변수명을 이용하여 그 값이 필요한 곳에서 자유롭게 호출하여 사용할 수 있습니다.

저장된 값을 변경하려면 변수명 = 저장할값;을 한 번 더 쓰면 됩니다.

예시를 보자면 다음과 같습니다.

int num = 3; // The value "3" was stored in a variable named "num"
std::cout << num << std::endl; // This will print 3
num = 5; // The value of variable named "num" has been changed to "5"
std::cout << num << std::endl; // This will print 5

auto 키워드

자료형을 적어야 할 때, 그 자리에 무슨 자료형이 적혀야 하는지가 명확하다면, 자료형을 직접 적지않고 컴파일러가 알아서 결정하게끔 할 수 있습니다. 이 때 활용하는 키워드가 auto입니다.

예를 들어 int num = -1; 이라는 문장을 생각해봅시다. 여기서 int 자리에 굳이 int라는 자료형을 명시해주지 않더라도, num이라는 변수가 -1이라는 값을 저장해야 한다는 사실로부터 num의 자료형이 int가 되어야 한다고 판단할 수 있겠지요3. 이런 경우에는 int 대신 auto를 적을 수 있습니다. 다음과 같이 말이지요.

auto num = -1; // int num = -1;

단, 컴파일러가 자료형을 결정할 수 없는 경우에는 auto 키워드를 사용할 수 없습니다. 예를 들어 auto num;과 같이 값을 저장하지 않고 선언만 하는 경우에는, num이 어떤 자료형을 가져야 하는지 판단할 수 없으므로 컴파일 에러가 발생합니다.


Chanagelog

  • 2022-03-19: 최초 게시

  1. 좀 더 정교한 설명을 위해서는, 선언(declare)/정의(define)/초기화(initialize)/할당(assign) 등으로 용어를 좀 더 세분화하여 이해할 필요도 있겠으나, 여기서는 간단하게만 설명하고 넘어가겠습니다. 필요한 분은 위의 키워드를 검색하여 공부해보시기 바랍니다. ↩︎

  2. 엄밀히 말하면 동일하지는 않아도 됩니다만, 저장할 값의 자료형으로부터 변수의 자료형으로 자동 형변환이 이루어질 수 있어야 합니다. 예를 들어, 3.0이라는 실수 자료형은 C++에서 자동적으로 3이라는 정수 자료형으로 형변환이 가능합니다. 이 경우에는 int num = 3.0;과 같이 적어도 에러가 발생하지는 않습니다(warning은 발생할 수도 있습니다). ↩︎

  3. 경우에 따라 가능한 자료형이 여러 가지인 경우도 있습니다. 이런 경우에는 auto 키워드를 어떤 자료형으로 인식할 것인지 컴파일러가 가진 나름의 규칙을 바탕으로 결정합니다. ↩︎

이전