항목 20. 데이터 멤버를 공용 인터페이스에 포함시키지 않는다.

이유
1. 가독성이 매우 떨어진다.
- 어떤것은 public 이고 어떤것은 private면 무엇이 public인지 private인지 알고 있어야 한다.
2. 정보은닉이 되지 않아 디버깅 능력이 떨어지게 된다.

해결 방법
1. 데이터는 모두 private로 넣어 둔다.
2. Get / Set 을 이용한다.


개인적인 생각
 #define 문구를 만들어 멤버 데이터에 그 표시를 해둔다.

#define NOACCESS
#define READ
#define WRITE
#define ONLY

class CBabo
{
public:
private:
    READ ONLY    int a;     // ㅋㅋㅋ
    READ WRITE    int b;
    WRITE ONLY    int c;
    NOACCESS    int z;
};

소스 코드를 보았을때 이게 어떻게 사용될지 파악이 가능하다.
주석보다 #define이 이런면에선 더 좋은 점은, IntelliSense 에서 #define이 잘 보이기 때문이다!

난 좀 영리한듯! ㅋㅋㅋ (사실 STL 코딩 스타일을 보면서, 이렇게 쓰는것을 보았다. 물론 다른 형태의 것)


신고
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요

  1. Favicon of http://rgoon.net rgoon 2008.05.09 10:26 신고  Addr  Edit/Del  Reply

    주석이 아니라 #define을 이용한 건 재미있는 생각이네요. 그런데 저는 IntelliSense에서 ㅋㅋㅋ라는 주석만 보일뿐 READ ONLY같은 매크로 보이지 않네요. 혹시 어떤 식으로 사용하셨는지 알 수 있을까요?

    • Favicon of http://ikpil.tistory.com 멋쟁이 최익필 2008.05.09 11:04 신고  Addr  Edit/Del

      저 같은경우 VC2005와 어시스트를 사용 하기 때문에
      VC2005 때문인지 어시스트 때문인지 주석이 아닌 #define이 보입니다.

    • Favicon of http://rgoon.net rgoon 2008.05.09 18:02 신고  Addr  Edit/Del

      저도 VS2005쓰고 있는데 안 보이는걸 보니 어시스트 때문인것 같네요. 한번 써봐야 겠습니다.