도순씨의 코딩일지
C++:: 정보은닉(Information Hiding) 본문
정보은닉은 말 그대로 정보를 숨기는 것을 의미합니다. 이렇게 말하면 조금 와닿지 않는 감이 있습니다. 그래서 먼저 예제를 살펴보도록 하겠습니다.
⭐️ 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#include <iostream>
using namespace std;
class Point{
public:
int x; int y;
};
class Rectangle{
public:
Point upLeft;
Point lowRight;
public:
void ShowRecInfo(){
cout<<"좌 상단: "<<'['<<upLeft.x<<", ";
cout<<upLeft.y<<']'<<endl;
cout<<"우 상단: "<<'['<<lowRight.x<<", ";
cout<<lowRight.y<<']'<<endl;
}
};
int main(void){
Point pos1 = {-2, 4};
Point pos2 = {5, 9};
Rectangle rec = {pos2, pos1};
rec.ShowRecInfo();
return 0;
}
|
cs |
⭐️ 실행 결과
1
2
|
좌 상단: [5, 9]
우 상단: [-2, 4]
|
cs |
이렇게 될 경우 다음과 같은 문제가 있습니다.
💡 점의 좌표는 0이상 100이하가 되어야 하는데, 그렇지 못한 Point 객체가 있다.
💡 직사각형을 의히마는 Rectangle 객체의 좌 상단 좌표 값이 우 하단 좌표 값보다 크다.
결국, 프로그래머의 실수에 대한 대책이 하나도 준비되어 있지 않은 것입니다. 때문에 제한된 방법으로의 접근만 허용을 하여 잘못된 값이 저장되지 않도록 도와주어야 합니다. 다음의 변경된 코드를 살펴보도록 합시다.
⭐️ Point.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#ifndef __POINT_H__
#define __POINT_H__
class Point{
private:
int x;
int y;
public:
bool InitMembers(int xpos, int ypos);
int GetX() const;
int GetY() const;
bool SetX(int xpos);
boll SetY(int ypos);
};
#endif
|
cs |
멤버변수(x, y)를 private로 선언하여 임의로 변경하는 것을 막았습니다.
⭐️ Point.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
#include <iostream>
#include "Point.h"
using namespace std;
bool Point::InitMembers(int xpos, int ypos) {
if(xpos < 0 || ypos<0){
cout << "벗어난 범위의 값 전달" << endl;
return false;
}
x = xpos;
y = ypos;
return true;
}
int Point::GetX() const {
return x;
}
int Point::GetY() const {
return y;
}
bool Point::SetX(int xpos) {
if(0 > xpos || xpos > 100){
cout << "벗어난 범위의 값 전달" << endl;
return false;
}
x = xpos;
return true;
}
bool Point::SetY(int ypos) {
if(0>ypos || ypos > 100){
cout << "벗어난 범위의 값 전달"<<endl;
return false;
}
y = ypos;
return true;
}
|
cs |
멤버 변수를 private로 선언하고, 해당 변수에 접근하는 함수를 별도로 정의하여, 안전한 형태로 멤버 변수의 접근을 유도하는 것을 정보은닉이라고 합니다.
위의 예시를 보면 함수의 이름이 GetXXX, SetXXX 형태로 된 것을 확인할 수 있는데, 이들을 액세스 함수(acess function)라고 합니다. 이들은 멤버변수를 private로 선언하면서 클래스 외부에서의 멤버변수 접근을 목적으로 정의되는 함수들입니다.
또, 뒤에 const 선언이 추가되어 있는 함수들이 있습니다. 이 선언은 멤버변수에 저장된 값을 변경하지 않겠다는 선언입니다.
📜 출처
윤성우(2010). 윤성우 열혈 C++ 프로그래밍. 오렌지미디어.
'𝐏𝐑𝐎𝐆𝐑𝐀𝐌𝐌𝐈𝐍𝐆 > 𝐂++' 카테고리의 다른 글
C++ :: 생성자(Constructor)와 소멸자(Destructor) (0) | 2020.08.15 |
---|---|
C++ :: 캡슐화(Encapsulation) (0) | 2020.08.14 |
C++ :: C++에서의 파일분할 (0) | 2020.08.13 |
C++ :: 이름공간(namespace) (0) | 2020.07.22 |
C++ :: 함수 오버로딩(Function Overloading) & 매개변수의 디폴트값(Default Value) (0) | 2020.07.22 |