[ 프로그래밍 기초 ] Const키워드

THIST·2025년 5월 25일

C나 C++을 배우면서 가장 자주 보게 되는 키워드 중 하나가 'const'이다.
처음엔 단순히 "변하지 않는 변수" 정도로 알고 시작하지만,
포인터와 함께 쓰이기 시작하면 헷갈리기 딱 좋은 것 같다.

이 글에서는 'const'의 기본 개념부터,
포인터와 함께 쓰일 때의 다양한 의미들을 알아보도록 하겠다.

기본 개념 - const란?

말그대로 'const'변하지 않는'이라는 의미를 가지고 있다.
즉, 선언된 이후에는 값을 바꿀 수 없도록 만드는 역할을 한다.
이게 왜 필요한걸까?

const가 필요한 이유

개발자라면 모두들 아시다싶이, 혼자서만 개발하는것이 아니다. 누군가의 코드를 수정해야할 때가 있을것이고, 건드리면 안되는 코드부분도 존재한다. 이를 위해 const키워드는 다음과 같은 역할을
수행한다.

1. 의도하지 않은 수정 방지 (실수 예방)

void printName(char* name) {
	name[0] = 'X'; // 실수로 값 변경할 수도 있음.

만약 A라는 개발자가 printName이라는 함수를 만들었는데, 매개변수 name은 절대 바꾸면 안된다고 했을 때... 위의 코드에서는 name이 변경이 가능하다. 하지만, 아래코드에서는 컴파일 에러가 발생한다.

void printName(const char* name) {
	// 이제 name을 절대 수정할 수 없음.
	name[0] = 'X'; // 컴파일 에러 발생!

2. 코드의 "의도"를 명확하게 표현

int sum(const int a, const int b);

-> 이 함수는 a,b값을 읽기만 한다는 의도가 분명해보임.
-> 코드를 처음 보는 사람도, "아 이건 절대 바뀌지 않는 값이구나"를 인지하고, 개발고려사항에 착수 할 수 있음. (수정할 때 건들지 않도록)

3. 인터페이스 설계에서 신뢰성 확보

class Vector {
	public:
    	double getLength() const; // 객체 상태 안 바꿈
};

-> 멤버 함수 뒤에 const를 붙이면, 이 함수는 멤버 변수(상태)를 절대 수정하지 않는다는 보장을 컴파일러가 해준다.

4. 최적화에도 도움
컴파일러 입장에서도 const키워드는
"이 친구는 안바뀌니까 캐시해도 되고, 레지스터에 넣어도 되고, 다른 코드랑 엮어도 안전."
결국, 성능 최적화에 도움을 줄 수 있음.

따라서 const키워드는 "절대 바뀌면 안 되는 값"컴파일러 수준에서 강제하는 일종의 방어막인 셈이다.

**> - 버그를 막고

  • 의도를 분명하게 전할 수 있고
  • 코드의 신뢰도를 높일 수 있다.**

기본 개념 - const

아까 위에서도 상술했듯이, 변하지 않는다는것을 의미하기에,
즉, 선언된 이후에는 값을 바꿀 수 없도록 만들어준다.

const int num = 10;
num = 20; // 컴파일 에러

다양한 키워드 const의 의미들

포인터와 const를 결합해서 쓰기 시작하면, 다양한 의미로도 해석이 가능해진다.
(좀 더 유연한 설계가 가능)

1. const int num = 10;
-> num의 값을 바꿀 수 없게 고정.

2. int* const ptr
-> ptr의 주소는 고정, 값은 바꿀 수 있음

int* const ptr = &val1;
*ptr = 20; // 변경 가능
ptr = &val2; // 변경 불가

3. const int* ptr
-> ptr의 주소는 바꿀 수 있으나, 값은 고정

const int* ptr = &val1;
ptr = &val2; // 주소 변경 가능
*ptr = 30; // 컴파일 에러

4. const int* const ptr
-> ptr의 주소도, 값도 바꿀 수 없음

const int* const ptr = &val1;
*ptr = 20; // 컴파일 에러
ptr = &val1; // 컴파일 에러

const는 오른쪽이 고정된다.

const int* p -> *p고정 (값 못 바꿈)
int* const p -> p고정 (주소 못 바꿈)
const int* const p -> 둘 다 못 바꿈

const를 기준으로 "오른쪽을 고정하는 것"이라고 이해하면 편함.

'const'키워드를 적극적으로 사용하면,
내 코드에서 "이 값은 실수로라도 바뀌지 않는다"라는 것을 컴파일러가 보장해준다.

특히 헤더 파일이나 라이브러리 API를 만들 때,
매개변수에 'const'를 명시해주면 함수의 의도가 명확해지고,
사용자에게 불변성을 강하게 전달해줄 수 있다.

C/C++ 개발자라면 반드시 알고는 있어야 하는 개념인듯

profile
하고 싶은 개발을 지향하는 삶을 추구합니다:D

0개의 댓글