일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 맥북 호스트 설정
- ubuntu
- 굿노트 다이어리 공유
- 애플워치 스타라이트
- 먼슬리 속지
- 2022 굿노트 다이어리
- 굿노트 속지
- 청년주택 신청방법
- GIT
- 역세권 청년주택 신청기준
- 굿노트 템플릿
- 굿노트 먼슬리
- 굿노트
- 인계동 파스타
- 굿노트 속지 공유
- mac os hosts
- 애플워치 스포츠루프
- 아이패드 굿노트
- hosts 설정
- 애플워치7 스타라이트
- 강릉 새벽기차
- 애플워치 줄질
- c++
- VMware
- 먼슬리
- 굿노트 위클리
- 굿노트 다이어리
- 강릉 당일치기 코스
- 아이패드
- 남영역 청년주택
- Today
- Total
하루하루
[C++] 접근 제어자 본문
접근 제어자는 클래스 내의 변수나 함수에 대한 접근 범위를 설정한다.
접근 제어자를 사용하는 이유는 객체지향 프로그래밍의 개념 중 하나인 데이터 은닉 때문이다.
사용자가 자판기에서 음료를 뽑을 때 버튼을 누르면 음료가 나온다. 하지만 어떤 원리로 음료가 나오는지 모르고, 알 필요도 없다. 이런 식으로 내부에 구현된 방식이 데이터 은닉이다.
클래스 멤버가 외부 함수에서 직접 접근하지 못하도록 제한을 설정하는 것이다.
- public
public으로 선언된 데이터 멤버 및 멤버 함수는 다른 클래스에서도 접근이 가능하다.
public 멤버는 . 연사자를 사용해 프로그램 어디서든 액세스 할 수 있다.
class Car
{
public:
int model;
void showModel();
};
void Car::showModel()
{
std::cout << "Model : " << model << std::endl;
}
int main()
{
Car bmw;
bmw.model = 520;
bmw.showModel();
return 0;
}
* 실행 결과
Model : 520
- private
멤버를 private로 선언하면 해당 멤버는 클래스 내부에서만 접근할 수 있다.
클래스 내부의 멤버 함수 또는 friend 함수만 클래스의 private 멤버에 접근할 수 있다.
class Car
{
private:
int model;
public:
void showModel();
};
int main()
{
Car bmw;
bmw.model = 520; // 오류 발생
return 0;
}
Car의 멤버 변수를 private로 변경하게 되면 클래스 외부에서 직접 접근할 때 오류가 발생하게 된다.
'model' is a private member of 'Car' 라는 오류가 발생한다.
다음과 같이 수정 가능하다.
#include <iostream>
class Car
{
private:
int model;
public:
void setModel(int model);
void showModel();
};
void Car::setModel(int m)
{
model = m;
}
int main()
{
Car bmw;
bmw.setModel(520);
bmw.showModel();
return 0;
}
이제 setModel이라는 메소드를 통해야만 Model을 설정할 수 있다. 그렇다면 설정된 model값을 출력하는 것이 아닌 가져오는 방법을 알아보자.
#include <iostream>
class Car
{
private:
int model;
public:
void setModel(int model);
int getModel();
};
void Car::setModel(int m)
{
model = m;
}
int Car::getModel()
{
return model;
}
int main()
{
Car bmw;
bmw.setModel(520);
std::cout << "Model :" << bmw.getModel() << std::endl;
return 0;
}
이것이 car에 대한 getter와 setter를 만드는 방법이다.
어디서든 접근 가능한 public 대신에 private를 사용하는 이유는 정보 은닉을 하기 위해서다.
- protected
...
'IT > c++' 카테고리의 다른 글
[CMake] Ubuntu에 CMake 설치 및 업데이트 (0) | 2020.01.17 |
---|---|
[VS code] 우분투 16.04 LTS 에서 VScode 설치하기 (2) | 2020.01.06 |
[C++] 상속(Inheritance) (0) | 2019.10.16 |
[C++] 클래스와 객체 (0) | 2019.10.07 |
[C++] 객체 지향 프로그래밍 (OOP, Object-Oriented Programmig) (0) | 2019.10.07 |