c++/기초

const

코드망령 2026. 6. 8. 09:49

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