C++에서의 클래스와 캡슐화 개념

클래스와 캡슐화는 객체 지향 프로그래밍의 핵심 개념입니다. 클래스는 데이터와 기능을 하나의 단위로 묶은 구조로, 사용자는 외부 인터페이스만을 통해 상호작용합니다. 내부 구현은 은닉되어 있어야 하며, 이는 캡슐화의 핵심 원칙입니다.

#include <iostream>
using namespace std;

struct Base {
    protected:
        int secret;
    public:
        virtual void show() = 0;
};

struct Student : Base {
    private:
        string name;
        int age;
    public:
        Student(string n, int a) : name(n), age(a) {}
        void show() override {
            cout << "이름: " << name << ", 나이: " << age << endl;
        }
};

struct Employee : Base {
    private:
        string position;
        int salary;
    public:
        Employee(string p, int s) : position(p), salary(s) {}
        void show() override {
            cout << "직책: " << position << ", 연봉: " << salary << "만원" << endl;
        }
};

int main() {
    Student s("홍길동", 22);
    Employee e("소프트웨어 엔지니어", 5000);
    
    s.show();
    e.show();
    
    // s.name = "김철수"; // 컴파일 오류: 프라이버트 멤버 접근 불가
    return 0;
}

View Code

이 예제에서 Student와 Employee 클래스는 각각 고유한 멤버 변수를 가집니다. name과 age은 Student 클래스 내부에서만 접근 가능하며, position과 salary는 Employee 클래스에서만 사용할 수 있습니다. Base 클래스는 protected 멤버를 통해 파생 클래스 간 공유를 가능하게 합니다.

C++에서 struct는 기본적으로 public 접근 권한을 가지며, explicit한 접근 제어자 설정이 필요합니다. 아래 예제는 접근 범위의 차이를 보여줍니다.

#include <iostream>
using namespace std;

struct DataContainer {
    private:
        int confidential;
    public:
        int publicData;
        
        DataContainer(int c) : confidential(c), publicData(0) {}
        
        int getConfidential() {
            return confidential;
        }
};

int main() {
    DataContainer dc(42);
    
    dc.publicData = 100;
    cout << "공개 데이터: " << dc.publicData << endl;
    
    // cout << dc.confidential << endl; // 컴파일 오류: 프라이버트 멤버 접근 불가
    cout << "기밀 데이터: " << dc.getConfidential() << endl;
    
    return 0;
}

View Code

이 프로그램은 클래스 내부에서만 접근 가능한 confidential 변수와 외부에서 접근 가능한 publicData 변수를 비교합니다. getConfidential() 메서드를 통해 프라이버트 멤버에 간접적으로 접근할 수 있음을 보여줍니다.

클래스의 멤버 범위는 클래스 정의 영역에 국한되며, 외부 접근 시 접근 제어자가 필수적입니다. C++에서는 struct와 class 키워드의 차이점이 없으며, 접근 제어자를 명시하지 않으면 모든 멤버가 public으로 간주됩니다.

태그: C++ 캡슐화 접근 제어자 클래스 설계 구조체

8월 24일 07:09에 게시됨