Channi Studies

[C++] 상수 클래스 | Using const with Classes 본문

C++/객체지향 프로그래밍 (OOP)

[C++] 상수 클래스 | Using const with Classes

Chan Lee 2024. 1. 2. 17:07

C++에서는 클래스에도 상수 (const) 개념을 적용할 수 있습니다.

 

const가 적용된 클래스는 속성(attribute)를 변경할 수 없습니다.

그렇다면 속성의 멤버 함수를 호출하면 어떻게 될까요?

 

const Player villain {"Villain", 100, 55};
villain.set_name("Thanos");			// COMPILER ERROR
std::cout << villain.get_name() << std::endl;	// COMPILER ERROR

villain 객체를 생성 후 멤버 함수들을 호출하자, 컴파일 에러가 발생합니다.

 

set_name()은 딱 봐도 이름 속성을 변경하는 거니까 그렇다고 해도,

이름을 반환하는 get_name()도 동일한 종류의 오류가 발생합니다.

C++에서 저러한 메소드도 잠재적으로 클래스를 modify할 수 있다고 판단하기 때문입니다.

 

그렇다면 이를 해결할 방법은 무엇일까요?

클래스 정의에서 메소드 프로토타입 마지막에 const 키워드를 입력하면 됩니다.

 

class Player{
    private:
        ...
    public:
        std::string get_name() const;
        ...
    };

 

이렇게 한 단어만 입력을 완료하면 컴파일 에러가 발생하지 않습니다.

 

심지어, 컴파일러가 해당 메소드를 판단하여 만약 해당 메소드가 속성을 변경하려고 한다면 컴파일 에러가 발생합니다.

에러를 사전에 방지할 수 있는 셈 입니다.

 

위의 예시로 돌아가서,

const Player villain {"Villain", 100, 55};
villain.set_name("Thanos");			// COMPILER ERROR
std::cout << villain.get_name() << std::endl;	// OK

set_name()은 여전히 에러가 발생할 것 입니다.

속성을 변경하니까, const 개념과 배치되기 때문입니다.

 

하지만 get_name() 메소드는 이제 잘 실행됨을 확인할 수 있습니다.