Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
05-16 20:20
관리 메뉴

nomad-programmer

[Programming/C++] 접근 제어 키워드 (public, protected, private) 본문

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로 해두는 것이 좋다.

 

Comments