Chapter 164. 은닉화 이해하기

b4failrise ㅣ 2018. 2. 22. 17:44

 

first knowledge:

 

1. class 구조와 개념

2. friend keyword

3. operator overloading

4. pass by value, pass by reference

 

 

여기서 설명할 은닉화의 개념은 앞에 Exercise에서도 충분히 본 개념들이다. 바로 class의 private: 부분에 들어가는 member field 을 채우는 것을 information hiding, 작은의미로 Encapsulation(은닉화)라고 한다.

 

클래스부터 차근차근 설명해보겠다. 클래스는 중요 data인 member field를 모아서 그룹으로 묶는 역할을 한다. 구조체도 grouping 역할을 한다. member field를 모아 외부에 노출되지 않도록 정보를 하는데, 이를 "information hiding"라고 한다.

 

member field를 private으로, member function을 public으로 선언하면 member field는 숨기고 member function만을 이용하여 member field를 변경할 수 있다. 이것을 information hiding라 하고 작은 의미의 Encapsulation으로 이해하자. 

encapsulation and data hiding

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Car {
private:
    double v;
public:
    Car(int _v = 0) :v(_v) {}    //default constructor
    ~Car()                    //destructor
    {
        cout << "Car disappear!" << endl;
    }
    //member functions
    void speedUp(double _v = 10)
    {
        v += _v;
    }
    void speedDown(double _v = 10)
    {
        v -= _v;
    }
    friend ostream& operator<<(ostream& ostr, const Car& c);    //operator << overloading
};
 
ostream& operator<<(ostream& ostr, const Car& c)
{
    if (c.v == 0)
        ostr << "이 자동차는 현재 정지해 있습니다." << endl;
    else
        ostr << "이 자동차는 현재 " << c.v << " km/h로 달리고 있습니다." << endl;
    return ostr;
}
cs

 

 

*CODE DESCRIPTION:

line3: private member field 선언

line17: normal 함수를 friend로 선언하여 member field에 접근 가능하게 함 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    Car car1;
    cout << car1;    // operator << overloading
    car1.speedUp();    //automatically assign 10
    car1.speedUp(25);
    cout << car1;
    car1.speedDown(25);
    cout << car1;
    car1.speedDown(10);
    cout << car1;
}
cs

 

 *CODE DESCRIPTION:

line3. class object을 static으로 선언

line4. class object 를 cout object가 받을 수 있도록 operator << overloading을 했기 때문에 가능한 문장이다.

line5. default constructor를 정의했기 때문에 아무 argument가 없어도 자동으로 0으로 셋팅

 

 

 

 

 

/*****************************************************************************************

Full Source Code:

 

 

조언과 틀린 부분에 대해선 언제든지 지적부탁드리며, 보충설명이 필요한 부분에 대해 댓글을

남기시면 업데이트하거나 댓글 달아드리겠습니다.

 

매 포스팅과 source code는 추가적으로 업데이트 될 수 있습니다.

*****************************************************************************************/