티스토리 뷰

728x90
반응형

 

4편: DECLARE_PROPERTY – 반복되는 getter/setter 자동화

객체지향에서 캡슐화는 중요한 원칙입니다.
하지만 private 멤버 + public getter/setter 패턴은 너무 반복적이라 지겹죠.
그래서 등장하는 것이 DECLARE_PROPERTY 같은 매크로입니다.

😫 반복되는 getter/setter

class Person {
private:
    std::string m_name;

public:
    const std::string& GetName() const { return m_name; }
    void SetName(const std::string& name) { m_name = name; }
};

위 코드를 모든 속성마다 계속 작성한다면 생산성이 떨어지고, 실수도 많아집니다.

🪄 해결 방법: DECLARE_PROPERTY 매크로

#define DECLARE_PROPERTY(type, name) \\
private: type m_##name; \\
public: \\
    const type& Get##name() const { return m_##name; } \\
    void Set##name(const type& value) { m_##name = value; }

✅ 사용 예시

class Person {
    DECLARE_PROPERTY(std::string, Name)
    DECLARE_PROPERTY(int, Age)
};

위 코드 한 줄이 getter + setter + 멤버 변수를 동시에 생성합니다.

⚡ 장점

  • 코드 반복 제거
  • 속성 관리의 일관성 확보
  • 리팩토링 시 변경 포인트 최소화

⚠️ 주의할 점

  • 디버깅 시 IDE에서 매크로 내용을 확인하기 어렵습니다.
  • 인텔리센스(자동완성) 지원이 매크로 안에서는 떨어질 수 있습니다.
  • 실제 getter/setter 동작을 커스터마이징하려면 매크로보단 함수로 구현하는 게 낫습니다.

🧩 확장 아이디어

추후 JSON 직렬화, INI 파싱 등에도 다음과 같이 응용할 수 있습니다:

#define DECLARE_SERIALIZED_PROPERTY(type, name) \\
private: type m_##name; \\
public: \\
    const type& Get##name() const { return m_##name; } \\
    void Set##name(const type& value) { m_##name = value; } \\
    REGISTER_PROPERTY(#name, &m_##name);

✅ 요약

매크로 기능
DECLARE_PROPERTY(type, name) getter/setter/멤버변수 자동 생성

🔚 마무리 한 줄 요약

반복되는 getter/setter? DECLARE_PROPERTY 한 줄로 정리해보세요. 당신의 코드가 한층 깔끔해집니다. ✨
728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함
반응형