19. 변수의 종류

P4·2023년 6월 14일
0
post-thumbnail

변수의 종류 (지역변수, 전역변수, 정적변수, 외부변수)


메모리 영역의 종류 (스택 영역, 데이터 영역, 읽기 전용(코드, ROM), 힙 영역)

  • 스택영역 : 함수가 호출될 때 사용하는 메모리 영역
    (함수가 선언될 때 그 안의 지역변수도 포함이 되기 때문에 지역변수가 사용하는 메모리 영역으로 봐도 괜찮음)

  • 데이터 영역 : 전역변수가 사용하는 메모리 영역
    (전역변수, 정적변수, 외부변수 전부 이 영역을 사용함)

    • 데이터 영역은 main 함수가 호출될 때, 즉 프로그램이 시작될 때 만들어짐

    • 이 영역은 스택영역과는 별개임 (당연한 것), 그러니 프로그램이 종료될 때까지 전역변수는 사라지지 않음

    • main 함수 내부에 선언한 변수도 결국은 지역변수, 아예 완전히 바깥에 있는 것이 전역변수임, 헷갈리지 말것


전역변수

  • 전역변수가 사용하는 메모리 영역은 지역변수와 다름, 그곳을 데이터영역이라고 함

정적 지역 변수 (static) : 특정 지역 (함수) 내에서만 접근 가능한 전역변수라고 보면 됨

정적 지역 변수의 함수 초기화 : 정적 지역 변수는 프로그램 시작시 0으로 초기화 되며 이후 함수로 초기화 될때 한번 더 초기화가 이루어짐, 따라서 초기화가 2번 이루어지는 것

#include <iostream>

void countCalls() {
    static int count = 0;  // 정적 지역 변수
    count++;
    std::cout << "함수 호출 횟수: " << count << std::endl;
}

int main() {
    countCalls();  // 출력: 함수 호출 횟수: 1
    countCalls();  // 출력: 함수 호출 횟수: 2
    countCalls();  // 출력: 함수 호출 횟수: 3
    return 0;
}

정적 전역 변수 : 전역 변수와 같지만 사용 범위를 소스파일 내로 제한한 것 같음 (다른 파일에서 사용 불가능)

#include <iostream>

static int globalCount = 0;  // 정적 전역 변수

void countCalls() {
    globalCount++;
    std::cout << "전역 호출 횟수: " << globalCount << std::endl;
}

int main() {
    countCalls();  // 출력: 전역 호출 횟수: 1
    countCalls();  // 출력: 전역 호출 횟수: 2
    countCalls();  // 출력: 전역 호출 횟수: 3
    return 0;
}

외부 변수 : 다른 파일에서 사용 가능

  • File1.cpp
#include <iostream>

extern int sharedVar;  // 외부 변수 선언

void printSharedVar() {
    std::cout << "외부 변수: " << sharedVar << std::endl;
}
  • File2.cpp
#include <iostream>

int sharedVar = 0;  // 외부 변수 정의와 초기화

void incrementSharedVar() {
    sharedVar++;
}
  • main.cpp
#include <iostream>

extern int sharedVar;  // 외부 변수 선언

int main() {
    sharedVar = 5;  // 외부 변수 초기화

    incrementSharedVar();  // sharedVar 값 증가
    printSharedVar();  // 출력: 외부 변수: 6

    return 0;
}

설명

  • 수정된 예시 코드에서 extern 키워드가 추가되었습니다.

  • 외부 변수인 sharedVar는 File2.cpp에서 정의되어 초기화됩니다. 그리고 File1.cpp와 main.cpp에서는 sharedVar를 사용하기 위해 extern 키워드로 선언됩니다.

  • File1.cpp에서는 extern int sharedVar;를 통해 sharedVar가 다른 파일에서 정의된 외부 변수임을 알려줍니다.

  • 이렇게 선언된 외부 변수를 사용하여 printSharedVar() 함수에서 sharedVar의 값을 출력합니다.

  • File2.cpp에서는 int sharedVar = 0;로 외부 변수 sharedVar를 정의하고 초기화합니다.

  • main.cpp에서는 extern int sharedVar;로 외부 변수 sharedVar를 선언하고, sharedVar를 사용하여 값을 변경하고 printSharedVar() 함수를 호출하여 출력합니다.

  • 이제 각 파일은 올바르게 외부 변수를 선언하고 사용하여 데이터를 공유할 수 있게 됩니다.

profile
지식을 담습니다.

0개의 댓글