캡슐화의 기본 개념
캡슐화란? 관련 있는 데이터오 함수를 하나의 단위로 묶는 것이다. 다시 이야기하면, 관련 있는 데이터와 함수를 클래스라는 하나의 캡슐 내에 모두 정의하는 것이다.
캡슐화가 잘 되지 않은 예
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
class Point {
int x; //x 좌표의 범위: 0~100
int y; //y 좌표의 범위: 0~100
public:
int GetX() { return x; }
int GetY() { return y; }
void SetX(int _x);
void SetY(int _y);
};
void Point::SetX(int _x) {
if (_x < 0 || _x>100) { //경계 검사
cout << "x 좌표 입력 오류, 확인 요망" << endl;
return;
}
x = _x;
}
void Point::SetY(int _y) {
if (_y < 0 || _y>100) { //경계 검사
cout << "y 좌표 입력 오류, 확인 요망" << endl;
return;
}
y = _y;
}
class PointShow {
public:
void ShowData(Point p) { //void ShowData(Point & p)
cout << "x좌표: " << p.GetX() << endl;
cout << "y좌표: " << p.GetY() << endl;
}
};
int main(void) {
int x, y;
cout << "좌표 입력: ";
cin >> x >> y;
Point p;
p.SetX(x);
p.SetY(y);
PointShow show;
show.ShowData(p);
return 0;
}
캡슐화가 잘 된 예
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
class Point {
int x; //x 좌표의 범위: 0~100
int y; //y 좌표의 범위: 0~100
public:
int GetX() { return x; }
int GetY() { return y; }
void SetX(int _x);
void SetY(int _y);
void ShowData(); //캡슐화를 위해 추가된 함수
};
void Point::SetX(int _x) {
if (_x < 0 || _x>100) { //경계 검사
cout << "x 좌표 입력 오류, 확인 요망" << endl;
return;
}
x = _x;
}
void Point::SetY(int _y) {
if (_y < 0 || _y>100) { //경계 검사
cout << "y 좌표 입력 오류, 확인 요망" << endl;
return;
}
y = _y;
}
void Point::ShowData() {
cout << "x 좌표: " << x << endl;
cout << "y 좌표: " << y << endl;
}
int main(void) {
int x, y;
cout << "좌표 입력: ";
cin >> x >> y;
Point p;
p.SetX(x);
p.SetY(y);
p.ShowData();
return 0;
}
'컴퓨터' 카테고리의 다른 글
4-6. friend 선언 (0) | 2019.04.11 |
---|---|
4-4 클래스와 배열 (0) | 2019.04.10 |
4-1. 정보 은닉(Information Hiding) (0) | 2019.04.08 |
3-4 멤버 함수의 외부 정의 (0) | 2019.04.07 |
3-3. 클래스 멤버의 접근 제어 (0) | 2019.04.07 |