Programming/C++
[Programming/C++] 접근 제어 키워드 (public, protected, private)
scii
2023. 1. 20. 01:33
접근 제어 키워드
- public: 모든 곳으로부터의 접근 허용
- protected: 자식 클래스의 멤버 함수로부터의 접근만 허용
- private: 자신의 멤버 함수 외에는 접근 불가
다음 예제를 보며 이 키워드가 의미하는 바를 구체적으로 확인해보자.
#include <iostream>
using namespace std;
class Parent{
private:
int priv;
protected:
int prot;
public:
int publ;
};
class Child : public Parent {
void AccessParents(){
int n;
// 부모의 멤버에 접근 시도
n = prev; // 실패
n = prot; // 성공
n = publ; // 성공
}
};
int main(int argc, const char * argv[]) {
Parent pa;
// 객체의 멤버에 접근 시도
int n;
n = pa.priv; // 실패
n = pa.prot; // 실패
n = pa.publ; // 성공
return 0;
}
각 상황별로 정리해보면 이렇다.
자신의 멤버 함수에서 접근 | 자식 클래스의 멤버 함수에서 접근 | 외부에서 접근 | |
private 멤버 | O | X | X |
protected 멤버 | O | O | X |
public 멤버 | O | O | O |
그러면 이렇게 다양한 옵션을 어떻게 활용해야 할지 생각해보자. 그런데, 가이드라인은 간단하다.
- 외부로부터 숨겨야 하는 멤버는 protected로 지정한다.
- 그 밖의 경우는 public으로 지정한다.
- 반드시 자식 클래스에 숨기고 싶다면 private으로 지정한다.
자식 클래스에게까지 멤버를 숨겨야 하는 경우는 그렇게 흔치 않다. 그렇기 때문에 외부에 숨기려는 목적이라면 protected로 해두는 것이 좋다.