fullstack

[C++] 정보은닉 (Information Hiding)

Language/C++

C++ 객체지향에서 클래스는 정보은닉이라는 특성을 가져야 한다.

우선 정보은닉이 되지 않은 클래스를 보겠다.


1
2
3
4
5
class AAA
{
public:
    int num; // 0~100
};



위 클래스는 num 이라는 멤버변수를 가지고 있다. 하지만 외부에서 객체를 만들어 이 멤버변수에 값을 넣을 때 직접 접근 하므로 원치 않는 값이 들어올 수 있고 에러도 나지 않는다. 실제로 이런 경우가 발생하면 오류를 찾는데에 매우 많은 시간을 소요하게 된다.


다음은 정보은닉이 적용된 클래스이다.


1
2
3
4
5
6
7
class AAA
{
    int num; // 0~100
public:
    void setNum(int n) { num = n; }
    int getNum() { return num; }
};



멤버변수에 직접 접근하는 것을 막고 setNum과 getNum 함수를 통해서 멤버변수를 조작하도록 하였다.

여전히 원치않는 값이 들어갈 수 있고 별로 달라진게 없다고 생각할 수 있지만 다음과 같이 오류검출을 추가할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class AAA
{
    int num; // 0~100
public:
    void setNum(int n);
    int getNum() { return num; }
}
void AAA::setNum(int n)
{
    if(n<|| n>100)
    {
        cout << "error" << endl;
        return;
    }
    num = n;
};



위와같이 작성하면 멤버변수에 영향을 주지 않고 사전에 오류검출을 할 수 있는 것을 볼 수 있다.


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

[C++] 생성자(Constructor)와 소멸자(Destructor)  (0) 2015.11.30
[C++] 캡슐화 (EnCapsulation)  (0) 2015.11.30
[C++] 동적할당. new와 delete  (0) 2015.11.30
[C++] Reference  (0) 2015.11.29
[C++] namespace  (0) 2015.11.28