C++ 게터 및 세터

Muhammad Husnain 2023년10월12일
  1. 캡슐화 란 무엇입니까
  2. C++의 게터와 세터
  3. 결론
C++ 게터 및 세터

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

캡슐화 란 무엇입니까

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

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

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

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

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

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

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

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 함수는 필요하지 않습니다.

Muhammad Husnain avatar Muhammad Husnain avatar

Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.

LinkedIn