접근지정자
private / public
- 사용자는 내부 멤버 데이터 구조에 대해 굳이 알 필요가 없다.
- 멤버 함수를 통해서만 객체 상태 변경이 가능하도록 해서 객체를 안전하게 유지한다. 이를 캡슐화라 말한다.
- setter / getter : 멤버 데이터 접근을 위해 함드는 함수를 나타내는 용어, private 멤버 데이타를 선언하고 setter/getter로 접근하는 것이 일반적
자전거의 기어는 현실 세계에서 항상 존재함. 프로그램에서 잘못된 기어 생성을 막아야 한다.
gear의 값이 마이너스 값이거나 0 인 경우는 값 셋팅이 되지 않도록 하는 조건을 만들어 넣을 수 있다.
#include <iostream>
class Bike
{
public:
void changeGear(int n)
{
if ( n < 1 ) {
std::cout << "invalid gear value" << std::endl;
return;
}
gear = n;
}
int getGear() { return gear;}
private:
int color;
int gear;
};
int main()
{
Bike b;
//b.gear = -7; // error. private 멤버!
b.changeGear( -7 );
int n = b.getGear();
}
friend
원래 private에 정의된 engineTemp에 직접 접근이 불가하다.
class Airplane
{
int color;
int speed;
int engineTemp;
public:
int getSpeed() { return speed;}
};
void fixAirplane(Airplane& a)
{
int n = a.engineTemp; // error : private 데이타에 직접 접근이 불가하다!
}
int main()
{
Airplane a;
fixAirplane(a);
}
friend 함수로 정의하면 fixAirplane에서만 private에 접근하도록 만들고 싶다.
class Airplane
{
int color;
int speed;
int engineTemp;
public:
int getSpeed() { return speed;}
friend void fixAirplane(Airplane& a); // friend 이니까 private 영역에 접근해도 허락해줘!
};
void fixAirplane(Airplane& a)
{
int n = a.engineTemp; // 해당 함수에서 이제 private 접근이 가능해짐.
}
int main()
{
Airplane a;
fixAirplane(a);
}
문제없이 컴파일이 됨을 확인할 수 있다.
'C++' 카테고리의 다른 글
[C++] Class : 멤버 초기화 리스트 (member initializer lists) (0) | 2021.08.19 |
---|---|
[C++] 생성자, 소멸자, 위임 생성자, default 생성자 (0) | 2021.08.19 |
[C++] STL : stack, vector (0) | 2021.08.17 |
[C++] 객체 지향 프로그래밍 OOP (0) | 2021.08.16 |
[C++] 동적메모리 할당 (new, delete), nullptr (0) | 2021.08.15 |
댓글