※ 공부 내용의 복습 개념으로 정리된 글입니다. - 출처 시나공
변수의 개요
변수(Variable)는 컴퓨터가 명령을 처리하는 도중 발생하는 값을 저장하기 위한 공간으로, 변할 수 있는 값을 의미합니다.
- 변수는 저장하는 값에 따라 정수형, 실수형, 문자형, 포인터형 등으로 구분합니다.
변수명 작성 규칙
- 영문자, 숫자, _(under bar)를 사용할 수 있습니다.
- 첫 글자는 영문자나 _(under bar)로 시작해야 하며, 숫자는 올 수 없습니다.
- 글자 수에 제한이 없습니다.
- 공백이나 *, +, -, / 등의 특수문자를 사용할 수 없습니다.
- 대 · 소문자를 구분합니다.
- 예약어를 변수명으로 사용할 수 없습니다.
- 변수 선언 시 문장 끝에 반드시 세미콜론(;)을 붙여야 합니다.
- 변수 선언 시 변수명에 데이터 타입을 명시하는 것을 헝가리안 표기법(Hungarian Notation)이라고 합니다.
예약어
예약어는 정해진 기능을 수행하도록 이미 용도가 정해져 있는 단어로, 변수 이름이나 다른 목적으로 사용할 수 없습니다.
- C언어에는 다음과 같은 예약어가 있습니다.
예제
다음의 변수명을 C언어의 변수명으로 사용할 수 있는지 여부를 쓰시오.
2abc
sum*
for
ha p
Kim, kim
정답
2abc : 변수명의 첫 글자를 숫자로 시작하여 사용할 수 없습니다.
sum* : 특수문자 '*'를 변수명에 사용할 수 없습니다.
for : 예약어를 변수명으로 사용할 수 없습니다.
ha p : 변수명 중간에 공백을 사용할 수 없습니다.
Kim, kim : C언어는 대소문자를 구분하기 때문에 Kim과 kim은 서로 다른 변수로 사용할 수 있습니다.
변수를 상수로 만들어 사용하기
- 변수는 프로그램을 실행하는 도중 발생한 값을 저장하기 위한 공간으로, 변수의 값은 변경될 수 있습니다. 하지만 변수에 저장된 값을 프로그램이 종료될 때까지 변경되지 않도록 상수로 만들어 사용할 수 있는데, 이런 경우 C언어에서는 const 또는 #define이라는 예약어를 사용합니다.
- 변수처럼 상수에 이름을 붙여 기호화하여 사용한다고 하여 심볼릭(Symboilc) 상수라고도 합니다.
예시
const float PI = 3.1415927;
#define PI = 3.1415927;
// const
// 변수를 상수로 변경하는 예약어입니다.
// const를 자료형 뒤에 붙여 'int const a = 5;'와 같이 사용할 수 있습니다.
// #define
// const와 마찬가지로 변수를 상수로 변경하는 예약어입니다.
// float PI
// 실수형으로 변수 PI를 선언하지만 const나 #define 예약어로 인해 PI는 상수가 됩니다.
// 3.1415927
// 저장되는 값 그 자체로, 리터럴(Literal)이라고 합니다.
// 이렇게 선언되면 PI는 변수가 아닌 상수이므로,
// 이후 PI는 프로그램 안에서 3.1415972이란 값으로 고정되어 사용됩니다.
※ 헝가리안 표기법(Hungarian Notation)
변수의 자료형을 알 수 있도록 자료형을 암시하는 문자를 포함하여 작성하는 방법입니다.
예를 들어 정수형 변수라는 것을 알 수 있도록 변수명에 int를 의미하는 i를 덧붙여 iValue라고 하는 것을 말합니다.
※ 상수(Constant)
1, 2, 'a', 'Hello'와 같이 프로그램이 시작되어 값이 한 번 결정되면 프로그램이 종료될 때까지 변경되지 않는 정보를 의미합니다.
기억 클래스
변수 선언 시 메모리 내에 변수의 값을 저장하기 위한 기억영역이 할당되는데, 할당되는 기억영역에 따라 사용 범위에 제한이 있습니다.
이러한 기억영역을 결정하는 작업을 기억 클래스(Storage Class)라 합니다.
- C언어에서는 다음과 같이 5가지 종류의 기억 클래스를 제공합니다.
자동 변수(Automatic Variable)
자동 변수는 함수나 코드의 범위를 한정하는 블록 내에서 선언되는 변수입니다.
- 함수나 블록이 실행되는 동안에만 존재하며 이를 벗어나면 자동으로 소멸됩니다.
- 초기화하지 않으면 쓰레기값(Garbage Value)이 저장됩니다.
외부 변수(External Variable)
외부 변수는 현재 파일이나 다른 파일에서 선언된 변수나 함수를 참조(referance)하기 위한 변수입니다.
- 외부 변수는 함수 밖에서 선언합니다.
- 함수가 종료된 뒤에도 값이 소멸되지 않습니다.
- 초기화하지 않으면 자동으로 0으로 초기화 됩니다.
- 다른 파일에서 선언된 변수를 참조할 경우 초기화 할 수 없습니다.
정적 변수(Static Variable)
정적 변수는 함수나 블록 내에서 선언하는 내부 정적 변수와 함수 외부에서 선언하는 외부 정적 변수가 있습니다.
- 내부 정적 변수는 선언한 함수나 블록 내에서만 사용할 수 있고, 외부 정적 변수는 모든 함수에서 사용할 수 있습니다.
- 두 변수 모두 함수나 블록이 종료된 뒤에도 값이 소멸되지 않습니다.
- 초기화는 변수 선언 시 한 번만 할 수 있으며, 초기화를 생략하면 자동으로 0으로 초기화 됩니다.
레지스터 변수(Register Varibale)
레지스터 변수는 메모리가 아닌 CPU 내부의 레지스터에 기억영역을 할당받는 변수입니다.
- 자주 사용되는 변수를 레지스터에 저장하여 처리 속도를 높이기 위해 사용합니다.
- 함수나 블록이 실행되는 동안에만 존재하며 이를 벗아면 자동으로 소멸됩니다.
- 레스터의 사용 개수는 한정되어 있어 데이터를 저장할 레지스터가 없는 겨웅 자동 변수로 취급되어 메모리에 할당됩니다.
- CPU에 저장되어 메모리 주소를 가질 수 없기 때문에 변수의 주소를 구하는 주소 연산자(&)를 사용할 수 없습니다.
가비지 콜렉터(Garbage Collector)
변수를 선언만 하고 사용하지 않으면 이 변수들이 점유한 메모리 공간은 다른 프로그램들이 사용할 수 없게 됩니다. 이렇게 선언만 하고 사용하지 않는 변수들이 점유한 메모리 공간을 강제로 해제하여 다른 프로그램들이 사용할 수 있도록 하는 것을 가비지 콜렉션(Garbage Collection)이라고 하며, 이 기능을 수행하는 모듈을 가비지 콜렉터(Garbage Gollector)라고 합니다.
※ auto
auto는 기본값으로 생략이 가능합니다.
※ 쓰레기값(Garbage Value)
쓰레기값은 메모리의 데이터를 변경하기 전에 마지막으로 남아 있던 데이터를 의미합니다.
※ 초기화
변수를 선언할 때 또는 선언된 변수에 처음 값을 저장하는 것을 초기화라 합니다. 초기화 이후에 저장된 값을 변경할 때는 그냥 대입 또는 저장한다고 합니다.
※ 레지스터 변수의 처리 속도
일반적인 변수는 메모리(주기억장치)에 저장된 데이터를 레지스터(CPU)로 가져와서 연산한 후 그 결과를 다시 메모리에 저장하지만 레지스터 변수는 레지스터에 데이터를 저장해 두고 연산을 수행하므로 처리 속도가 빠릅니다.
변수의 선언
변수는 일반적으로 다음과 같은 형식으로 선언합니다.
- 자료형 변수명 = 값;
- 자료형 : 변수에 저장될 자료의 형식을 지정합니다.
- 변수명 : 사용자가 원하는 이름을 임의로 지정합니다. 단 변수명 작성 규칙에 맞게 지정해야 합니다.
- 값 : 변수를 선언하면서 초기화할 값을 지정합니다. 단 값은 지정하지 않아도 됩니다.
예시
int a = 5;
// int
// 자료의 형식을 정수형으로 지정합니다.
// a
// 변수명을 a로 지정합니다.
// 5
// 변수 a를 선언하면서 초기값으로 5를 지정합니다.
예제1
다음과 같이 변수를 선언할 때 변수에 저장되는 값을 확인하시오
char aa = 'A';
// 문자형 변수 aa에 문자 'A'를 저장합니다.
// 문자형 변수에는 한 글자만 저장되며, 저장될 때는 아스키 코드값으로 변경되어 정수로 저장됩니다.
// aa가 저장하고 있는 값을 문자로 출력하면 'A'가 출력되지만 숫자로 출력하면 'A'에 대한 아스키 코드 65가 출력됩니다.
char bb = '1';
// 문자 변수 bb에 '1'을 저장합니다.
// 숫자를 작은따옴표로 묶을 경우 문자로 인식됩니다.
short si = 32768;
// 짧은 정수형 변수에 si에 32767을 넘어가는 값을 저장했기 때문에 오버플로가 발생합니다.
int in = 32768;
// 정수형 변수 in에 32768이 저장됩니다.
flat fl = 24.56f;
// 단정도 실수형 변수 fl에 실수 24.56을 저장합니다.
double dfl = 24.5678;
// 배정도 실수형 변수 dfl에 24.5678을 저장합니다.
double c = 1.23e-2;
// 배정도 실수형 변수 c에 1.23e-2를 저장합니다.
예제2
char a = 1.2345e-3;
// 배정도 실수형 상수를 char형으로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : double a = 1.2345e-3;
short a = 1.5e3f;
// 단정도 실수형 상수를 short형으로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : float a = 1.5e3f;
int a = '1';
// 문자형 상수를 int로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : char a = '1';
float a = 'A';
// 문자형 상수를 float로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : char a = 'A';
double a = "hello";
// 문자열 상수를 double로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : char a[] = "hello";
long long a = 1.5784E3000L;
// 배정도 실수형 상수를 long long형으로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : long double a = 1.5784E300L;
char a = 10;
// 정수형 상수를 char형으로 선언했기 때문에 오류가 발생합니다.
// 올바른 변수 선언 : int a = 10;
※ 단정도 / 배정도
float 자료형은 '단정도형', double과 long double 자료형은 '배정도형'이라고 표현합니다.
※ 1.23e-2
1.23e-2에서 e는 10의 지수승을 의미하므로 1.23x10⁻², 즉 0.0123을 의미합니다.
※ 실수 자료형에 따른 실수형 상수 입력 방법
실수형 상수는 기본적으로 double 형으로 인식되기 때문에 double형은 실수를 그냥 입력하고, float형으로 입력하려면 실수 뒤에 "f"또는 "F"를, long double형으로 입력하려면 실수 뒤에 "l'또는 "L"을 붙여 입력해야 합니다.
※ 문자열 선언 방법
문자열을 선언할 때는 배열로 선언해야 합니다. 배열로 선언하려면 변수명 뒤에 대괄호([])를 표시하면 됩니다.
'정보처리산업기사' 카테고리의 다른 글
정보처리산업기사 - 프로그래밍 언어 활용 - 데이터 입 · 출력 (0) | 2024.08.13 |
---|---|
정보처리산업기사 - 프로그래밍 언어 활용 - 연산 (0) | 2024.08.12 |
정보처리산업기사 - 프로그래밍 언어 활용 - 데이터 타입 (0) | 2024.08.09 |
정보처리산업기사 - 정보 시스템 기반 기술 용어 - 네트워크 관련 신기술 (0) | 2024.08.06 |
정보처리산업기사 - 정보 시스템 기반 기술 용어 - DB 관련 신기술 (0) | 2024.08.05 |