티스토리 뷰

 C언어를 비롯한 모든 프로그래밍 언어에서 변수(Variable)의 역할은 상당히 중요합니다. 사용자로부터 데이터를 입력받았을때, 그 값은 변수에 저장되게 됩니다. 저장된 값을 일정한 연산 후 결과값을 리턴하는데 이때도 변수가 반드시 필요합니다. 프로그램을 만들때 변수를 사용하지 않는 프로그램은 없습니다. 따라서 변수의 역할을 파악하는 것은 완성도 높은 프로그램을 만드는데 중요하다는 것을 의미합니다. 그런데 변수에도 종류가 있습니다. C언어에서 사용하는 변수는 크게 5가지로 분류할 수 있습니다. 전역 변수, 지역 변수, 정적 변수, 외부 변수, 레지스터 변수 입니다. 오늘은 이 변수들의 대해서 소개하는 시간을 가져보려고 합니다.

◇ 변수의 종류와 범위


○ 변수란?

- 변수(Variable)의 사전적 의미는 '어떤 관계나 범위 안에서 여러가지 값으로 변할 수 있는 수'를 의미합니다. 여기서 변할 수 있는 수라는 것이 중요합니다. 상수의 경우 그 값이 절대로 변할 수 없지만 변수는 변할 수 있고, 그 값이 상황에 따라 변할 수 있어 프로그래밍에서 중요하게 사용됩니다.



○ 전역 변수(Global Variable)

- 전역 변수란 프로그램 전체에서 사용할 수 있는 변수를 의미합니다. 함수의 구분 없이 프로그램 전체에서 사용할 수 있기 때문에 프로그램의 시작과 동시에 우선적으로 선언이 되며, 전역 변수의 종료는 프로그램의 종료 직전에 일어납니다. 즉 전역 변수의 선언이 종료되었다는 것은 프로그램이 종료된다는 의미입니다.

- 변수는 기본적으로 쓰레기 값을 포함하고 있기 때문에 선언과 동시에 초기화를 시켜주어야 합니다. 하지만 전역변수의 경우 별도의 초기화 과정을 거치지 않더라도 자동으로 초기화를 시켜준다는 특징이 있습니다.

- 하지만 전역 변수에는 치명적인 단점이 있습니다. 바로 전역 변수를 많이 사용하게되면 프로그램의 무게가 무거워지고, 해킹에 노출된다는 것입니다. 전역 변수는 프로그램의 시작과 동시에 선언되기 때문에 굳이 사용하고 있지 않은 변수들 또한 선언이 되어 있는 상태입니다. 따라서 전역 변수를 무분별하게 사용하게되면 보안에 취약한 프로그램이 될 수 있습니다.


○ 지역 변수(Local Variable)

- 지역 변수란 특정 지역에서 사용하는 변수를 의미합니다. 여기서 특정 지역이란 함수 내에서 사용하는 것을 의미하며 이외에도 조건문, 반복문등 C언어의 모든 중괄호 내부에서 사용하는 변수를 의미합니다.

- 지역 변수의 선언은 해당 함수 및 중괄호의 시작과 동시에 일어납니다. 이 후 함수 및 중괄호가 종료되는 시점에 변수 또한 소멸하게 됩니다. 전역 변수의 경우 초기화를 시켜주지 않아도 자동으로 초기화가 이루어지나고 하였으나, 지역 변수의 경우 반드시 선언과 동시에 초기화를 시켜주어야합니다.

- 변수는 크게 전역 변수와 지역 변수로 나눌 수 있습니다. 앞서 전역 변수를 사용하게 되면 해킹에 노출되기 싶다고 하였습니다. 이러한 문제점을 개선하기 위해 전역 변수의 사용을 지양하고, 지역 변수의 사용을 지향할 필요가 있습니다.


○ 정적 변수(Static Variable)

- 기본적으로 정적 변수를 사용하기 위해서는 자료형 앞에 static을 붙혀 줍니다. int num = 0;이라는 변수를 정적 변수로 사용할 경우 static int num = 0;이 됩니다.

- 정적 변수는 전역 변수의 단점을 어느정도 개선하고 있지만 엄연한 차이가 있습니다. 정적 변수는 선언을 통해 변수를 호출하고, 변수의 소멸 시점은 프로그램의 종료직전입니다. 즉 전역 변수와 함께 소멸합니다.

- 정적 변수는 전역 변수의 특징을 가집니다. 별도의 초기화를 시키지 않아도 선언과 동시에 초기화가 이루어집니다. 다만 정적 변수만의 특징은 프로그램이 시작되면 초기화는 딱 한번만 진행된다는 것입니다. 예를 들어 반복문 내에서 정적변수가 선언되면 초기화를 한번만 이루어지고, 이후 반복과정에서는 데이터가 누적된다는 것을 의미합니다.


○ 외부 변수(Extern Variable)

- 외부 변수는 외부 파일에서 선언된 변수를 참조하는 변수 입니다. 자료형 앞에 extern의 키워드를 붙혀 사용하며, 다른 파일에 있는 전역 변수를 참조해 옵니다.

- 만약 특정 전역 변수를 외부에서 참조하지 못하게 하고 싶다면 정적 변수를 활용할 수 있습니다. 파일내에서 정적 변수로 선언된 변수의 경우 다른 파일내에서 외부 변수로 사용할 수 없습니다.


○ 레지스터 변수(Register Variable)

- CPU 내부의 레지스터에 변수를 할당하는 사용하기 위해서는 자료형 앞에 register를 붙혀줍니다.

- 레지스터 변수의 특징은 처리속도가 빠르다는 특징이 있으나 무리하게 많은 레지스터 변수를 사용할 경우 CPU고장의 원인이 될 수 있습니다. 최근에는 컴퓨터의 성능이 월등히 향상되어 굳이 레지스터 변수를 사용하지 않아도 처리속도가 빨라 레지스터 변수의 사용을 추천하지는 않고 있습니다.


 변수를 크게 전역변수와 지역변수로 나눌 수 있습니다. 이후 다시 전역변수의 단점을 보완한 정적 변수, 외부 파일에서 변수를 불러오는 외부 변수, 연산처리 속도에 가속도를 부여하기 위한 레지스터 변수로 나뉘어지는 것입니다. 레지스터 변수의 사용은 권하고 싶지 않습니다. 왜냐하면 무리하게 레지스터 변수를 사용하게 되면 CPU 고장의 원인이될 수 있고, 그러한 프로그램은 좋은 프로그램이될 수 없기 때문입니다.

※공감은 블로거에게 큰힘이 됩니다.

'나는 오늘도 공부한다 > C언어&CPP' 카테고리의 다른 글

C언어 math.h헤더 파일의 함수들  (5) 2015.10.19
C언어 연습문제  (6) 2015.10.14
C언어 화면지우기  (6) 2015.10.14
C언어 연습문제  (3) 2015.10.12
C언어 시간지연 함수  (2) 2015.10.07
댓글