기술나눔

[C]패키지

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. 포장의 정의

캡슐화는 객체지향 프로그래밍(OOP)의 세 가지 기본 기능(캡슐화, 상속, 다형성) 중 하나입니다. 이러한 데이터를 독립적인 단위(클래스)로 조작하기 위한 데이터(속성)와 메소드(함수)를 결합하여 객체의 내부 세부 사항을 최대한 숨기고 인터페이스만 외부 세계에 노출시키는 것을 말합니다. 이것의 목적은 객체의 데이터를 보호하고, 외부 코드가 객체의 내부 데이터 구조에 직접 접근하는 것을 방지하고, 오류를 줄이고, 복잡성을 단순화하는 것입니다.

2. 포장의 목적

  1. 데이터 숨기기: 객체의 데이터를 외부로부터 직접 접근하지 못하도록 보호하고, 데이터가 불법적으로 변조되는 것을 방지합니다.
  2. 명확한 인터페이스: 제한된 인터페이스(메서드)를 노출함으로써 외부 코드는 이러한 인터페이스를 통해서만 객체와 상호 작용할 수 있으므로 객체의 동작이 명확해집니다.
  3. 모듈식: 관련 데이터와 작업을 함께 캡슐화하여 코드의 모듈성과 재사용성을 향상시킵니다.

3. C++에서 캡슐화를 구현하는 방법

  1. 클래스 사용 : 클래스를 정의할 때 데이터 멤버(속성)를 private 또는 protected로 설정하고, 이러한 데이터를 조작하는 방법을 public으로 설정합니다. 이러한 방식으로 외부 코드는 클래스의 전용 멤버에 직접 액세스할 수 없고 공용 메서드를 통해서만 간접적으로 액세스할 수 있습니다.

  2. 접근 수정자

    • public: 모든 외부 코드에서 액세스 가능합니다.
    • protected: 클래스 자체와 파생 클래스(서브클래스)에서만 액세스할 수 있습니다.
    • private: 파생 클래스가 아닌 클래스 자체 내에서만 액세스할 수 있습니다.
  3. 생성자와 소멸자 : 생성자를 통해 객체를 초기화하고 소멸자를 통해 객체가 차지하는 리소스를 정리합니다. 객체의 수명주기를 제어하기 때문에 캡슐화의 일부이기도 합니다.

4. 예시

다음은 다음을 보여주는 간단한 C++ 래퍼 예제입니다.Rectangle(직사각형) 클래스의 구현입니다.

  1. #include <iostream>
  2. class Rectangle {
  3. private:
  4. double width; // 矩形的宽
  5. double height; // 矩形的高
  6. public:
  7. // 构造函数
  8. Rectangle(double w, double h) : width(w), height(h) {}
  9. // 设置宽度
  10. void setWidth(double w) {
  11. width = w;
  12. }
  13. // 获取宽度
  14. double getWidth() const {
  15. return width;
  16. }
  17. // 设置高度
  18. void setHeight(double h) {
  19. height = h;
  20. }
  21. // 获取高度
  22. double getHeight() const {
  23. return height;
  24. }
  25. // 计算面积
  26. double getArea() const {
  27. return width * height;
  28. }
  29. };
  30. int main() {
  31. Rectangle rect(5.0, 10.0);
  32. std::cout << "Rectangle area: " << rect.getArea() << std::endl;
  33. rect.setWidth(7.0);
  34. std::cout << "New Rectangle area: " << rect.getArea() << std::endl;
  35. return 0;
  36. }

이 예에서는Rectangle일반적인width그리고height 속성은 비공개로 설정되어 외부 코드에서 직접 액세스할 수 없습니다.대신에 우리는 다음과 같은 공개 메소드를 사용합니다.setWidthgetHeight그리고getArea ) 이러한 개인 속성에 액세스하고 수정합니다. 이 방법은 데이터 캡슐화를 구현하고 외부 사용을 위한 명확한 인터페이스를 제공합니다.