C언어

[C언어] 정적 변수 static

코딩 메모장 2024. 9. 24. 23:40
728x90

1. 정적 변수 (Static Variable)

  • 정의: 함수 내에서 선언된 변수에 static을 붙이면, 해당 변수는 함수가 호출될 때마다 새로 생성되지 않고, 프로그램이 종료될 때까지 메모리에 유지됩니다.
  • 특징:
    • 함수가 종료되더라도 값이 유지됩니다.
    • 초기화는 한 번만 이루어지며, 프로그램이 실행되는 동안 그 값을 계속 사용할 수 있습니다.
  • 예제
#include <stdio.h>

void counter() {
    static int count = 0;  // 정적 변수
    count++;
    printf("Count: %d\n", count);
}

int main() {
    counter();  // Count: 1
    counter();  // Count: 2
    counter();  // Count: 3
    return 0;
}

 

2. 정적 전역 변수 (Static Global Variable)

  • 정의: 파일의 최상단에서 static을 붙여 선언된 전역변수는 해당 파일 내에서만 접근 가능하고, 다른 파일에서는 참조할 수 없습니다.
  • 특징:
    • 이름 충돌을 방지할 수 있으며, 변수의 범위를 제한할 수 있습니다.
  • 예제
// file1.c
#include <stdio.h>

static int globalVar = 10;  // 정적 전역변수

void display() {
    printf("Global Variable: %d\n", globalVar);
}

3. 정적 함수 (Static Function)

  • 정의: 함수 선언 시 static을 붙이면, 그 함수는 해당 파일 내에서만 호출할 수 있으며, 다른 파일에서는 사용할 수 없습니다.
  • 특징:
    • 모듈화와 캡슐화를 통해 코드의 가독성과 유지보수성을 향상시킵니다.
  • 예제
// file1.c
#include <stdio.h>

static void greet() {  // 정적 함수
    printf("Hello, World!\n");
}

void callGreet() {
    greet();  // 같은 파일 내에서 호출 가능
}

 

4. 장점과 단점

  • 장점:
    • 변수나 함수의 범위를 제한하여 이름 충돌을 방지합니다.
    • 정적 변수는 상태를 유지할 수 있어 특정 상황에서 유용합니다.
  • 단점:
    • 메모리에 계속 남아 있기 때문에, 너무 많은 정적 변수를 사용하면 메모리 사용량이 증가할 수 있습니다.
728x90