728x90
반응형

C++ 멤버 함수(member function)에서 const의 의미와 차이점

  • C++ 클래스에서 멤버 함수(member function) 선언 시 const의 존재 여부는 함수의 동작과 호출 가능 범위를 결정짓는 중요한 요소입니다.
  • 특히 const 멤버 함수객체의 상태를 변경하지 않는 함수임을 보장 하며, const 객체에서도 호출할 수 있습니다.
  • 반면 const가 없는 멤버 함수는 객체 상태를 변경할 수 있고, const 객체에서는 호출할 수 없습니다.

  • 아래의 예제를 통해 차이를 자세히 살펴보겠습니다.


1. 예제 코드

  • cpp

      #include <iostream>
      
      class SpreadsheetCell
      {
      public:
          void setValue(double inValue);
          double getValue() const;   // const 멤버 함수
          double getValue();         // 비-const 멤버 함수
      
      private:
          double mValue;
      };
      
      void SpreadsheetCell::setValue(double inValue)
      {
          mValue = inValue;
      }
      
      // const 멤버 함수: 멤버 변수를 수정할 수 없음
      double SpreadsheetCell::getValue() const
      {
          // mValue = 10.0; // 이렇게 작성하면 컴파일 오류 발생
          return mValue;
      }
      
      // 비-const 멤버 함수: 멤버 변수 수정 가능
      double SpreadsheetCell::getValue()
      {
          mValue = 10.0; // 수정 가능
          return mValue;
      }
      
      int main()
      {
          SpreadsheetCell cell;
          cell.setValue(5.5);
          std::cout << "getValue() 호출 결과 (비-const): " << cell.getValue() << std::endl;
      
          const SpreadsheetCell constCell;
          // constCell.setValue(3.3); // const 객체에서는 setValue 호출 불가능
          // constCell.getValue();    // const 멤버 함수만 호출 가능
      }
    


2. 요약

  • 함수 선언 형태 특징
    double getValue() const; - 멤버 변수를 변경하지 않겠다는 약속
    - const 객체에서도 호출 가능
    - 내부에서 멤버 변수 변경 시 컴파일 오류 발생
    double getValue(); - 멤버 변수를 변경할 수도 있음
    - const 객체에서는 호출 불가능


3. 정리

  • const 멤버 함수는 클래스의 불변성을 지키고, 안정적인 함수 호출을 위해 반드시 필요한 요소입니다.
  • const를 올바르게 사용하면 코드의 의도가 명확해지고, 실수로 인한 멤버 변수 변경을 방지할 수 있습니다.
  • 따라서 "이 함수는 객체의 상태를 절대 바꾸지 않는다" 라고 생각되는 함수에는 const를 붙이는 습관을 가지는 것이 좋습니다.



  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄

728x90
반응형

+ Recent posts