본문 바로가기

강의자료/C/C++

039. 클래스에서 비공개 정보를 다루자.


◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


지금까지의 예제에서 클래스를 만들 때 우리는 이유도 모르고 public 이라는 키워드를 사용했었다.
public은 '공공의'라는 뜻으로 클래스로 만들어진 객체의 정보를 누구나 사용할 수 있도록 하기 위함이었다.
그렇다면 객체의 정보를 비공개로 하기 위해서는 어떻게 해야할까??
public대신 private을 사용하면 된다.
예제를 통해 public과 private의 차리를 살펴보자.
// private과 public의 차이를 안다.
// 클래스의 크기(메모리)를 이해한다.

#include 
using namespace std;

class Point  
{
private:
	int x;
	int y;

public:
	Point(int _x, int _y);
	~Point();
  
	void position();
	void move(int _x, int _y);
};

Point::Point(int _x, int _y)
{ 
	x=_x;  
	y=_y;
}

Point::~Point()
{
	cout << "Point die~~." << endl;                
}

void Point::position()
{
	cout << "(" << x << " , " << y << ")" << endl;     
} 

void Point::move(int _x, int _y)
{
	x+=_x;  //_x만큼 이동  
	y+=_y;  //_y만큼 이동     
}

int main()
{
	Point p1(3, 5);  //스택에 객체 생성 
	Point* p3=&p1;   //얕은 복사
	
	// p1의 x, y 변수는 private이므로 그 값을 직접적으로 읽어오거나 변경할수가 없다.
	// 그 값을 읽어오거나 변경할 수 있는 기능을 가진 public 함수를 사용해야만 한다.
	p1.position();
	p1.move(5,-4);  //(3, 5)를(5, -4)만큼 이동 
	p1.position();

	p3->move(4, 7);  //p3으로 변경 ->p1 멤버 변경  
	p3->position();
	p1.position();     
	
	int sizeOfPoint=sizeof(Point);

	cout << "Point의 크기 " << sizeOfPoint << " byte" << endl; 
	cout << "p1의 주소 " << &p1 << endl;
	cout << "p3의 주소 " << &p3 << ", p3의 값(참조주소) " << p3 << endl;

	return 0;
}