클래스를 선언할 때,
내부에서 public: 키워드를 작성하지 않으면 컴파일 에러가 뜨는 경험이 있을 겁니다.
이것은 클래스에서 매우 중요한 접근 제한자(Access Modifier) 라는 개념에 해당합니다.
C++ 접근 제한자에는 기본적으로 3가지의 접근 제한자가 존재합니다.
각각 public, private, protcted 입니다.
public 접근 제한자는 코드 내의 모든 곳에서 접근이 가능합니다.
private 접근 제한자는 다른 클래스 멤버들이나 friend들에게만 접근이 가능합니다.
protected 접근 제한자는 상속(inheritance)와 함께 사용되는 접근 제한자입니다.
syntax는 다음과 같습니다.
class Class_Name{
public:
// private:
// protected:
// declaration(s);
};
접근 제한자 이후에 코드들은 해당 접근 제한의 영향을 받습니다.
위의 예시에서는 public으로 선언했으니 코드 내의 모든 곳에서 접근할 수 있곘죠?
한 클래스 내에서 여러가지의 접근 제한자를 사용할 수 있습니다.
이 형태는 매우 중요하고 자주 사용되는 개념입니다.
class Player
{
private:
std::string name;
int health;
int xp;
public:
void talk(std::string text_to_say);
bool is_dead();
};
private로 선언된 name, health, xp는 다른 멤버들을 통해서나 friend들로만 접근이 가능합니다.
public으로 선언된 두가지 메소드들은 코드 내부 어디에서나 접근이 가능합니다.
이 클래스에 대해서, private로 선언된 속성에 접근하려고 하면 compile error가 발생합니다.
그에 반해, talk 와 is_dead 메소드에 접근하려고 하면 오류가 발생하지 않습니다.
Player ricky;
ricky.name = "Ricky"; // 🚫 compile error
ricky.health = 1000; // 🚫 compile error
ricky.talk("I badly want to have a nap right now.."); // ✅ OK
'C++ > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
[C++] Move Constructor | 이동 생성자 (1) | 2024.01.02 |
---|---|
[C++] Shallow Copying & Deep Copying | 얕은 복사 & 깊은 복사 (1) | 2023.12.29 |
[C++] 함수 혹은 메소드에서 객체의 불필요한 복사를 방지하기 (0) | 2023.12.29 |
[C++] 생성자 초기화 리스트 (Constructor Initialization List), 생성자 오버로딩 (0) | 2023.12.28 |
[C++] 헤더가드 (header guards) | #pragma once, #ifndef (2) | 2023.12.28 |