Language/C++

[C++] 캡슐화 (EnCapsulation)

bugwasd 2015. 11. 30. 19:20

C++ 객체지향에서 클래스는 캡슐화 하여야 한다.

캡슐화는 관련 있는 데이터와 함수를 하나의 단위로 묶는 것을 말한다.


다음은 캡슐화가 되어 있지 않은 경우이다.


1
2
3
4
5
6
7
8
9
10
11
12
class Point
{
public:
    int x;
    int y;
};
 
class DrawPoint
{
public:
    void draw(Point p) { cout << "draw " << p.x << ", " << p.y << endl; }
};



위 예제는 Point에 대한 데이터와 함수가 두 개의 클래스로 나뉘어져 있다. 

다음과 같이 관련있는 데이터와 함수를 묶어 캡슐화 해야 한다.


1
2
3
4
5
6
7
8
class Point
{
public:
    int x;
    int y;
 
    void draw() { cout << "draw " << x << ", " << y << endl; }
};



캡슐화에 대한 기본 개념은 어렵지 않다. 예제 또한 간단하여 쉽다고 생각할 수 있으나 실무에서는 어디까지를 관련있는 데이터나 함수로 볼 것인지에 대한 결정을 하기 매우 어렵기 때문에 많은 경험과 노하우를 필요로 한다.