HOWTO · C++

C++ 게터 및 세터

C++의 캡슐화 및 데이터 은닉과 getter 및 setter 사용에 대한 프로그래밍 자습서입니다.

이 페이지의 내용

이 간단한 가이드는 먼저 객체 지향 프로그래밍에서 캡슐화 및 데이터 은닉의 개념을 간략하게 소개합니다. 그런 다음 C++에서 getter 및 setter 사용으로 넘어갑니다.

캡슐화 란 무엇입니까

캡슐화는 관련된 모든 것을 함께 묶는 개념입니다. C++의 클래스는 모든 관련 데이터를 단일 캡슐로 결합할 수 있습니다.

예를 들어 일부 속성과 속성이 있는 Rectangle 개체 또는 엔터티가 있다고 가정합니다. 모든 속성과 속성을 단일 클래스로 결합할 수 있습니다.

따라서 캡슐화는 관련 데이터와 메서드를 단일 클래스에 결합하는 것으로 알려져 있습니다. 종종 데이터 은닉의 개념과 혼동됩니다.

데이터 은닉은 클래스에 속한 속성이 클래스 외부의 모든 사람에게 액세스되어서는 안 된다는 개념입니다. 데이터 보안을 위반하기 때문입니다.

클래스의 데이터 멤버를 비공개로 설정하면 클래스 외부의 모든 사용자가 액세스할 수 없으므로 데이터 보안을 달성할 수 있습니다.

이렇게 하면 클래스 외부에서 값을 설정하거나 데이터 멤버의 값을 가져올 수 없지만 멤버에 액세스하는 데 사용할 수 있는 메서드를 만들 수 있으며 이러한 메서드는 일부 원하지 않는 데이터가 데이터 멤버에 배치되지 않도록 합니다. .

데이터 멤버의 값을 설정하거나 가져오는 이러한 방법을 getter 및 setter라고 합니다.

C++의 게터와 세터

잘못된 데이터가 클래스의 데이터 멤버에 할당되지 않도록 클래스의 데이터 멤버를 private로 만드는 좋은 프로그래밍 방법입니다. 이를 통해 데이터 멤버에 데이터를 저장하기 전에 데이터 멤버에 들어오는 데이터를 확인할 수 있습니다.

예를 들어 Shape라는 클래스가 있습니다. 모든 모양의 길이 속성은 음수일 수 없습니다.

따라서 length 값을 설정할 때 제공된 값이 0보다 큰지 확인합니다.

유사하게, Employee 클래스가 있는 경우 salary 속성이 있습니다. 이 속성에는 음수 또는 매우 큰 양수 값이 없습니다.

따라서 salary 값을 설정하기 전에 유효성 검사기를 배치해야 합니다. 아래의 예를 살펴보겠습니다.

class Emp {
 private:
  int empSalary;

 public:
  void setEmpSalary(int sal) {
    if (sal > 0 and sal < 10000000) empSalary = sal;
  }
  int getEmpSalary() { return empSalary; }
};

이 코드 조각에는 데이터 은닉을 위해 비공개인 salary 데이터 멤버가 있습니다. 또한 필요할 때 값을 설정하고 검색할 수 있도록 이 데이터 멤버에 대한 getter 및 setter를 제공했습니다.

setter 함수에서 salary 데이터 멤버에 입력된 잘못된 값을 제어하는 ​​검사도 만들었습니다. 이것은 필요한 데이터 멤버에 대한 setter 및 getter를 만드는 방법입니다.

위의 예에 대한 전체 코드를 살펴보겠습니다.

#include <iostream>
#include <string>
using namespace std;
class Emp {
 private:
  int empSalary;
  string empName;

 public:
  Emp(string n, int s) {
    setEmpName(n);
    setEmpSalary(s);
  }
  void setEmpName(string s) { empName = s; }
  string getEmpName() { return empName; }
  void setEmpSalary(int sal) {
    if (sal > 0 and sal < 10000000) empSalary = sal;
  }
  int getEmpSalary() { return empSalary; }
};
int main() {
  Emp e("John", 50000);
  cout << "Name: " << e.getEmpName() << endl;
  cout << "Salary: " << e.getEmpSalary() << endl;
}

출력:

Name: John
Salary: 50000

결론

클래스 인터페이스에 getter 및 setter 메서드를 추가하는 것이 중요합니다. 클래스의 멤버 변수는 비공개로 선언되므로 클래스의 사용자는 값을 검색하고 설정하는 방법이 필요합니다.

setter 메서드는 멤버 변수가 합법적인 값으로 설정되도록 하는 데이터 유효성 검사 코드를 포함할 수 있으므로 getter 및 setter 함수는 이 액세스를 안전하게 활성화합니다.

물론 모든 클래스의 멤버 변수에 대해 getter, setter 또는 두 메서드를 모두 제공하고 싶지 않을 때가 있습니다. 읽기 전용 멤버 변수는 얻을 수 있지만 변경할 수 없는 변수입니다.

이러한 예로는 일부 정적 데이터 멤버가 있거나 일부 읽기 전용 데이터 멤버가 있을 수 있습니다. 이러한 멤버의 경우 getter 함수가 필요하지만 setter 함수는 필요하지 않습니다.