상수 (Constant)
상수의 뜻은 무엇일까?
수학시간에 '상수'라는 말을 많이 들어봤을 것이다.
상수는 말 그대로 '값이 변하지 않는 수'라는 의미로 '값이 변하는' 변수와 반대 의미를 가진다.
C언어에서는 '변경이 불가능한 수'라는 의미를 가지게 된다. (수학적 의미로 생각해도 무방하다고 생각한다).
상수역시 변수와 마찬가지로 자료형을 근거로 한다.
상수는 두 가지로 나뉠 수 있는데 (나눈다는 표현이 맞는지..)
이름을 가지는 '심볼릭 상수'와 이름을 가지지 않는 '리터럴 상수'가 있다.
상수의 표현을 알아보자!
정수형 상수 : int 형
실수형 상수 : double 형
문자형 상수 : int 형
(사실상 int형의 정수 형태로 저장되기 때문에 char이 아니더라도 사용가능)
* 변수 앞에 붙은 자료형과는 무관하다.
ㆍ 접미사를 이용한 상수의 표현
float num1 = 5.789
float num2 = 3.24 + 5.12;
위의 명령에는 경고 메시지가 발생한다.
상수는 double형인데 변수가 float형이니 데이터가 손실될 수 있다.
float num1 = 5.789f;
float num2 = 3.24F + 5.12F;
ex) 경고 메시지 발생 안함 상수를 float형으로 선언
F나 f나 똑같단다.
<정수형과 상수형의 표현을 위한 접미사>
ㆍ 리터럴(Literal) 상수 : 이름을 가지지 않는 상수
사실 상수가 하는 역할은 리터럴 상수나 심볼릭 상수나 똑같다.
다만 "상수가 이름을 가지냐"에 따라서 달라지는 것이다.
위 그림을 보면 이해가 잘 될 것이다.
int num = 30 + 40;
int형으로 num이라는 변수를 선언하고 40과 30을 더한 70을 num에 저장하라고 하는데...
연산자 우선순위에 의해 +(덧셈 연산)연산이 =(대입 연산)연산 보다 더 빨리 이루어진다는 것을 그림으로써 이해가 될 것이다.
우선 상수인 40과 30이 덧셈연산을 통해 70이라는 상수로 바뀌게되고 결국 변수 num에 저장되는 것이다.
이로써 알아낸 사실이 한 가지 있다.
바로! 40과 30, 70이라는 상수는 이름이 없다.
이것이 바로 리터럴 상수이다.
여러분은 리터럴 상수를 이해했다.
ㆍ심볼릭(Symbolic) 상수 : Const 상수
이름이 없는 리터럴 상수와는 다르게 심볼릭 상수(Const 상수)는 이름을 가지고 있다.
변수 선언 앞에 'const' 키워드를 붙이면 선언이 완료된다.
ex) const int Main; // 주의!를 읽어 보도록 하자!
const int Main = 10; // 정상적인 선언
*주의!!, 반드시 읽으세요~
상수 선언 시 반드시 값을 초기화 해주어야 한다.
Because, 상수이기 때문에 변경이 불가하다.
const int MAX; //MAX라는 상수를 int형으로 선언 후 쓰레기값으로 초기화됨 (변경이 불가)
MAX = 100; // 에러 발생 : 상수의 값은 변경이 불가능하다.
※ 참고~
상수의 이름은 대문자로 표시하고 둘 이상의 단어를 연결할 때에는 언더버(_)를 사용한다.
ex) MY, MY_AGE