C 기본 문법 – 변수와 상수 – 2편: 상수 선언과 사용 완전 정복!
안녕하세요, C 언어를 열심히 공부하고 계신 여러분 😊
이번 시간에는 절대 바뀌지 않는 값, 바로 **상수(constant)**에 대해 배워보겠습니다!
변수는 말 그대로 ‘변할 수 있는 값’을 저장하는 공간이었죠?
그렇다면 상수는? 네 맞습니다!
‘한 번 정해지면 절대 바뀌지 않는 값’을 저장하는 공간이에요.
프로그래밍을 하다 보면, 절대로 바뀌면 안 되는 값이 있어요.
예를 들면 원주율(π = 3.141592), 최대값 한계, 오류 코드 등
이런 값들은 실수로라도 변경되지 않도록, 상수로 관리하는 것이 안전하고 효율적입니다!
그럼 이제 C 언어에서 상수를 어떻게 선언하고 사용하는지, 하나하나 예시와 함께 자세히 알아볼게요 🧠
상수란?
상수(Constant)는 프로그램 실행 중에 절대로 값이 바뀌지 않는 데이터입니다.
- 상수는 초기화한 값만 사용 가능
- 중간에 값을 변경하려 하면 컴파일 에러 발생
- 가독성 향상, 오류 방지, 의미 전달의 효과
🎯 비유하자면,
상수는 “금고에 잠가둔 금화” 같은 거예요.
꺼내볼 수는 있지만, 절대로 바꿀 수는 없는 값이죠!
C 언어에서 상수를 선언하는 방법 2가지
방법 1. const
키워드 사용
const int MAX_SCORE = 100;
MAX_SCORE
는 프로그램 내에서 절대 변경 불가const
를 사용하면 컴파일러가 자동으로 보호해줍니다
방법 2. #define
전처리 지시자 사용
#define PI 3.141592
- 컴파일 전에 텍스트 치환되는 방식
- 자료형이 없고, 단순한 값 치환에 유리
- 전통적으로 많이 쓰이는 방식
const
와 #define
의 차이점 비교
항목 | const |
#define |
---|---|---|
자료형 | 있음 (int, float 등) | 없음 |
범위 | 스코프를 가짐 (지역/전역 가능) | 전체 파일 |
디버깅 시 확인 | 가능 | 불가능 (컴파일 전 치환됨) |
타입 검사 | 됨 | 안 됨 |
세미콜론 필요 여부 | 필요함 | 없음 (; 쓰면 오류!) |
✅ 추천: 복잡한 프로그램에서는
const
를 사용하는 것이 안정적입니다!
코드 예제로 알아보기
const
사용 예시
#include <stdio.h>
int main() {
const float PI = 3.14f;
float radius = 5.0;
float area = PI * radius * radius;
printf("원의 넓이: %.2f
", area);
return 0;
}
출력 결과:
원의 넓이: 78.50
📌 만약
PI = 3.1415;
처럼 값을 변경하려 하면?
❌ 컴파일 에러가 발생합니다!
#define
사용 예시
#include <stdio.h>
#define MAX_USERS 100
int main() {
printf("최대 사용자 수는 %d명입니다.
", MAX_USERS);
return 0;
}
출력 결과:
최대 사용자 수는 100명입니다.
📌
MAX_USERS
는 단순히 코드 상에서 100으로 치환됩니다.
다양한 자료형의 const
선언 예시
const int year = 2025;
const float taxRate = 0.1f;
const char grade = 'A';
const char* greeting = "Hello!";
🎯 문자열 상수도
const
를 붙여서 읽기 전용 포인터로 사용할 수 있어요!
전역 상수 vs 지역 상수
const int GLOBAL_LIMIT = 100; // 전역 상수
int main() {
const int LOCAL_LIMIT = 50; // 지역 상수
printf("%d, %d
", GLOBAL_LIMIT, LOCAL_LIMIT);
return 0;
}
- 전역 상수: 모든 함수에서 접근 가능
- 지역 상수: 선언된 블록 안에서만 사용 가능
상수를 사용하는 이유
이유 | 설명 |
---|---|
코드 가독성 향상 | PI vs 3.141592 → 이름으로 의미가 명확해짐 |
유지보수 용이 | 값 변경 시 한 줄만 고치면 됨 |
의도 전달 | 절대로 바꾸지 말아야 할 값임을 명확히 표현 |
컴파일 에러 유도 | 실수로 변경 시 에러 발생 → 안전한 코드 유도 |
상수 관련 실전 팁
✅ TIP 1: 자주 쓰는 값은 전역 const
로 관리
const int MAX_BUFFER_SIZE = 1024;
- 여러 함수에서 재사용 가능
- 유지보수가 쉬워요!
✅ TIP 2: #define
은 매크로와 조건문에 활용
#define DEBUG_MODE
#ifdef DEBUG_MODE
printf("디버그 출력
");
#endif
✅ 상수 선언 요약 정리
문법 | 예시 | 설명 |
---|---|---|
const 자료형 변수명 = 값; |
const int MAX = 100; |
정적 타입, 컴파일 시 타입 체크 |
#define 매크로명 값 |
#define PI 3.14 |
단순 값 치환, 자료형 없음 |
⚠️ 상수 사용 시 주의할 점
주의사항 | 설명 |
---|---|
const 는 자료형이 반드시 있어야 함 |
const PI = 3.14; ❌ → 오류 발생 |
const 는 세미콜론 필요, #define 은 세미콜론 금지 |
#define PI 3.14; ❌ |
#define 은 디버깅 시 값 추적 어려움 |
복잡한 코드에선 const 추천 |
문자열 상수는 변경 금지 | "Hello" 같은 문자열은 불변입니다 |
포인터에 const 붙일 때는 위치에 따라 의미가 다름 | const char* p vs char* const p 는 완전히 다름 |
마무리하며 💬
상수는 안전하고 명확한 프로그래밍을 위한 기본 요소입니다.
초기에는 “굳이 안 써도 되지 않나?” 싶겠지만,
프로그램이 커질수록 상수의 중요성은 배가 됩니다.
다음 시간에는 변수와 상수의 활용을 더욱 확장하는,
연산자와 표현식에 대해 배워보겠습니다!
그럼 오늘도 함께 성장해 주셔서 감사합니다.
코딩은 실수 없이 조금씩! 🚀 감사합니다 😊