5-3. 은닉성

Crat3 ㅣ 2023. 5. 26. 16:23

1. 은닉성(Data Hiding), 캡슐화(Encapsulation)

몰라도 되는 것은 깔끔하게 숨기기

 

1) 필요성

- 위험해서 건드리면 안되는 경우

- 다른 경로로 접근하기 바라는 경우

 

ex) 자동차

// 자동차
// 핸들, 페달, 엔진, 문, 전기선 등

// 일반 구매자 입장에서는?
// 핸들, 페달, 문
// 몰라도 되는 부분은? 건드리면 큰일나는 부분은?
// 엔진, 전기선

class Car
{
public:
    void MoveHandle() {}
    void PushPedal() {}
    void OpenDoor() {}

    void TurnKey()
    {
        RunEngine();
    }

private:
    void DisassembleCar() {}
    void RunEngine() {}
    void ConnectCircuit() {}


public:
// 핸들, 페달, 엔진, 문, 전기선
};

 

2. 접근 지정자(접근 제한자)

(1) public

- 누구한테나 공개하여 어디에서든 사용 가능

 

(2) protected

- 자식에서만 사용 가능

 

(3) private

- 해당 클래스 내부에서만 사용 가능

 

protected와 private을 이용하여 위험한 멤버 함수에 접근하는 것을 방지할 수 있다.

 

3. 캡슐화

연관된 데이터와 함수를 논리적으로 묶어놓은 것

 

ex) 체력이 50이하일 때 버서커 모드가 발동하는 버서커 클래스

class Berserker
{
public:
    int GetHP() {return _hp;}

    void SetHP(int hp)
    {
        _hp = hp;
        if (_hp <= 50)
            SetBerserkerMode();
    }

private:
    void SetBerserkerMode()
    {
        cout << "매우 강해짐!!" << endl;
    }

private:
    int _hp = 100;

};

버서커의 체력이 50이하일 때만 발생해야 하므로(누군가 임의로 발동시키거나 체력이 50이하가 아닐때 발동하는 것을 방지하기 위해)

체력을 얻거나 세팅하는 함수를 따로 묶어서 만들어주고 버서커 모드는 private로 생성해서 내부에서만 쓸 수 있게 한다.

 

4. 상속 접근 지정자

자식에게 부모의 유산을 어떻게 물려줄 것인가?

class Berserker : public Player

(1) public (주로 사용함)

- 부모의 유산을 설계 그대로 받음(부모가 받은 형식 그대로 넘김, 부모 public -> 자식 public)

 

(2) protected

- 외부에 노출시키지 않고 자식에게만 넘김(부모 public -> 자식 protected)

 

(3) private

- 부모의 1차 자식에게만 상속하고 이후의 자식들에게는 상속하지 않음(부모 public -> 자식 private)

=> 해당 타입을 사용하면 자식의 자식은 1차 자식의 상속을 받을 수 없음

 

주의!! 상속 접근 지정자를 생략하면 자동으로 private으로 인식하게 됨!!!

'기초 C++ 스터디 > 객체지향' 카테고리의 다른 글

5-7. 객체지향 정리  (0) 2023.05.30
5-6. 연산자 오버로딩  (0) 2023.05.30
5-5. 초기화 리스트  (0) 2023.05.26
5-4. 다형성  (0) 2023.05.26
5-2. 상속성  (0) 2023.05.26