본문 바로가기

컴퓨터

3-3. 클래스 멤버의 접근 제어

클래스 안에 선언되어 있는 멤버의 접근 허용 범위를 나타내는 키워드는 public, protected, private 세 가지가 있다.

클래스의 내부 접근과 외부 접근

#include <iostream>
using std::cout;
using std::endl;

class Counter {
public:
	int val;
	void Increment(void) {
		val++; //내부 접근
	}
};

int main(void) {
	Counter cnt;
	cnt.val = 0; //외부 접근
	cnt.Increment(); //외부 접근
	cout << cnt.val << endl; //외부 접근

	return 0;
}

9: 같은 클래스 내에 존재하는 멤버에 의한 접근을 가리켜 클래스 내부 접근이라 한다. 그 이외의 모든 접근은 외부 접근에 해당이 된다.

15,16,17: 객체 cnt의 멤버에 . 연산자를 이용해서 접근하고 있다. 이러한 형태의 접근을 외부 접근이라 한다.

접근하고 있는 위치가 클래스 내부인가? 외부인가? 를 보고 내부 접근인지 외부 접근인지 판단한다.

public & private

세 가지의 접근 제어 키워드의 관계는 다음과 같다.

private ⊂ protected  public

private으로 멤버가 선언이 되면 클래스의 내부 접근만 허용하겠다는 의미가 된다. private으로 멤버가 선언이 되었음에도 불구하고 외부 접근을 시도한다면 컴파일러는 에러를 발생시킬 것이다.

public으로 멤버가 선언이 되면 클래스 외부 접근도 허용하겠다는 의미가 된다. 엄밀히 말하면 어디서든지 접근을 허용하겠다는 의미이다. 

protected는 다음 기회에 설명한다.

#include <iostream>
using std::cout;
using std::endl;

const int OPEN=1;
const int CLOSE=2;

class Door {
private:
	int state;
public:
	void Open() {
		state = OPEN;
	}
	void Close() {
		state = CLOSE;
	}
	void ShowState() {
		cout << "현재 문의 상태: ";
		cout << ((state == OPEN) ? "OPEN" : "CLOSE") << endl;
	}
};

int main(void) {
	Door d;
	//d.state=OPEN; //컴파일 오류 발생

	d.Open();
	d.ShowState();
	return 0;
}

12,15,18: 클래스의 멤버 함수를 정의하는데정의하는 데 있어서, 전달 인자가 없다는 의미의 void 선언을 생략하고 있다. 클래스의 멤버 함수를 정의하는 데 있어서 이러한 형태의 생략은 일반적이다.

'컴퓨터' 카테고리의 다른 글

4-1. 정보 은닉(Information Hiding)  (0) 2019.04.08
3-4 멤버 함수의 외부 정의  (0) 2019.04.07
3-2. 클래스와 객체  (0) 2019.04.07
2-7. new & delete  (0) 2019.04.06
2-5 레퍼런스를 이용한 성능의 향상  (0) 2019.04.06