2015년 5월 11일 월요일

C++ 클래스의 접근 지정자

 접근 지정자(access specifier)는 클래스 외부에서 그 멤버들을 접근할 수 있는 범위를 지정하는 것이다. C++의 접근 지정자는 다음과 같이 세 가지가 있다.

  • public (접근/호출에 제한이 없음)
  • private (오직 클래스 안에서만 접근/호출 가능)
  • protected (클래스와 파생 클래스 안에서만 접근/호출 가능)

클래스 선언에서 같은 접근 범위를 가지는 멤버를 모아놓고 그 앞에 public: 또는 private: 라고 써주면 된다. 여기서는 일단 앞의 두 개에 대해서만 설명하겠다.

public 지정자


 키워드 public 은 클래스 외부에서 자유롭게 접근할 수 있음을 지정하며 변수의 경우 외부에서 읽고 쓰는 것이 허용되며 함수의 경우 외부 호출이 가능하게 된다. 다음 예를 보자
// 클래스 선언부
class Circle {
   public:
       double radius;
       double getArea();
   private:
       double pi = 3.14;
       double getCircum();
};
// 클래스 구현부
double Circle::getArea() {
   return pi*radius*radius;
}

double Circle::getCircum() {
   return 2.0*pi*radius;
}

위의 Circle 클래스에서 멤버 변수 radius는 public 으로 선언되었으므로 외부에서 자유롭게 변경이 가능하고 getArea()함수도 외부에서 호출이 가능하다.

private 지정자


 반면, private 지정자는 클래스 외부에서는 전혀 접근할 수 없고 오직 클래스 내부에서만 접근 가능함을 지정하는 것이다. 만약 접근 지정자가 생략되어 있다면 default로 이 private 이 적용이 된다. 위의 예에서 pi 라는 멤버 변수는 private 멤버이므로 외부에서 접근하여 읽거나 변경할 수 없다.

 단 멤버 함수에서는 private 멤버를 제한 없이 접근할 수 있다. 위 예에서 getArea()함수 내부에서 private 멤버인 pi를 사용할 수 있다. 또 필요하다면 이 함수 내부에서 private 멤버인 getCircum()함수도 호출할 수 있다. getCircum()함수 내부에서도 멤버들을 prviate이든 public 이든 접근하거나 호출할 수 있다.

 지정자 protected 는 클래스의 상속과 관련되어 있으므로 상속을 설명하는 데에서 자세히 설명하도록 하겠다.


댓글 없음:

댓글 쓰기