const 정리
1. const 기본 개념
const는 값을 변경할 수 없게 만드는 키워드이다.
const int a = 10;
a = 20; // 오류
- 읽기 전용 변수(상수)
- 선언 후 값 변경 불가능
2. const를 사용하는 이유
값 변경 방지
실수로 데이터를 수정하는 것을 막을 수 있다.
코드 의도 명확화
해당 값이 변경되면 안 된다는 것을 명확하게 표현할 수 있다.
최적화 가능
컴파일러가 추가 최적화를 수행할 수 있다.
3. 포인터에서 const
(1) 값이 const
const int* p = &a;
또는
int const* p = &a;
의미
- 포인터가 가리키는 값 변경 불가
- 포인터 주소 변경 가능
*p = 20; // 오류
p = &b; // 가능
(2) 포인터 자체가 const
int* const p = &a;
의미
- 포인터 주소 변경 불가
- 가리키는 값 변경 가능
*p = 20; // 가능
p = &b; // 오류
(3) 둘 다 const
const int* const p = &a;
의미
- 가리키는 값 변경 불가
- 포인터 주소 변경 불가
*p = 20; // 오류
p = &b; // 오류
4. 함수에서 const
(1) 값 전달
void func(const int x);
의미
- 함수 내부에서 x 변경 불가
- 복사본을 받기 때문에 큰 의미는 없음
void func(const int x)
{
x = 10; // 오류
}
(2) 참조 전달 (중요)
void func(const int& x);
의미
- 복사 발생하지 않음
- 원본 수정 불가
- 성능 향상
- 안전성 향상
void func(const int& x)
{
// x = 10; // 오류
}
실무에서 가장 많이 사용하는 형태 중 하나이다.
객체 참조 전달
void PrintPlayer(const Player& player);
의미
- 객체 복사 없음
- 원본 수정 불가
큰 객체를 함수에 전달할 때 자주 사용한다.
5. 클래스에서 const 함수
class A
{
public:
int Get() const;
};
의미
- 멤버 변수 수정 불가
- const 객체에서도 호출 가능
class A
{
public:
int Value = 10;
int Get() const
{
return Value;
}
};
const 객체
const A Obj;
const 객체는 const 함수만 호출 가능하다.
Obj.Get(); // 가능
Obj.Set(); // 오류
this 포인터 변화
일반 함수
A* const this
const 함수
const A* const this
즉, const 함수 내부에서는 객체를 수정할 수 없다.
6. const vs #define
#define
#define SIZE 10
특징
- 전처리기 치환
- 타입 없음
- 디버깅 어려움
const
const int Size = 10;
특징
- 타입 존재
- 컴파일러가 타입 검사 가능
- 디버깅 쉬움
- 더 안전함
비교
| 구분 | #define | const |
|---|---|---|
| 타입 | 없음 | 있음 |
| 디버깅 | 어려움 | 쉬움 |
| 타입 검사 | 불가능 | 가능 |
| 안전성 | 낮음 | 높음 |
| 사용 권장 | ❌ | ✅ |
7. const와 constexpr 차이
const
실행 중에도 값이 결정될 수 있다.
const int x = GetValue();
constexpr
컴파일 시간에 값이 확정되어야 한다.
constexpr int x = 10;
constexpr int Size = 100;
int Arr[Size];
컴파일 타임 상수로 사용할 수 있다.
8. 실무에서 자주 보는 형태
문자열 전달
void Print(const std::string& Str);
객체 전달
void Update(const Player& PlayerData);
Getter
int GetHP() const;
읽기 전용 포인터
const Player* Target;
9. const 읽는 방법
const int* p;
→ "p가 가리키는 int는 const"
int* const p;
→ "p 자체가 const"
const int* const p;
→ "가리키는 값도 const, 포인터도 const"
핵심 요약
const는 값을 변경할 수 없게 만드는 키워드이다.
특히 중요한 형태
const int&
const std::string&
const Player&
const int*
int* const
const int* const
int GetHP() const;
실무에서는 "수정할 필요가 없는 값은 최대한 const를 붙이는 것" 이 일반적인 코딩 스타일이다.
'c++ > 기초' 카테고리의 다른 글
| 동적할당 (0) | 2026.06.08 |
|---|---|
| 값 타입과 참조타입 (0) | 2026.06.08 |
| extern (외부 변수) (0) | 2026.06.05 |
| 분할 구조 (Header / Source File) (0) | 2026.06.05 |
| nullptr (0) | 2026.06.05 |