항목 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 코딩 스타일을 보면서, 이렇게 쓰는것을 보았다. 물론 다른 형태의 것)
이유
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 코딩 스타일을 보면서, 이렇게 쓰는것을 보았다. 물론 다른 형태의 것)
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
항목 25. 포인터나 수치형 타입상의 오버로딩을 피한다. (0) | 2008.05.10 |
---|---|
항목 24. 함수 오버로딩과 디폴트 인자값 중에서 주의깊게 선택한다. (0) | 2008.05.10 |
항목 23. 객체 반환시 레퍼런스를 반환하지 않는다. (0) | 2008.05.10 |
항목 22. 값에 의한 호출보다는 레퍼런스에 의한 호출을 선호한다. (0) | 2008.05.10 |
항목 21. 가능한 const를 이용한다. (0) | 2008.05.10 |
항목 19. 멤버 함수, 비멤버 함수 및 프렌드를 구별한다. (0) | 2008.05.09 |
항목 18. 최소한의 완전한 클래스 인터페이스를 구축한다. (0) | 2008.05.09 |
3부, 클래스와 함수 : 설계 및 선언 (0) | 2008.05.08 |
항목 17. operator=에서 재귀치환을 검사한다. (0) | 2008.05.08 |
항목 16. operator=에서 모든 데이터 멤버들로의 치환을 수행한다. (0) | 2008.05.08 |
최근댓글