icon

변수 선언과 초기화


변수의 개념

 변수는 프로그램에서 데이터를 저장하고 참조하는 데 사용되는 메모리 공간의 이름입니다.

 각 변수는 고유한 식별자(이름)를 가지며, 특정 데이터 타입과 연관됩니다.

변수 선언 문법

 C++에서 변수를 선언하는 기본 문법은 다음과 같습니다.

데이터타입 변수명;
 
int count;
double price;
char grade;

 변수를 선언할 때 동시에 초기화할 수도 있습니다.

데이터타입 변수명 = 초기값;
 
int count = 0;
double price = 9.99;
char grade = 'A';

변수 명명 규칙

 C++에서 변수 이름을 지을 때 따라야 할 규칙들은 다음과 같습니다.

알파벳, 숫자, 언더스코어 _만 사용 가능

첫 글자는 알파벳 또는 언더스코어여야 함

대소문자를 구분함 (case-sensitive)

예약어는 변수 이름으로 사용할 수 없음

 좋은 변수 이름 예시

  • studentCount
  • total_price
  • userInput

 나쁜 변수 이름 예시

  • 123abc (숫자로 시작)
  • my-variable (하이픈 사용)
  • int (예약어 사용)

초기화 방법

 C++에서는 여러 가지 초기화 방법을 제공합니다.

복사 초기화 (Copy Initialization)

int a = 10;

직접 초기화 (Direct Initialization)

int a(10);

유니폼 초기화 (Uniform Initialization, C++ 11)

int a{10};
 
// 유니폼 초기화는 모든 상황에서 사용할 수 있는 일관된 문법을 제공하며, 타입 변환 시 정보 손실을 방지합니다.
int a = 3.14;  // 경고 없이 3으로 암묵적 변환
int b{3.14};   // 컴파일 에러 또는 경고 발생

다중 변수 선언

 같은 타입의 여러 변수를 한 번에 선언할 수 있습니다.

int x = 1, y = 2, z = 3;

자동 타입 추론 (C++ 11)

 C++ 11부터는 auto 키워드를 사용하여 컴파일러가 초기화 값을 기반으로 변수의 타입을 자동으로 추론하도록 할 수 있습니다.

auto x = 10;      // int로 추론
auto y = 3.14;    // double로 추론
auto z = 'a';     // char로 추론
auto b = true;    // bool로 추론

 auto는 코드의 가독성을 높이고 타입 이름이 길거나 복잡한 경우에 유용합니다.

상수

 값이 변경되지 않아야 하는 변수는 const 키워드를 사용하여 상수로 선언할 수 있습니다.

const int MAX_STUDENTS = 30;
const double PI = 3.14159;

 상수는 선언과 동시에 초기화해야 하며, 이후에 값을 변경할 수 없습니다.

참조 변수

 참조 변수는 이미 존재하는 변수의 별칭을 만듭니다.

int x = 10;
int& ref = x;  // x의 참조 변수 선언
ref = 20;      // x의 값도 20으로 변경됨

 참조 변수는 선언과 동시에 초기화해야 하며, 한 번 초기화된 후에는 다른 변수를 참조할 수 없습니다.

포인터 변수

 포인터는 메모리 주소를 저장하는 변수입니다.

int* ptr = nullptr;  // 널 포인터로 초기화
int x = 10;
int* p = &x;  // x의 주소로 초기화
 
// 포인터를 통해 간접적으로 값을 변경할 수 있습니다.
 
*p = 20;  // x의 값이 20으로 변경됨

실습

다양한 데이터 타입의 변수 선언 및 초기화

#include <iostream>
#include <string>
 
int main() {
    int age = 25;
    double height = 175.5;
    char gender = 'M';
    bool isStudent = true;
    std::string name = "John Doe";
 
    std::cout << "Name: " << name << "\n";
    std::cout << "Age: " << age << "\n";
    std::cout << "Height: " << height << " cm\n";
    std::cout << "Gender: " << gender << "\n";
    std::cout << "Is student: " << (isStudent ? "Yes" : "No") << "\n";
 
    return 0;
}

auto 키워드를 사용한 변수 선언

#include <iostream>
#include <vector>
 
int main() {
    auto i = 42;
    auto pi = 3.14159;
    auto c = 'Z';
    auto str = "Hello, auto!";
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin();
 
    std::cout << "i: " << i << ", type: " << typeid(i).name() << "\n";
    std::cout << "pi: " << pi << ", type: " << typeid(pi).name() << "\n";
    std::cout << "c: " << c << ", type: " << typeid(c).name() << "\n";
    std::cout << "str: " << str << ", type: " << typeid(str).name() << "\n";
    std::cout << "*it: " << *it << ", type: " << typeid(it).name() << "\n";
 
    return 0;
}

참조 변수와 포인터 변수 사용 예제

#include <iostream>
 
int main() {
    int x = 10;
    int& ref = x;
    int* ptr = &x;
 
    std::cout << "Initial value of x: " << x << "\n";
 
    ref = 20;
    std::cout << "After changing ref, x = " << x << "\n";
 
    *ptr = 30;
    std::cout << "After changing *ptr, x = " << x << "\n";
 
    return 0;
}

주의사항

초기화되지 않은 변수 사용의 위험성

 지역 변수는 자동으로 초기화되지 않으므로, 사용 전에 반드시 초기화해야 합니다.

변수의 범위와 수명

 변수는 선언된 블록 내에서만 유효하며, 블록을 벗어나면 소멸됩니다.

연습 문제

  1. 다음 코드의 출력 결과를 예측해보세요.
int x = 5;
{
    int x = 10;
    std::cout << x << std::endl;
}
std::cout << x << std::endl;
  1. const 키워드를 사용하여 원의 넓이를 계산하는 프로그램을 작성하세요. PI 값은 상수로 선언해야 합니다.
  2. 참조 변수를 사용하여 두 변수의 값을 교환하는 함수를 작성하세요.

 참고자료