C언어 상수와 매크로, 차이점과 사용 사례
C언어에서 값을 고정하고 반복적으로 사용하는 방법에는 상수(const)와 매크로(#define)라는 두 가지 주요 방법이 있습니다. 비슷해 보이지만 동작 방식, 처리 시점, 디버깅의 용이성 등 여러 면에서 큰 차이를 보입니다. 이 글에서는 각 기법의 개념과 특성을 비교 분석하고, 실제 코드에서 어떻게 선택하고 활용할지에 대한 방향성을 제시합니다.

목차
- const란 무엇인가?
- 매크로란 무엇인가?
- const와 매크로의 차이점
- const를 사용하는 적절한 상황
- 매크로가 유리한 경우
- 자주 하는 실수와 베스트 프랙티스
- 요약 및 선택 가이드
1. const란 무엇인가?
const는 변수의 값을 변경할 수 없게 만드는 키워드입니다. 즉, 컴파일 타임에 타입 검사와 함께 고정된 값을 가지는 변수를 선언할 수 있습니다.
const int MAX_SIZE = 100;
- 타입 안전성을 보장
- 디버깅이 쉬움
- 함수 인자 보호에 유용
2. 매크로란 무엇인가?
매크로는 전처리기 지시문(preprocessor directive)을 통해 컴파일 전에 소스코드를 치환하는 방식입니다. #define 키워드를 사용합니다.
#define MAX_SIZE 100
- 컴파일 전 텍스트 치환
- 타입 정보 없음
- 코드 최적화에 따라 위험성 존재
3. const와 매크로의 차이점
| 항목 | const | 매크로 |
|---|---|---|
| 처리 시점 | 컴파일 타임 | 전처리기 단계 |
| 타입 검사 | 있음 | 없음 |
| 디버깅 정보 | 유지됨 | 치환 후 사라짐 |
| 메모리 점유 | 있을 수 있음 | 없음 |
4. const를 사용하는 적절한 상황
const는 다음과 같은 경우에 매우 유용합니다:
- 함수 인자의 수정 방지
- 타입 안정성을 확보하고자 할 때
- 값을 디버깅하거나 참조할 필요가 있을 때
- 포인터와 함께 사용할 때 명확한 의미 전달 가능

5. 매크로가 유리한 경우
다음과 같은 경우에는 #define 매크로가 더 간단하고 효율적일 수 있습니다:
- 조건부 컴파일에 사용할 경우
- 헤더 파일에서 여러 상수를 공통 정의할 경우
- 성능에 매우 민감한 코드에서 인라인화된 상수로 사용할 때
6. 자주 하는 실수와 베스트 프랙티스
실수:
- 매크로에 괄호를 사용하지 않아 우선순위 문제 발생
- const 포인터의 방향을 잘못 이해하고 복사 시 오류 발생
- 디버깅 시 매크로 상수가 표시되지 않아 원인 파악 어려움
베스트 프랙티스:
- 가능하면
const를 기본으로 사용 - 매크로 상수에는 반드시 괄호 감싸기
- 매크로 대신
enum도 고려
7. 요약 및 선택 가이드
const는 타입 안전성과 디버깅, 유지 보수에 강점이 있는 반면, 매크로는 텍스트 치환의 유연성과 컴파일 전 처리가 필요한 상황에 적합합니다.
결론적으로:
- 일반 상수 값 →
const - 조건부 컴파일, 플랫폼 구분 →
#define - 복잡한 연산이 필요 없는 값 →
#define도 괜찮지만 주의해서 사용
C언어의 기본에 충실하되, 상황에 따라 전략적으로 const와 매크로를 사용하는 능력이 보다 깔끔하고 유지보수 가능한 코드로 나아가는 지름길입니다.
'프로그래밍 언어 > C' 카테고리의 다른 글
| C언어 변수 심화, 포인터와의 관계 이해하기 (0) | 2025.06.07 |
|---|---|
| C언어 리터럴의 종류와 사용법, 코드에서의 데이터 정의 (0) | 2025.05.16 |
| C 언어 char 타입, 문자 데이터 저장과 ASCII 코드 활용 (0) | 2025.04.27 |
| C 언어 실수형 데이터 타입 정리: float, double, long double (0) | 2025.04.21 |
| C 언어 정수형(Integer Types) 크기, 범위, 활용법 (0) | 2025.04.15 |