산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C++ 데이터 캡슐화: 코드 보호의 핵심 원리

모든 C++ 프로그램은 다음 두 가지 기본 요소로 구성됩니다.

캡슐화(Encapsulation)는 데이터를 조작하는 데이터와 함수들을 묶고, 둘 다 외부 간섭과 오용으로부터 안전하게 지키는 객체 지향 프로그래밍 개념입니다. 데이터 캡슐화는 중요한 OOP 개념인 데이터 은닉(data hiding)으로 이어졌습니다.

데이터 캡슐화는 데이터와 이를 사용하는 함수들을 묶는 메커니즘이고, 데이터 추상화는 인터페이스만 노출하고 구현 세부 사항을 사용자로부터 숨기는 메커니즘입니다.

C++은 사용자 정의 타입인 클래스(class) 생성을 통해 캡슐화와 데이터 은닉 특성을 지원합니다. 이미 공부했듯 클래스는 private, protected, public 멤버를 가질 수 있습니다. 기본적으로 클래스에 정의된 모든 항목은 private입니다. 예:

class Box {
public:
    double getVolume(void) {
        return length * breadth * height;
    }
private:
    double length; // 상자 길이
    double breadth; // 상자 너비
    double height; // 상자 높이
};

변수 length, breadth, height는 private입니다. 이는 Box 클래스의 다른 멤버들만 접근할 수 있고, 프로그램의 다른 어떤 부분에서도 접근할 수 없음을 의미합니다. 이것이 캡슐화가 달성되는 한 가지 방법입니다.

클래스의 일부를 public(즉, 프로그램의 다른 부분에서 접근 가능)으로 만들려면 public 키워드 뒤에 선언해야 합니다. public 지정자 뒤에 정의된 모든 변수나 함수는 프로그램의 다른 모든 함수에서 접근 가능합니다.

한 클래스를 다른 클래스의 friend로 만들면 구현 세부 사항이 노출되어 캡슐화가 감소합니다. 이상적으로는 각 클래스의 세부 사항을 가능한 한 다른 모든 클래스로부터 숨겨두는 것이 좋습니다.

데이터 캡슐화 예제

public과 private 멤버를 가진 클래스를 구현하는 모든 C++ 프로그램은 데이터 캡슐화와 데이터 추상화의 예입니다. 다음 예제를 고려해 보세요.

Live Demo
#include <iostream>
using namespace std;
class Adder {
public:
    // 생성자
    Adder(int i = 0) { total = i; }
    // 외부 세계와의 인터페이스
    void addNum(int number) { total += number; }
    // 외부 세계와의 인터페이스
    int getTotal() { return total; }
private:
    // 외부 세계로부터 숨겨진 데이터
    int total;
};
int main() {
    Adder a;
    a.addNum(10);
    a.addNum(20);
    a.addNum(30);
    cout << "Total " << a.getTotal() << endl;
    return 0;
}

위 코드를 컴파일하고 실행하면:

Total 60

위 클래스는 숫자들을 더해 합계를 반환합니다. public 멤버 addNum과 getTotal은 외부 세계와의 인터페이스이며 사용자는 이들을 알아야 클래스를 사용할 수 있습니다. private 멤버 total은 외부 세계로부터 숨겨져 있지만 클래스가 제대로 동작하는 데 필요합니다.

설계 전략

대부분은 정말 노출해야 할 필요가 없는 한 클래스 멤버를 기본적으로 private으로 만드는 법을 배웠습니다. 그것이 좋은 캡슐화입니다.

이는 데이터 멤버에 가장 빈번하게 적용되지만, 가상 함수를 포함한 모든 멤버에 동일하게 적용됩니다.

C 언어

  1. C++ 데이터 타입 이해하기: 기초, 수정자, 모범 사례
  2. C++ 연산자 마스터하기: 유형별 완벽 가이드와 실전 예제
  3. C++ 클래스와 객체: 객체지향 프로그래밍 실전 가이드
  4. C++ 클래스 템플릿 마스터: 실전 가이드
  5. Java 캡슐화 마스터: 데이터 은닉 실전 가이드
  6. C++ char 타입 마스터: 선언, ASCII 코드, 문자열 변환 기법
  7. 자바 캡슐화: 안전한 데이터 은닉과 제어
  8. 자바 자료구조: 핵심 클래스와 컬렉션 프레임워크 탐구
  9. C++ 저장 클래스 완벽 가이드: 범위, 수명, 용법
  10. C++ 데이터 구조: 배열, 구조체, 포인터로 효율적인 프로그램 만들기