icon안동민 개발노트

변수 선언과 초기화


변수의 개념

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

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

변수 선언 문법

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

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

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

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

변수 명명 규칙

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

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

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

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

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

 좋은 변수 이름 예시

  • 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으로 변경됨

실습

  1. 다양한 데이터 타입의 변수 선언 및 초기화
#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;
}
  1. 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;
}
  1. 참조 변수와 포인터 변수 사용 예제
#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. 초기화되지 않은 변수 사용의 위험성

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

 2. 변수의 범위와 수명

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

연습 문제

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

 참고자료