C++ 접근 제어자(Access Modifier)

프로그래밍/C++ 2019.10.14 댓글 Plorence

접근 제어자(Access Modifier)

접근 제어자 또는 접근 지정자라고 부르는 사람도 있습니다.
접근 제어자에는 총 3개의 키워드가 있습니다.
  • private
  • public
  • protected
protected는 상속과 관련되어 있으므로 상속을 공부할 때 배우면 됩니다.
 

private 접근 제어자

먼저 private는 클래스 내부에서만 직접적인 접근이 가능합니다.
만약에 변수의 접근 제어자를 private로 설정해놨다면 그 변수는 클래스 내부에서만 접근 가능하고 객체에서는 직접적인 접근이 불가능합니다.
#include <iostream>
class Person {
private:
       int age = 10;
       char name[100];
public:
       int GetAge() {
              return age; //가능
       }
};
int main(void) {
       Person per1;
       printf("%d", per1.age); //불가능, 컴파일 에러 발생
}
 

public 접근 제어자

public 접근 제어자는 클래스 내부에서도 접근이 가능하고 객체에서도 접근이 가능합니다.
class Person {
private:
       char name[100];
public:
       int age = 10;
};
int main(void) {
       Person per1;
       printf("%d", per1.age); //가능
}
즉 private과 public의 차이는 객체에서 접근이 가능한가 불가능한가의 차이입니다.
 
만약 접근 제어자를 따로 명시하지 않는다면, 디폴트 접근 제어자는 private가 됩니다.
구조체는 이와 반대로 public입니다.
 

데이터 은닉에 대해

OOP에서의 접근 제어는 OOP 기능중의 하나인 데이터 은닉(Data hiding)과 관련이 있습니다.
데이터 은닉은 프로그램이 데이터에 직접적인 접근하지 못하게 차단하는것을 말합니다.
사용자가 굳이 알 필요가 없는 불필요한 정보는 숨김으로써 사용자는 최소한의 정보만으로 프로그램을 쉽게 사용할 수 있어야 합니다.
결국 데이터의 무결성을 지켜줍니다.
데이터 은닉은 접근 제어자를 사용합니다.
 

데이터 은닉 해보기

위 클래스에서 멤버 변수 age는 private로 하면서 객체에서 접근이 불가능하게 만들었습니다.
그다음 접근 제어자가 public인 멤버 함수를 만들어 해당 변수의 값을 반환하는 멤버 함수를 정의합니다.
class Person {
private:
       int age = 10;
       char name[100];
public:
       int age = 10;
       int GetAge() {
              return age;
       }
};
int main(void) {
       Person per1;
       printf("%d", per1.GetAge());
}
 

댓글