get & set

Smile:)today·2024년 7월 17일

set & get을 사용하는 이유

1. 데이터 캡슐화와 정보 은닉

  • 캡슐화: 외부에서 직접 접근하지 못하게 하여 객체의 데이터가 의도치 않게 변경되는 것을 방지
  • 정보 은닉: 객체의 내부 구현을 숨기고, 외부에 노출되는 인터페이스를 통해서만 상호작용하도록, 이를 통해 객체의 내부 구조를 변경하더라도 외부 코드에 영향을 미치지 않게 할 수 있음

2. 데이터 검증

  • 유효성 검사: set 메소드를 통해 데이터가 설정될 때 유효성을 검사할 수 있고 이를 통해 잘못된 데이터가 객체의 상태를 망치는 것을 방지
예시 코드
void setValue(int value) {
    if (value >= 0) {
        m_value = value;
        emit valueChanged(value);
    }
}

3. 로직 추가

  • 부가 작업 수행: set or get 메소드에서 데이터를 설정하거나 가져올 때 추가적인 작업을 수행할 수 있음
void setValue(int value) {
    if (m_value != value) {
        m_value = value;
        emit valueChanged(value);
    }
}

int getValue() const {
    // 예를 들어, 로깅 작업을 할 수 있습니다.
    return m_value;
}

4. 인터페이스 일관성

  • 일관된 접근 방법: 객체의 속성에 일관되게 접근할 수 있음 -> 코드의 가독성 높이고 유지보수 쉽게함
counter.setValue(10);
int currentValue = counter.getValue();

5. 나중에 확장성

  • 확장 가능성: 나중에는 복잡한 로직이 필요해질 수 있음. set & get은 내부구현을 변경하면서도 외부 인터페이스는 그래로 유지할 수 있음
    예를 들어, 뮤텍스를 추가할 수 있음
void setValue(int value) {
    QMutexLocker locker(&m_mutex); // 뮤텍스를 사용하여 스레드 안전성 확보
    if (m_value != value) {
        m_value = value;
        emit valueChanged(value);
    }
}

int getValue() const {
    QMutexLocker locker(&m_mutex); // 뮤텍스를 사용하여 스레드 안전성 확보
    return m_value;
}

private:
    mutable QMutex m_mutex;
profile
Hi, I'm vitamin

0개의 댓글