본문 바로가기

프로그래밍/C 기초

[C언어 강좌] #31 상수 , const

const 는 constant의 약자입니다.

constant는 변함없는 이라는 뜻을 가지고있죠.


변수의 값을 바꾸는것을 방지하기 위해서 존재하는것이죠. const를 붙이면 그 변수는 상수가 되는것입니다.


변수와 달리 상수는 값을 변경할수 없는 읽기만 할수있는것이죠.

상수는 이름을 가진 상수와 이름을 가지지 않는 상수 두가지로 나눌수 있습니다.


이름을 가지지 않는 상수를 리터럴 상수라고합니다.

우리는 지금까지 리터럴 상수를 많이 봐왔습니다.



이 예제에 있는 10과 20이 리터럴 상수입니다.


여기서 num에 값을 저장하려면 10과 20의 덧셈연산이 먼저 이뤄져야겠죠.

하지만 cpu에서 연산을 하려면 10과 20도 메모리상에 존재해야 연산이 가능합니다.

그래서 10과 20을 메모리공간에 상수형태로 저장하고 두 상수의 덧셈연산이 이뤄집니다. 그리고 그 후에 num에 값이 저장되겠죠.

근데 여기서 연산이 된 두 상수는 이름이 없습니다. 이런 상수를 리터럴 상수라고 하는것이죠.


그리고 리터럴상수와 달리 이름이 있는 상수도 있습니다. 그런 상수를 심볼릭상수(const 상수)라고 합니다.

변수 앞에 const를 붙이게되면 그 변수는 값을 바꿀수 없기때문에 상수가 되버립니다.



이런식으로 상수의 값을 변경하려고하면 컴파일에러가 나게됩니다.

상수는 PI같이 3.1415로 고정되있는 숫자나 게임에서 캐릭터의 최대 레벨같이 고정되있는 수자 사용합니다.

사실 상수가 없어도 프로그램은 정상적으로 돌릴수 있지만 실수로 프로그래머가 고정되어있어야 할 값을 바꿔버리는 일을 막아줄수 있습니다. 컴파일 에러가 나면 바로바로 고치면 되겠지만 그렇지 않으면 어디서 버그가 난지도 모르고 버그를 고치느라 시간을 버리게될것입니다.


그리고 const를 붙여놓으면 이 숫자는 고정되있는 수다. 앞으로 바꾸지 않겠다! 라는것을 표현해주기 위한 방법이라고 보는게 좋습니다.

코드의 가독성을 높이는 역할도 하는것이죠. 그리고 일반적으로 상수는 모두 대문자로 표기하고 두 단어를 연결할때는 MY_AGE 처럼 언더바를 통해서 연결합니다. 이렇게 하지 않으면 프로그램이 돌아가지 않는다는것은 아니지만 상수를 쉽게 구별하기 위한 프로그래머들 끼리의 약속입니다.