변수 선언과 초기화
변수의 개념
변수는 프로그램에서 데이터를 저장하고 참조하는 데 사용되는 메모리 공간의 이름입니다.
각 변수는 고유한 식별자(이름)를 가지며, 특정 데이터 타입과 연관됩니다.
변수 선언 문법
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;
}
주의사항
초기화되지 않은 변수 사용의 위험성
지역 변수는 자동으로 초기화되지 않으므로, 사용 전에 반드시 초기화해야 합니다.
변수의 범위와 수명
변수는 선언된 블록 내에서만 유효하며, 블록을 벗어나면 소멸됩니다.
연습 문제
- 다음 코드의 출력 결과를 예측해보세요.
int x = 5;
{
int x = 10;
std::cout << x << std::endl;
}
std::cout << x << std::endl;
const
키워드를 사용하여 원의 넓이를 계산하는 프로그램을 작성하세요. PI 값은 상수로 선언해야 합니다.- 참조 변수를 사용하여 두 변수의 값을 교환하는 함수를 작성하세요.
참고자료
- C++ 변수 선언과 정의 : https://en.cppreference.com/w/cpp/language/declarations
- C++11 초기화 문법 : https://en.cppreference.com/w/cpp/language/initialization
- C++ Core Guidelines : http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines