본문 바로가기
IT 기술/C언어

extern과 static 키워드

by 썬's 2023. 2. 17.

안녕하세요 보글리아입니다.

저번 시간에는 C언어 함수의 지역 변수와 전역 변수를 설명드렸는데요..

이번 시간에는 변수의 의미를 다르게 바꾸는 extern과 static 키워드를 가르쳐 드리겠습니다.

※제 수업은 이전 주차에서 배운 개념을 재차 설명드리지 않습니다※

※본 수업에 들어가기 앞서 요약을 하고 가겠습니다※

 


요약

  • 전역 변수는 다른 프로젝트에서 사용 불가
  • extern 키워드 : 한 프로젝트에 선언된 전역 변수를 다른 프로젝트에 사용할 수 있게 하는 문법
  • static 키워드 : 한 프로젝트에 선언된 전역 변수를 다른 프로젝트에서 사용할 수 없게 하고 본 프로젝트에만 사용할 수 있게 제한을 두는 문법

extern 키워드

여러분들이 하나의 파일을 만들어 프로그래밍을 하다 보면, 소스 코드가 길어지는 경우가 있습니다.

이런 경우 하나의 파일에 소스 코드를 계속 작성하는 것보단, 용도에 맞는 함수를 묶어 여러 파일을 만들어 각 파일마다 소스 코드를 작성하는 것이 좋습니다. 예를 들면, 해리포터 소설을 한 권으로 끝내는 것이 아닌 여러 권으로 분리해 시리즈로 나누는 것을 볼 수 있습니다.

 

하지만, 여러 파일을 나눠 전역 변수를 선언하고 이를 사용하면 문제가 발생할 수 있습니다.

저번 시간에 사용한 소스 코드를 잠시 가져오겠습니다. 이 소스 코드에서 전역 변수 result를 선언하고 Num 함수에 사용한 다음 main 함수에 호출하고 값을 불러왔습니다. 이 코드는 아무 문제도 일으키지 않습니다. 

이는 하나의 파일 내에서 이루어진 소스 코드를 실행한 것이기 때문입니다.

#include <stdio.h>

int result; // 전역 변수


int Num(int data1, int data2)
{
	result = data1 + data2; // 전역 변수 사용
	return result; // 전역 변수 반환
}

int main()
{
	Num(5, 7); // 함수 호출

	printf("%d \n", result);

	return 0;
}

이번에는 상단의 코드를 두 파일로 나눴다고 가정해 보겠습니다.

하나는 Num 프로젝트로 전역 변수 result와 num 함수를 선언했습니다. 두 번째 프로젝트는 다른 함수들을 호출하는 main 프로젝트로 main 함수를 선언하고 Num 프로젝트에 선언된 num 함수를 호출했습니다. 

상단 코드에 보듯이 num 함수에는 전역 변수로 값을 리턴하기 때문에 main 프로젝트에서 num 함수를 호출하고 값을 출력하면, 값이 나와야 하지만, 오류가 발생합니다. 이는 전역 변수가 Num 프로젝트에 선언됐기 때문입니다.

 

전역 변수는 하나의 프로젝트 전체에서 사용이 가능하지만, 본 프로젝트가 아닌 다른 프로젝트에서는 참조해서 사용할 수 없습니다. 그렇다고 main 함수에 전역 변수 result를 새로 선언하면, 변수명 겹침으로 오류가 발생합니다.

두 프로젝트
두 프로젝트

이와 같은 오류를 해결하기 위해 사용하는 키워드를 extren 키워드라 합니다.

extern 키워드는 다른 프로젝트에 있는 전역 변수를 사용하겠다는 문법입니다.

 

하단에 extern 폴더가 있고 이 폴더 내 두 개의 프로젝트인 sum 프로젝트와 main 프로젝트가 있다고 하겠습니다.

좌측에 sum 프로젝트에 전역 변수 result를 우측 main 프로젝트에서 사용하려면, sum 프로젝트에 있는 int result 선언 후 앞에다가 extern을 붙여 주시면 됩니다. 그럼 이제 전역 변수를 main 프로젝트에서 사용 가능합니다.

출력해 보면 정상적으로 8이 나온 것을 보실 수 있습니다.

프로젝트 분류
프로젝트 분류
sum 프로젝트 및 main 프로젝트
sum 프로젝트 및 main 프로젝트

 


static 키워드

프로젝트 범위가 커지고 프로젝트를 분류할 때, extern 키워드를 사용하면, 전역 변수를 공유해 사용할 수 있습니다.

반대로 static 키워드는 전역 변수가 있을 때, 전역 변수 사용 범위에 제한을 두는 문법을 말합니다.

 

하단 이미지를 보시면, 전체 프로젝트를 A, B, C 프로젝트로 분류하고 A 프로젝트에 static 키워드로 전역 변수 result를 선언했다고 보겠습니다. 그러면 이 전역 변수는 다른 프로젝트에서 사용이 불가능한 전역 변수로 오직 A 프로젝트에서만 사용이 가능합니다. 아무리 extern 키워드를 사용한다고 해도 역시 마찬가지로 전역 변수 사용이 불가능합니다.

static 키워드
static 키워드

여기서 주의하실 점이 있습니다. I와 J라는 두 프로젝트가 있을 때, I 프로젝트에는 result라는 전역 변수를 선언하고 J 프로젝트에는 static으로 result 변수를 선언할 수 있습니다.

이 말은 변수명은 겹치면 안 되지만, 즉 같은 이름의 전역 변수를 두 개 선언해도 static 키워드를 사용하면, 별개의 전역 변수로 사용할 수 있습니다.

 


오늘은 extern 키워드와 static 키워드를 배워봤습니다.

두 키워드는 현업에서 프로젝트가 커지면 자주 사용하기 때문에 꼭 알아두셔야 합니다.

그럼 다음 시간에는 새로운 개념으로 뵙겠습니다.

긴 글 읽으시느라 너무너무 고생 많으셨습니다~~

댓글