[C++] Const 키워드에 대해

2022. 2. 9. 23:12Languages/C++

 

 

 

Const 변수

const int rangeDistance = 125;

 

  • const 키워드를 사용하여 값을 상수로 선언하여 프로그래머가 변경할 수 없도록 지정할 수 있다. 즉, 읽기만 가능
  • 컴파일 타임 때 해당 const 상수의 값이 결정되며, 런타임 중에는 변경할 수 없다.
  • 평타 사거리, 시야 거리, 스킬 계수 등과 같이 한 번 설정한 값을 계속 유지하면서 사용할 때 유용하고, 프로그래머의 실수로 값을 변경하여 버그를 발견하기 어려운 상황 또한 예방해준다.

 

포인터 상수와 상수 포인터

 

포인터 상수

 

  • 포인터가 가리키는 값을 상수로 만들어 변경이 불가능하도록 만든다.
  • 포인터가 가리키는 변수의 값을 직접 변경하거나, 포인터 주소를 변경하는 것은 가능
int hp = 100, damage = 5;
const int* ptr = &hp;

// (*ptr) = 15;     포인터가 가리키는 값 변경 불가능
hp = 15;            // 변수 값 변경 가능
ptr = &damage;      // 포인터 주소값 변경 가능

 

상수 포인터

 

  • 포인터가 가리키는 주소값 자체를 상수로 만들어 변경이 불가능하도록 만든다.
    • 포인터에 다른 새로운 주소를 할당하는 게 불가능
  • 포인터가 가리키는 값이나 가리키는 변수를 직접 변경하는 것은 가능
int hp = 100, damage = 5;
int* const ptr = &hp;

// ptr = &damage;      포인터 주소값 변경 불가능
(*ptr) = 15;        // 포인터가 가리키는 값 변경 가능
hp = 15;            // 변수 값 변경 가능

 

포인터가 가리키는 주소도, 가리키는 값도 변경할 수 없도록 다음과 같이 사용할 수도 있다.

int hp = 100, damage = 5;
const int* const ptr = &hp;

// ptr = &damage;       포인터 주소값 변경 불가능
// (*ptr) = 15;         포인터가 가리키는 값 변경 불가능
hp = 15;                // 변수 값 변경 가능

 

 

Const 멤버 함수

class Monster {
    int hp;
public:
    int GetHP() const;          // 상수 멤버 함수 선언부
    void SetHP(int hp);
};

int Monster::GetHP() const {    // 상수 멤버 함수 구현부
    return hp;
}

void Monster::SetHP(int hp) {
    this->hp = hp;
}
  • const 키워드를 통해 멤버 함수를 선언하면, '읽기 전용' 함수로 지정할 수 있다. 즉, 상수 멤버 함수가 된다.
  • 해당 함수는 다른 변수의 값을 바꾸지 않는 함수라고 다른 프로그래머에게 명시시킬 수 있다.
  • 상수 함수 내에서는 객체들의 읽기만 수행되고, 상수 함수 내에서 호출할 수 있는 함수는 다른 상수 함수만 가능

 

Const 객체

Monster slime;
const Monster ribbonPig;

slime.GetHP();
slime.SetHP(100);
ribbonPig.GetHP();
// ribbonPig.SetHp(100);      const 객체는 내부 값 변경 불가
  • const 키워드를 사용한 객체는 내부 멤버 값을 읽기만 가능하고, 수정은 불가능하다.
  • 이런 특징을 이용해서, 함수에서 const &로 매개변수를 받아 참조한 객체 수정은 불가능하고 읽기만 가능하도록 응용할 수도 있다.

 

 

 

참고

728x90
반응형