본문 바로가기
Programming/C

C언어 3. 상수

by Rayched 2022. 8. 5.

앞에서 값을 언제든지 바꾸는 것이 가능한 '변수'에 대해 알아보았다.

그렇다면 프로그램을 개발하면서 변수의 값을 고정해놔야 하는 경우도 있을 것이다.

하지만 코드를 쓰다 보면 중간에 실수로 변수의 값을 바꿔버려서 의도한 것과 다른 결과를 맞게 되고

긴 코드를 일일이 확인하면서 문제점을 찾는 것은 여간 번거로운 작업이 아닐 수 없다.

이러한 사태를 미연에 방지하기 위해서 사용되는 것이 '상수'이다.

 

① 상수 Constant

 - 처음 정의했을 때 값을 무조건 입력해야 하고, 입력한 값을 바꿀 수 없다.

 - 상수 선언 시에는 자료형 앞에 'const'를 붙여서 선언한다.

 

상수의 정의와 상수를 선언하는 방법에 대해 알았다. 하지만 정말로 상수 선언 후 값을 변경할 수 없는 것일까?

만약 중간에 값을 변경하면 어떻게 될까? 이 의문을 해결해보기 위해서 예시를 하나 들어보겠다.

//상수 예시문제

#include <stdio.h>

int main(void) {
 const int Alpha = 5; //상수 Alpha 선언 및 값을 5로 지정
 
 Alpha = 10; //Alpha의 값을 10으로 변경한다.
 
 printf("Alpha에 저장된 정수값 : %d", Alpha);
 
 return 0;
 }

위와 같은 코드를 작성하고 컴파일을 해보자.

Console창에서 Alpha에 저장된 정수 값을 보여주지 않고 오히려 에러가 발생할 것이다.

프로그램을 실행하면 컴파일 오류가 발생함

그렇다면 컴파일을 하는 과정에서 왜 에러가 발생한 것일까?

일단 앞에서 설명한 '상수'의 정의를 다시 확인해보고, 작성한 코드를 살펴보자.

에러가 발생한 원인은 'Alpha = 10;' 상수 Alpha의 값을 정수 10으로 바꾸는 문장 때문이다.

상수는 한번 선언하고 나서, 값을 바꿀 수 없는 수이다. 그렇기 때문에 중간에 값을 바꾸는 문장이 있으면

컴파일을 하는 과정에서 에러가 발생하는 것이다. 이제 'Alpha = 10;'을 지우고 다시 프로그램을 실행해보자.

실행 결과

"Alpha에 저장된 정수 값 : 5"라는 문구가 출력된 것을 확인할 수 있다.


상수의 정의와 중간에 값을 변경하면 어떻게 되는지를 알았다.

그렇다면 상수는 왜 사용하는 것일까?

단도직입적으로 말하자면 상수가 가진 안정성 때문이다.

예를 들어서 구구단 5단을 계산하는 프로그램을 만들어야 한다고 해보자.

제시된 조건은 '구구단 5단만 계산해야 한다.', '계산식에는 정수를 입력해선 안된다.' 두 가지이다.

그럼 정수를 직접적으로 입력해서는 안되기 때문에 변수를 통해서 이를 우회해야 한다.

임의의 변수 2개를 선언해서 우회하면 되지만

만약 코드를 쓰다가 중간에 실수로 변수의 값을 변경하는 문구를 추가하면 의도한 것과 다른 결과가 나올 것이다.

이렇게 되면 문제의 원인을 찾기 위해 긴 코드를 하나하나 다 확인하면서 원인을 찾아내야 하는데

이는 여간 번거로운 작업이 아닐 수가 없다.

이러한 사태를 방지하기 위해서 사용하는 것이 상수이다.

상수는 선언과 값 입력을 동시에 하고, 나중에 입력한 값을 임의로 변경하지 못하기 때문에

절대 바꾸지 않을 값에 'const'를 붙여서 상수로 선언하는 것이다.

//구구단 5단 계산기
//상수 Number에 변수 Bar을 곱해서 구구단 5단을 계산한다.
//조건 1: 이 프로그램은 오직 구구단 5단만 계산해야한다.
//조건 2: 계산식에는 정수를 입력할 수 없다. (5*1, 5*2..등)

#include <stdio.h>

int main (void) {
 const int Number = 5; //구구단 5단만을 계산해야 하므로 상수 Number를 선언하고, 값을 5로 지정
 int Bar = 1;
 
 printf("=== 구구단 5단 계산기 ===\n");
 printf("%d * %d = %d\n", Number, Bar, Number * Bar);
 
 return 0;
 }

 

'Programming > C' 카테고리의 다른 글

C언어 5. 자료형 & 서식지정자  (0) 2022.08.12
C언어 4. 연산자  (0) 2022.08.06
C언어 2. 변수  (0) 2022.07.27
C언어 1. C언어 등장 배경 및 특징  (0) 2022.07.18