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 |