ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 상수형 메서드
    프로그래밍/C & C++ 2024. 7. 6. 22:53
    728x90
    반응형

    상수형 메서드(const member function)는 C++ 클래스에서 멤버 함수가 객체의 상태를 변경하지 않음을 보장하기 위해 사용됩니다. 상수형 메서드는 함수 선언의 끝에 const 키워드를 추가하여 정의합니다. 이를 통해 해당 함수 내에서는 멤버 변수를 변경할 수 없으며, 상수 객체에서도 호출할 수 있게 됩니다.

    상수형 메서드의 선언과 정의

    상수형 메서드는 다음과 같이 선언하고 정의할 수 있습니다:

    class MyClass {
    private:
        int value;
    
    public:
        MyClass(int v) : value(v) {}
    
        // 상수형 메서드 선언
        int getValue() const {
            return value;
        }
    
        // 비상수형 메서드
        void setValue(int v) {
            value = v;
        }
    };

    위의 예제에서 getValue 메서드는 상수형 메서드로 선언되었으며, setValue 메서드는 비상수형 메서드입니다.

    상수형 메서드의 사용 예

    다음은 상수형 메서드를 사용하는 예제입니다:

    #include <iostream>
    
    class MyClass {
    private:
        int value;
    
    public:
        MyClass(int v) : value(v) {}
    
        int getValue() const {
            return value;
        }
    
        void setValue(int v) {
            value = v;
        }
    };
    
    int main() {
        const MyClass obj(5); // 상수 객체
    
        std::cout << "Value: " << obj.getValue() << std::endl; // 정상 동작
    
        // obj.setValue(10); // 오류: 상수 객체에서는 상수형 메서드만 호출 가능
    
        return 0;
    }

    설명

    • 상수형 메서드:

      • getValue 메서드는 상수형 메서드로 선언되었습니다. 이 메서드는 객체의 멤버 변수 value를 변경하지 않음을 보장합니다.
      • 상수형 메서드는 상수 객체에서도 호출할 수 있습니다. 예제에서는 const MyClass obj(5)와 같이 상수 객체를 생성하고, obj.getValue()를 호출하고 있습니다.
    • 비상수형 메서드:

      • setValue 메서드는 상수형 메서드가 아닙니다. 이 메서드는 객체의 멤버 변수 value를 변경할 수 있습니다.
      • 상수 객체에서는 비상수형 메서드를 호출할 수 없습니다. 따라서 obj.setValue(10)은 오류를 발생시킵니다.

    상수형 메서드의 장점

    1. 객체 불변성 보장:

      • 상수형 메서드는 객체의 상태를 변경하지 않음을 보장하므로, 객체의 불변성을 유지할 수 있습니다.
    2. 안전한 코드 작성:

      • 객체의 상태를 변경하지 않는 메서드를 명확히 구분하여 코드의 안전성을 높일 수 있습니다.
    3. 멀티스레딩에서의 안전성:

      • 상수형 메서드는 상태 변경이 없으므로, 멀티스레드 환경에서 동기화 문제를 피할 수 있습니다.
    4. 코드 가독성 향상:

      • 메서드가 객체의 상태를 변경하지 않음을 명시적으로 표현하여 코드의 가독성을 높일 수 있습니다.

    상수형 메서드 내에서의 제한사항

    • 상수형 메서드 내에서는 멤버 변수를 변경할 수 없습니다.

      int getValue() const {
          value = 10; // 오류: 상수형 메서드 내에서는 멤버 변수를 변경할 수 없음
          return value;
      }
    • 상수형 메서드 내에서는 비상수형 메서드를 호출할 수 없습니다.

      void someFunction() const {
          setValue(10); // 오류: 상수형 메서드 내에서는 비상수형 메서드를 호출할 수 없음
      }

    요약

    상수형 메서드는 객체의 상태를 변경하지 않는 메서드를 선언하는 방법입니다. 이를 통해 코드의 안전성과 가독성을 높이고, 멀티스레딩 환경에서의 동기화 문제를 줄일 수 있습니다. 클래스 설계 시 상수형 메서드를 적절히 사용하면 객체의 불변성을 보장할 수 있어, 더 안전하고 유지보수하기 쉬운 코드를 작성할 수 있습니다.

    728x90
    반응형

    '프로그래밍 > C & C++' 카테고리의 다른 글

    [C++] Mutable  (0) 2024.07.07
    [C++] Auto  (0) 2024.07.07
    [C++] STL 종류  (0) 2024.07.06
    [C++] 제네릭 프로그래밍  (0) 2024.07.05
    [C++] 템플릿  (0) 2024.07.05
Designed by Tistory.