Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어의 정적(Static) 함수란? 개념과 예제로 쉽게 이해하기

C 언어에서 정적(static) 함수란 범위(scope)가 자신이 속한 객체 파일(object file)로 한정되는 함수를 말합니다. 즉, 정적 함수는 같은 객체 파일 내부에서만 호출할 수 있으며, 다른 소스 파일에서는 접근할 수 없습니다. 함수 이름 앞에 static 키워드를 붙이면 해당 함수를 정적 함수로 선언할 수 있습니다.

이러한 특성을 이해하기 위해 먼저 반대 사례부터 살펴보겠습니다.

정적 함수가 외부 파일에서 보이지 않는 이유

두 개의 파일 first_file.csecond_file.c가 있다고 가정해 보겠습니다.

first_file.c의 내용

static void staticFunc(void)
{
    printf("Inside the static function staticFunc() ");
}

second_file.c의 내용

int main()
{
    staticFunc();
    return 0;
}

위 코드를 함께 컴파일하면 "undefined reference to staticFunc()"라는 오류가 발생합니다. 그 이유는 staticFunc()가 정적 함수로 선언되어 있기 때문에 자신이 속한 객체 파일(first_file.c) 내부에서만 유효하고, second_file.cmain() 함수에서는 이 함수를 참조할 수 없기 때문입니다.

정적 함수의 올바른 사용 예제

반면, 정적 함수를 같은 파일 안에서 호출하면 아무 문제 없이 동작합니다. 다음은 C에서 정적 함수를 사용하는 전체 프로그램 예제입니다.

예제 코드

#include <stdio.h>

static void staticFunc(void){
    printf("Inside the static function staticFunc() ");
}

int main()
{
    staticFunc();
    return 0;
}

실행 결과

Inside the static function staticFunc()

코드 설명

위 프로그램에서 staticFunc()는 "Inside the static function staticFunc()"라는 문자열을 출력하는 정적 함수입니다. main() 함수가 이 함수를 호출하며, 정적 함수가 자신이 속한 객체 파일 내부에서만 호출되었기 때문에 프로그램은 정상적으로 실행됩니다.

정리

정적 함수는 static 키워드를 통해 선언되며, 파일 단위의 정보 은닉(information hiding)을 구현하는 데 유용합니다. 여러 소스 파일로 구성된 대규모 프로젝트에서 정적 함수를 활용하면 특정 파일 내부에서만 사용되는 보조 함수들을 캡슐화하여, 다른 파일과의 이름 충돌(name collision)을 방지하고 코드의 모듈성을 높일 수 있습니다.