객체지향 (OOP Object Oriented Programming)
은닉성(Data Hiding) = 캡슐화(Encapsulation)
몰라도 되는 것은 깔끔하게 숨기겠다!
숨기는 이유?
1) 정말 위험하고 건드리면 안되는 경우
2) 다른 경로로 접근하길 원하는 경우
일반 구매자 입장에서 사용하는 것?
핸들/패달/문
몰라도 되는 것 (오히려 건드리면 큰일남)
엔진, 각종 전기선
class Car
{
public:
void MoveHandle() {}
void pushPedal() {}
void OpenDoor() {}
void TurnKey()
{
// ...
RunEngine();
}
private:
void DisassembleCar() {} // 차를 분해한다
void RunEngine() {} // 엔진을 구동시킨다
void ConnectCircuit() {} // 전기선 연결
};
int main()
{
Car car;
// WOW~ 너무 신기해
car.DisassembleCar();
car.RunEngine();
return 0;
}
(멤버) 접근 지정자
public (공개적?) protected (보호받는?) private (개인의?)
class SuperCar : public Car // 상속 접근 지정자
{
public:
void PushRemoveController()
{
RunEngine(); // protected 지정 시 빌드 성공
}
};
다른 경로로 접근하길 원하는 경우
// 캡슐화
// 연관된 데이터와 함수를 논리적으로 묶어놓은 것
class Berserker
{
public:
int GetHp() { return _hp; }
// 사양 : 체력이 50 이하로 떨어지면 버서커 모드 발동
void SetHp(int hp)
{
_hp = hp;
if (_hp < 50)
SetBerserkerMode();
}
private:
void SetBerserkerMode()
{
cout << "매우 강해짐!" << endl;
}
private:
int _hp = 100;
};
int main()
{
Berserker b;
// 컴파일 에러
b._hp = 20;
if (b._hp < 50)
b.SetBerserkerMode();
b.SetHp(20);
return 0;
}
상속 접근 지정자 : 다음 세대한테 부모님의 유산을 어떻게 물려줄지?
부모님한테 물려받은 유산을 꼭 나의 자손들한테도 똑같이 물려줘야 하진 않음