캡슐화

Programming/C++ 2012. 5. 12. 02:11 |
캡슐화
:하나의 목적 하에 둘 이상의 기능이 모여서 하나의 목적을 달성.

캡슐화에는 정보은닉이 기본적으로 포함된다.

캡슐화는 감싸는 개념이다. 그런데 감싸려면 안전하게 감싸야 한다. 다시 말해서 이왕이면 멤버변수가 보이지 않게 정보를 은닉해서 감싸는 것이 좋다. 그래서 캡슐화는 기본적으로 정보은닉을 포함하는 개념이라고 이야기한다.

※ 캡슐화는 어려운 개념이다. 왜냐하면 캡슐화의 범위를 결정하는 일이 쉽지 않기 때문이다.

#include <iostream>


using namespace std;


class Point 

{

    private:

        int xpos, ypos;


    public:

        void Init(int x, int y)

        {

            xpos = x;

            ypos = y;

        }

        

        void ShowPointInfo(void) const

        {

            cout<<"["<<xpos<<", "<<ypos<<"]"<<endl;

        }

};


class Circle 

{

    private:

        int rad;

        Point p;


    public:

        void Init(int x, int y, int r)

        {

            rad = r;

            p.Init(x, y);

        }


        void Show(void) const

        {

            cout<<"radius: "<<rad<<endl;

            p.ShowPointInfo();

        }

};


class Ring

{

    private:

        Circle c1;

        Circle c2;


    public:

        void Init(int x1, int y1, int r1, int x2, int y2, int r2)

        {

            c1.Init(x1, y1, r1);

            c2.Init(x2, y2, r2);

        }


        void ShowRingInfo(void) const

        {

            cout<<"Inner Circle Info..."<<endl;

            c1.Show();

            cout<<"Outter Circle Info..."<<endl;

            c2.Show();

        }

};


int main(void)

{

    Ring ring;

    ring.Init(1, 1, 4, 2, 2, 9);

    ring.ShowRingInfo();

    return 0;

}


이 코드에서 주목할 점.


Ring 클래스, Circle 클래스, Point 클래스 모두 자신의 정보를 출력하기 위한 함수를 멤버에 포함시켜서 캡슐화를 완성하였다.

'Programming > C++' 카테고리의 다른 글

이니셜라이저(Initializer)  (0) 2012.05.19
생성자(Constructor)  (0) 2012.05.12
const 함수  (2) 2012.05.08
정보은닉(Information Hiding)  (0) 2012.05.03
Message Passing  (0) 2012.05.02
Posted by scii
: