본문 바로가기
프로그래밍/c++

객체지향의 3대속성 - 은닉성

by 오늘의논리 2023. 2. 22.
728x90

*은닉성(Data Hiding) = 캡슐화 (Encapsulation)

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

이유!

정말 위험하고 건드리면 안되는 경우

다른 경로로 접근하길 원하는 경우

 

 

class Car

{

public: // 접근 지정자

void MoveHandle() {}

void PushPeda() {}

void OpenDoor() {}

 

void TurnKey()

{

RunEngin();

}

 

private:

void DisassembleCar() {}

void ConnectCircuit() {}

 

protected:

void RunEngin() {}

 

public:

 

};

 

class SuperCar : public Car // 상속 접근 지정자

{

public:

void PushRemoteControler()

{

RunEngin();

}

};

 

int main()

{        

SuperCar car;

car.PushRemoteControler();

 

return 0;

}

 

 

 

같이 동작해야되는것은 한번에묶어서 밖에서 사용할 있게 하는것이 좋음

 

class Berserker

{

public:

 

int GetHP()

{

return _hp;

}

 

void SetHP(int hp)

{

_hp = hp;

if (_hp <= 50)

SetBerserkerMode();

}

 

private:

void SetBerserkerMode()

{

cout << "매우강해짐!" << endl;

}

int _hp = 100;

 

};

 

int main()

{        

Berserker b;

 

b.SetHP(20);

 

return 0;

}

 

이렇게 버서커모드와 hp 클래스 내부에서만 건드릴수 있게 하고 hp 설정하는것은 setHP 함수를 이용해서 하는 이런 논리적으로 묶어놓는부분이 좋음

 

class SuperCar : private Car

 // 상속 접근 지정자: 다음 세대한테 부모님의 유산을 어떻게 물려줄지?

//부모님한테 물려받은 유산을 꼭 나의 자손들한테도 똑같이 물려줘야 하진 않음

//public : public->public, protected->protected //그대로 상속

//protected : public->protected, protect->protect //

//private :  public->private, protect->private // 나만 쓰고 그외엔 상속  x

 

class SuperCar : car //  이렇게 선언할 경우  앞에 private 붙어있는게 생략된것임

그래서 외에도 사용하려면

 

class SuperCar : puliic car 이렇게 앞에 public 붙여줘야함

 

728x90

댓글