Type Here to Get Search Results !

C와 C++ 프로그래밍 언어의 const 키워드에 대하여 - const keyword

C와 C++은 가장 널리 사용되는 프로그래밍 언어 중 일부입니다. 이들 언어는 개발자에게 메모리와 함께 작업하는 기능을 제공합니다. 이러한 기능 중 하나는 const 키워드입니다. const는 변수나 함수 매개변수를 변경하지 못하게 하는 방법입니다. 이 글은 const 키워드에 대한 기본적인 이해를 제공하고, 어떻게 사용하는지와 함께 이점을 설명합니다.

  • const 키워드란?
  • const 사용 예시 - 변수, 포인터, 참조자, 함수
  • const와 C, C++ 요약 정리
  • 그 외 사용
c - c++ const keyword 썸네일


const 키워드란?


C와 C++은 가장 널리 사용되는 프로그래밍 언어 중 일부입니다. const는 이러한 언어에서 사용되는 키워드 중 하나입니다. const는 "상수(constant)"라는 의미를 가집니다. const로 변수를 선언하면, 해당 변수의 값을 변경할 수 없게 됩니다. 이러한 특성으로 const는 코드의 안정성을 높이는 데에 큰 역할을 합니다.

C와 C++ 프로그래밍 언어에서 const는 매우 중요한 키워드입니다. const는 변수나 함수 매개변수를 변경하지 못하게 하는 키워드로, 코드의 안정성을 높이는 데 도움이 됩니다. 이번 포스트에서는 const의 개념과 사용 예시, 이점, 포인터와의 관계, 참조자와의 관계, const 함수, const 멤버 함수에 대하여 알아보겠습니다.

const는 변수를 상수로 만들기 위해 사용됩니다. const로 선언된 변수는 수정되지 않는 값으로 인식되어, 컴파일러가 최적화를 수행하는 데 도움이 됩니다. 또한, const로 선언된 변수의 값을 실수로 변경하는 실수를 방지할 수 있습니다.

const는 함수 매개변수에도 사용될 수 있습니다. 함수 매개변수를 const로 선언하면, 함수 내에서 해당 매개변수의 값을 변경할 수 없습니다.

const는 포인터와 함께 사용될 때 중요한 역할을 합니다. 포인터는 변수나 함수의 주소를 저장하는 변수입니다. const를 포인터 변수와 함께 사용하면 해당 포인터가 가리키는 값을 변경하지 못하도록 합니다. 또한, const 포인터는 포인터 자체의 값을 변경하지 못하도록 합니다.

참조자는 변수에 대한 별칭입니다. const를 참조자와 함께 사용하면 해당 참조자가 가리키는 변수의 값을 변경하지 못하도록 합니다.

const의 개념에 대해 알아보았습니다. 아래에서는 const와 관련된 실제 코드 예시를 살펴보겠습니다.

const 사용 예시 - 변수, 포인터, 참조자, 함수


const와 일반 변수 및 매개변수 사용

const를 변수 선언 시 사용하여 해당 변수를 상수로 만들 수 있습니다. 예를 들어, 다음과 같이 변수를 선언할 수 있습니다.

const int a = 10;

또한, const는 함수 매개변수에도 사용될 수 있습니다. 다음과 같이 함수 매개변수를 const로 선언하면, 함수 내에서 해당 매개변수의 값을 변경할 수 없습니다.

void foo(const int a) {
    // a = 5; // 컴파일 에러 발생
}

const와 포인터 사용

const는 포인터와 함께 사용될 때 중요한 역할을 합니다. 포인터는 변수나 함수의 주소를 저장하는 변수입니다. const를 포인터 변수와 함께 사용하면 해당 포인터가 가리키는 값을 변경하지 못하도록 합니다.

int a = 5;
const int* ptr = &a; // ptr이 가리키는 값을 변경할 수 없음
또한, const 포인터는 포인터 자체의 값을 변경하지 못하도록 합니다.

int a = 5;
        int b = 10;
        int* const ptr = &a; // ptr이 가리키는 변수를 변경할 수 없음
        *ptr = b; // a의 값이 b의 값으로 변경됨

const와 참조자

참조자는 변수에 대한 별칭입니다. const를 참조자와 함께 사용하면 해당 참조자가 가리키는 변수의 값을 변경하지 못하도록 합니다.

int a = 5;
const int& ref = a; // ref가 가리키는 값을 변경할 수 없음

const 함수는 해당 함수에서 객체의 멤버 변수를 변경하지 않는 함수입니다. const 함수를 선언할 때는 함수 뒤에 const 키워드를 추가합니다.

const 멤버 함수

const 멤버 함수는 해당 함수에서 객체의 멤버 변수를 변경하지 않는 함수입니다. const 멤버 함수를 선언할 때는 함수 뒤에 const 키워드를 추가합니다.

class MyClass {
        public:
        int getValue() const {
        // 멤버 변수를 변경하지 않는 함수
        }
        void setValue(int value) {
        this->value = value;
        }
        ....

위와 같은 방법으로 const를 사용하여 코드를 작성하면, 변수나 함수 매개변수를 변경하지 못하게 하여 코드의 안정성을 높일 수 있습니다. 또한, 최적화를 수행하는 데도 도움이 됩니다.

이번 포스트에서는 const를 사용하여 코드를 작성하는 방법에 대해 살펴보았습니다. const를 적절히 활용하여 안정적이고 효율적인 코드를 작성하시기 바랍니다. 

const와 C, C++ 요약 정리


const는 C와 C++ 프로그래밍 언어에서 변수나 함수 매개변수를 변경하지 못하게 하는 키워드입니다. const로 선언된 변수는 수정되지 않는 값으로 인식되어, 코드의 안정성을 높이는 데 도움이 됩니다. const는 포인터와 참조자와 함께 사용될 때 중요한 역할을 합니다.

const 변수 선언
const int a = 10;
a = 20; // 컴파일 에러 발생

위 코드에서는 const int형 변수 a를 선언하고, a에 다른 값을 대입하려고 하면 컴파일 에러가 발생합니다.

const 함수 인자
int sum(const int a, const int b) {
return a + b;
}
위 코드에서는 sum 함수의 매개변수인 a와 b를 const로 선언하여, 함수 내에서는 a와 b를 변경할 수 없습니다.

const 멤버 변수 선언
class MyClass {

public:

const int a = 10;
};
위 코드에서는 MyClass 클래스의 멤버 변수 a를 const로 선언하였습니다. 이렇게 하면 MyClass 객체가 생성될 때 a의 값을 변경할 수 없습니다.

const 참조자 선언

int a = 10;

const int& b = a;

a = 20; // b 값도 20으로 변경됨
위 코드에서는 int형 변수 a를 선언하고, const int형 참조자 b를 선언하였습니다. 이렇게 하면 b를 통해 a의 값을 읽을 수는 있지만, b를 통해 a의 값을 변경할 수는 없습니다.

const 포인터 선언

int a = 10;
const int* b = &a;

a = 20; // b 값은 여전히 10
위 코드에서는 int형 변수 a를 선언하고, const int형 포인터 b를 선언하였습니다. 이렇게 하면 b를 통해 a의 값을 읽을 수는 있지만, b를 통해 a의 값을 변경할 수는 없습니다.

const 멤버 함수 선언
class MyClass {
public:
int a;
void printA() const {
std::cout << a << std::endl;

}
};

위 코드에서는 MyClass 클래스의 printA 함수를 const로 선언하였습니다. 이렇게 하면 printA 함수 내에서는 클래스의 멤버 변수인 a를 변경할 수 없습니다.


그 외 사용


아래와 같이 int const * 또는 int * const는 일반적이지 않은 사용이니 굳이 몰라도 됩니다. 일반적으로는 const int *를 사용합니다. 굳이 알려면, ptr1과 ptr2는 같다고 보시면 되고. ptr3는 포인트가 const가 되어서 포인터를 수정할 수 없는 사용 방법 입니다.

    const int * ptr1; // 일반적 사용
    int const * ptr2;
    int * const ptr3; // int *가 const
    
    *ptr1 = 1; // error
    ptr1 = NULL;
    
    *ptr2 = 1; // error
    ptr2 = NULL;

    *ptr3 = 1;
    ptr3 = NULL; // error