C++/C++ 클래스, 생성자 초기화 리스트

private, public

재윤 2023. 11. 30. 17:30
반응형

Class 안에 있는 private과 public 차이

C++에서 private와 public은 클래스 멤버들의 접근 제어를 지정하는 키워드이다. 이 두 접근 제어 지시자는 클래스 내부의 멤버 변수와 멤버 함수가 외부에서 어떻게 접근 가능한지를 결정한다.

  1. private:
    • private으로 지정된 멤버 변수나 멤버 함수는 클래스 내부에서만 접근 가능합니다. 즉, 클래스 내부의 다른 멤버 함수에서는 접근할 수 있지만 클래스 외부에서는 접근할 수 없다.
    • private으로 선언된 멤버들은 클래스의 구현 내부에 있으므로 외부에서 직접 접근하거나 수정할 수 없다. 이는 정보 은닉(information hiding)의 개념과 관련이 있어서 클래스의 내부 상세 구현을 숨기고 오직 공개된 인터페이스를 통해 상호작용하도록 하는데 사용된다.
  2. public:
    • public으로 지정된 멤버 변수나 멤버 함수는 클래스 외부에서도 자유롭게 접근할 수 있다. 클래스 객체를 생성하고, 객체의 멤버 변수나 멤버 함수를 호출할 때 사용된다.
    • public 멤버들은 클래스의 공개 인터페이스를 형성하며, 외부 코드와의 상호작용을 허용한다.

예를 들어, 아래의 코드는 private와 public을 사용한 간단한 클래스:

class MyClass {
private:
    int privateVar; // private 멤버 변수

public:
    int publicVar;  // public 멤버 변수

    void setPrivateVar(int value) {
        privateVar = value; // private 멤버 변수에 접근 가능
    }

    int getPrivateVar() {
        return privateVar; // private 멤버 변수에 접근 가능
    }
};

int main() {
    MyClass obj;
    obj.setPrivateVar(42);  // public 함수를 통해 private 멤버 변수에 접근
    obj.publicVar = 10;     // public 멤버 변수에 직접 접근

    int privateValue = obj.getPrivateVar(); // public 함수를 통해 private 멤버 변수에 접근
    return 0;
}

 

접근 못하는 예제

private으로 선언된 멤버 변수인 privateVar에 클래스 외부에서 직접 접근하는 시도는 컴파일 오류를 발생시키므로 실제로 컴파일되지 않는다.

privateVar에 접근할 수 없는 코드 예제:

class MyClass {
private:
    int privateVar; // private 멤버 변수

public:
    int publicVar;  // public 멤버 변수

    void setPrivateVar(int value) {
        privateVar = value; // private 멤버 변수에 접근 가능
    }

    int getPrivateVar() {
        return privateVar; // private 멤버 변수에 접근 가능
    }
};

int main() {
    MyClass obj;

    obj.privateVar = 10; // 컴파일 오류: private 멤버 변수에 직접 접근할 수 없음

    return 0;
}

위 코드에서 obj.privateVar = 10;라는 부분에서 컴파일 오류가 발생한다. 이 부분은 privateVar가 private으로 선언되어 클래스 외부에서 직접 접근할 수 없기 때문에 컴파일러에서 오류를 감지하고 발생시킨다.

반응형

'C++ > C++ 클래스, 생성자 초기화 리스트' 카테고리의 다른 글

생성자 초기화 리스트  (0) 2023.12.01
this  (2) 2023.11.30
생성자, 소멸자  (2) 2023.11.30
클래스  (2) 2023.11.30