본문 바로가기

컴퓨터

4-2. 캡슐화(Encapsulation)

캡슐화의 기본 개념

캡슐화란? 관련 있는 데이터오 함수를 하나의 단위로 묶는 것이다. 다시 이야기하면, 관련 있는 데이터와 함수를 클래스라는 하나의 캡슐 내에 모두 정의하는 것이다. 

캡슐화가 잘 되지 않은 예

#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