본문 바로가기

프로그래밍기초/C++

[C++ Basic] # 03 C++ 변수의 종류(지역변수, 전역변수, 정적변수 ...)

1. 변수의 종류

1) 지역 변수 (Local Variable)

#include <iostream>

void myFunction() {
    int localVar = 10;  // 지역 변수
    std::cout << "Local Variable: " << localVar << std::endl;
}

int main() {
    myFunction();
    // std::cout << localVar; // 오류: localVar는 myFunction 밖에서 접근 불가
    return 0;
}

 

- 함수나 블록 내에서 선언되는 변수로, 해당 블록 안에서만 유효합니다.

- 함수가 종료되거나 블록이 끝나면 메모리에서 소멸됩니다.

 

2) 전역 변수 (Global Variable)

#include <iostream>

int globalVar = 20;  // 전역 변수

void myFunction() {
    std::cout << "Global Variable in Function: " << globalVar << std::endl;
}

int main() {
    std::cout << "Global Variable in Main: " << globalVar << std::endl;
    myFunction();
    return 0;
}

 

- 함수나 클래스 외부에서 선언된 변수로, 프로그램 전체에서 접근할 수 있습니다.

- 전역 변수를 사용할 때는 주의가 필요하며, 코드의 복잡성을 줄이기 위해 지양하는 것이 좋습니다.

- 프로그램이 종료될때까지 메모리에 남아 있습니다.

 

3) 정적 변수 (Static Variable)

#include <iostream>

void myFunction() {
    static int staticVar = 0;  // 정적 변수
    staticVar++;
    std::cout << "Static Variable: " << staticVar << std::endl;
}

int main() {
    myFunction();  // 1 출력
    myFunction();  // 2 출력 (값 유지)
    myFunction();  // 3 출력 (값 유지)
    return 0;
}

 

- static 키워드를 사용하여 선언된 변수입니다.

- 함수 내에서 선언된 정적 변수는 함수가 호출될 때 초기화되며, 함수가 끝나도 소멸되지 않고 값을 유지합니다.

- 클래스 내에서 선언된 정적 변수는 해당 클래스의 모든 객체가 공유하는 변수로, 클래스가 메모리에서 해제될 때까지 존재합니다.

4) 외부 변수 (Extern Variable)

// file1.cpp
#include <iostream>
extern int sharedVar;  // 외부 변수

void printSharedVar() {
    std::cout << "Shared Variable: " << sharedVar << std::endl;
}

// file2.cpp
#include <iostream>
int sharedVar = 100;  // 전역 변수로 선언

int main() {
    printSharedVar();  // file1.cpp에 있는 함수 사용
    return 0;
}

 

- extern 키워드를 사용하여 다른 파일에 정의된 변수를 참조할 수 있습니다.

- 주로 여러 소스 파일에서 같은 변수를 공유하고 싶을 때 사용됩니다.

5) 상수 (Constant)

#include <iostream>

const double PI = 3.14159;  // 상수

int main() {
    std::cout << "PI: " << PI << std::endl;
    // PI = 3.14; // 오류: 상수는 값 변경 불가
    return 0;
}

 

- const 키워드를 사용하여 값을 변경할 수 없는 변수를 선언할 수 있습니다.

- 프로그램 실행 중에 변하지 않는 값을 나타내며, 코드의 안전성을 높이는 데 도움을 줍니다.

6) 참조 변수 (Reference Variable)

#include <iostream>

int main() {
    int original = 30;
    int &ref = original;  // 참조 변수
    ref = 50;             // 원본 변수 값을 참조 변수를 통해 수정
    std::cout << "Original: " << original << std::endl;
    std::cout << "Reference: " << ref << std::endl;
    return 0;
}

 

- 기존 변수의 별칭(alias)로 사용되는 변수로, & 연산자를 사용해 선언합니다.

- 원본 변수와 메모리 주소를 공유하며, 값이 변경되면 원본 변수에도 반영됩니다.

7) 동적 변수 (Dynamic Variable)

#include <iostream>

int main() {
    int *dynamicVar = new int(10);  // 동적 변수 생성
    std::cout << "Dynamic Variable: " << *dynamicVar << std::endl;
    delete dynamicVar;  // 동적 메모리 해제
    return 0;
}

 

- 동적 할당(new, delete)을 통해 런타임에 메모리를 할당하는 변수입니다.

- 주로 포인터와 함께 사용되며, 메모리 관리가 필요합니다.

반응형