본문 바로가기

C++

캡슐화

 

좋은 클래스가 되기 위해 필요한 조건으로 정보은닉과 캡슐화가 있다.

정보 은닉과 캡슐화는 밀접한 관련이 있다.

 

정보은닉

정보은닉은 제한된 방법으로 접근의 허용을 해서 잘못된 값으로 맴버 변수, 맴버 함수가 저장되지 않도록 확인하기 위해서 유용하게 쓰인다. 흔히, 프로그래머는 'private'으로 맴버변수를 선언하고, 해당 변수에 대한 접근을 개별적으로 부여하여, 안전한 형태로 맴버 변수의 접근을 유도하는 것이 정보은닉이다. 

 

Const 함수

 함수 내에서 맴버 변수의 접근 및 변경을 통제하는 const 함수에 의해서 저장된 값을 변경하지 않겠다는 의미이다.

 

class Func1
{

private:
    int num;
public:
    void InitNum(int n)
    {
        num = n;
    }
    int GetNum()
    {
        return num;
    }
    void Show() const
    {
        cout << GetNum() << endl;  // 컴파일 에러
    }

}

 

다음과 같은 상황에서, Show() 메서드는 GetNum의 return에 의한 데이터에 대한 임의 접근 및 변경을 감지하여, 컴파일 시에 const로 정의된 Show() 메서드에서 컴파일 에러를 일으킨다.

 

 

캡슐화

캡슐화는 관련 있는 맴버 변수 및 함수를 하나의 클래스 안에 묶는 것을 캡슐화라고 한다.

캡슐화의 범위를 결정하는 것이 쉽지 않기 때문에, 캡슐화는 어려운 개념이다.

캡슐화 또한, 공통된 속성을 정의하는 데이터의 집합이기 때문에, 정보 은닉의 성격을 갖고 있다. 따라서, 맴버 변수가 보이지 않게 정보를 은닉해서 감싸는 것이 좋다. 

 

흔하게, 사용되는 원을 나타내는 클래스의 캡슐화를 다음과 같이 정의할 수 있다. 

class Point{

  private:
     int xPos, yPos;

  public:

       void Init(int x, int y)
        {
            xPos = x;
            yPos = y;
        }

        void ShowPoint() const{
            cout << "xpos :,  ypos" << endl; 

        }

 

'C++' 카테고리의 다른 글

참조자  (0) 2024.09.18
범위지정 연산자  (1) 2024.09.18
함수 오버로딩  (1) 2024.09.18
String 메서드  (0) 2024.05.24
개행 문자 입력 방식  (0) 2024.05.24