2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

C++에서 const 키워드의 의미는?

_____
Q1: C++에서 `const` 키워드는 무엇을 의미하나요?
A1: `const`는 "constant"의 약자로, 변수, 포인터, 참조, 멤버 함수 등이 수정 불가능함을 명시하는 키워드입니다. 즉, `const`가 선언된 객체는 값을 변경할 수 없습니다.

Q2: `const`를 변수 앞에 쓰면 어떤 효과가 있나요?
A2: 변수 앞에 `const`를 쓰면 그 변수는 상수처럼 취급되어 초기화 후 값 변경이 불가능합니다. 예를 들어, `const int x = 10;`으로 선언하면 `x`의 값을 바꿀 수 없습니다.

Q3: 포인터와 `const`를 함께 사용할 때 어떻게 해석하나요?
A3: 포인터에서 `const` 위치에 따라 의미가 달라집니다.

- `const int* ptr;` — `ptr`이 가리키는 대상 `int` 값을 수정할 수 없습니다. (포인터 자체는 변경 가능)
- `int* const ptr;` — 포인터 `ptr` 자체는 변경할 수 없지만, 가리키는 값은 수정 가능
- `const int* const ptr;` — 포인터와 가리키는 값 모두 변경 불가

Q4: `const` 멤버 함수란 무엇인가요?
A4: 클래스 멤버 함수 선언 뒤에 `const`를 붙이면, 그 멤버 함수 내에서는 객체의 멤버 변수를 변경할 수 없음을 나타냅니다. 즉, `void func() const;`는 멤버 상태를 변경하지 않는 함수임을 보장합니다.

Q5: 함수 인자의 const 선언은 어떤 의미인가요?
A5: 함수 파라미터에 `const`를 붙이면 함수 내부에서 해당 인자를 변경하지 않겠다는 의미입니다. 특히 포인터나 참조 타입에서 흔히 사용되며, 원본 데이터를 보호하는 용도로 중요합니다.

Q6: `constexpr`와 `const`의 차이는 무엇인가요?
A6: `const`는 런타임에 변경 불가능한 상수지만, `constexpr`는 컴파일 타임에 반드시 값이 결정되어야 하는 상수를 의미합니다. 즉, `constexpr`은 상수 표현식(constant expression)을 만들어내는 키워드입니다.

Q7: `const` 객체의 멤버 함수 호출 제한은 어떻게 되나요?
A7: `const`로 선언된 객체(예: `const MyClass obj;`)는 `const` 멤버 함수만 호출할 수 있습니다. 비-const 멤버 함수는 호출 불가하여 객체 상태 변경이 제한됩니다.

Q8: `mutable` 키워드가 `const`와 관련된 기능은 무엇인가요?
A8: `mutable`로 선언된 멤버 변수는 `const` 멤버 함수 내에서도 수정할 수 있습니다. 이는 불변성과 예외적으로 상태 변경을 허락할 멤버에 사용됩니다.

Q9: `const`를 사용하는 이유는 무엇인가요?
A9: 코드 안정성 및 명확성을 높이고, 의도치 않은 데이터 변경 방지를 통해 버그를 줄이기 위해 사용합니다. 또한 컴파일러 최적화에 도움을 줄 수 있습니다.

요약:
- `const`는 변경 불가능한 대상을 지정
- 변수, 참조, 포인터, 함수 등에 다양하게 적용 가능
- 포인터와 `const`의 위치에 따라 의미 달라짐
- 멤버 함수에 `const` 붙이면 객체 상태 변경 불가
- `const`를 활용해 안전하고 유지보수하기 쉬운 코드를 작성 가능
C++에서 `const` 키워드는 "constant"의 약자로, 변수가 변경될 수 없음을 나타내는 데 사용됩니다.

`const`는 코드의 가독성을 높이고, 의도하지 않은 변경을 방지하며, 프로그램의 안정성을 향상시키는 데 중요한 역할을 합니다.

`const` 키워드는 다양한 상황에서 사용될 수 있으며, 그 의미와 사용법은 다음과 같습니다.

1. 기본적인 사용법 1.1. 상수 변수 가장 기본적인 사용법은 변수를 상수로 선언하는 것입니다.

`const` 키워드를 사용하여 변수를 선언하면, 해당 변수의 값은 초기화 이후 변경할 수 없습니다.

```cpp const int MAX_VALUE = 100; // MAX_VALUE = 200; // 오류: 상수는 변경할 수 없습니다.

``` 1.2. 포인터와 const `const`는 포인터와 함께 사용될 때도 중요한 의미를 가집니다.

포인터가 가리키는 데이터가 변경될 수 없는 경우와 포인터 자체가 변경될 수 없는 경우를 구분할 수 있습니다.

- const 포인터 : 포인터 자체는 변경할 수 없지만, 포인터가 가리키는 데이터는 변경할 수 있습니다.

```cpp int value = 10; int* const ptr = &value; // ptr은 const 포인터 *ptr = 20; // 가능: ptr이 가리키는 데이터는 변경 가능 // ptr = nullptr; // 오류: ptr 자체는 변경할 수 없음 ``` - const가 붙은 데이터 : 포인터가 가리키는 데이터는 변경할 수 없지만, 포인터 자체는 변경할 수 있습니다.

```cpp const int* ptr = &value; // ptr이 가리키는 데이터는 const // *ptr = 20; // 오류: ptr이 가리키는 데이터는 변경할 수 없음 ptr = nullptr; // 가능: ptr 자체는 변경 가능 ``` - const 포인터와 const 데이터 : 포인터와 데이터 모두 변경할 수 없습니다.

```cpp const int* const ptr = &value; // ptr과 ptr이 가리키는 데이터 모두 const // *ptr = 20; // 오류: ptr이 가리키는 데이터는 변경할 수 없음 // ptr = nullptr; // 오류: ptr 자체는 변경할 수 없음 ```

2. 함수에서의 const

2.1. const 매개변수 함수의 매개변수에 `const`를 사용하면, 해당 매개변수가 함수 내에서 변경되지 않음을 보장합니다.

이는 특히 포인터나 참조를 사용할 때 유용합니다.

```cpp void printValue(const int& value) { // value = 20; // 오류: const 참조는 변경할 수 없음 std::cout << value << std::endl; } ```

2.2. const 멤버 함수 클래스의 멤버 함수에 `const`를 붙이면, 해당 함수가 클래스의 멤버 변수를 변경하지 않음을 나타냅니다.

이는 객체의 상태를 변경하지 않는 메서드를 정의할 때 유용합니다.

```cpp class MyClass { public: void display() const { // this->value = 10; // 오류: const 멤버 함수에서 멤버 변수를 변경할 수 없음 } }; ```

3. const와 템플릿 C++의 템플릿에서도 `const`는 중요한 역할을 합니다.

템플릿 매개변수로 `const`를 사용하면, 템플릿 인스턴스화 시 상수 값을 사용할 수 있습니다.

```cpp template class Array { public: int arr[N]; }; ```

4. const와 성능 `const`를 사용하면 컴파일러가 최적화를 수행할 수 있는 기회를 제공합니다.

상수로 선언된 변수는 변경되지 않기 때문에, 컴파일러는 해당 변수를 더 효율적으로 처리할 수 있습니다.

이는 성능 향상으로 이어질 수 있습니다.



5. C++에서 `const` 키워드는 코드의 안정성과 가독성을 높이는 데 중요한 역할을 합니다.

변수를 상수로 선언하거나, 함수 매개변수 및 멤버 함수에 `const`를 사용함으로써 의도하지 않은 변경을 방지하고, 프로그램의 의도를 명확히 할 수 있습니다.

`const`를 적절히 활용하면, 더 안전하고 효율적인 코드를 작성할 수 있습니다.

작성자: 김승현 [비회원] | 작성일자: 1년 전 2024-09-20 17:11:29
조회수: 133 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.