책 정리/Effective C++ 2판
항목 30. 접근하기 어려운 멤버에 대한 비상수 포인터나 레퍼런스를 리턴하는 멤버 함수 사용을 피해라
최익필
2008. 5. 10. 18:45
항목 30. 접근하기 어려운 멤버에 대한 비상수 포인터나 레퍼런스를 리턴하는 멤버 함수 사용을 피해라
이유
1. private의 데이터를 포인터나 레퍼런스로 리턴은 정보은닉 자체를 파괴하는 행위이다.
- 설계를 할때 성능에 중점을 둔다면 이런 경우가 생길수 있다고 필자는 설명한다.
해결방법
1. 우선 하지 말라;
2. 만약 할수밖에 없다면, 상수로써 전달한다. const
주의점
1. 만약 상수성을 제거해야지만 사용해되어야 한다면, 그 데이터를 사용 할때 데이터가 변경되지 않는다는 보장이 있어야 한다,
2008/06/28 03:25 추가 주의점 1번의 경우, 내부 데이터를 상수성이 있는 핸들로 받아놨는데, 만약, 그것이 함수에 들어 갈때, 상수성을 없에야만 한다면(간혹 이런 함수들이 있었다.), 그 함수 내부에서 데이터 변경이 일어 나지 않는 다는것을 보장해야 한다는 뜻이라고 해석됨
개인적 생각
1. 항상 해당 데이터가 어떻게 쓸건지 주석이나 #define으로 표시해 두는것이 좋겠다.
이유
1. private의 데이터를 포인터나 레퍼런스로 리턴은 정보은닉 자체를 파괴하는 행위이다.
- 설계를 할때 성능에 중점을 둔다면 이런 경우가 생길수 있다고 필자는 설명한다.
해결방법
1. 우선 하지 말라;
2. 만약 할수밖에 없다면, 상수로써 전달한다. const
주의점
1. 만약 상수성을 제거해야지만 사용해되어야 한다면, 그 데이터를 사용 할때 데이터가 변경되지 않는다는 보장이 있어야 한다,
2008/06/28 03:25 추가 주의점 1번의 경우, 내부 데이터를 상수성이 있는 핸들로 받아놨는데, 만약, 그것이 함수에 들어 갈때, 상수성을 없에야만 한다면(간혹 이런 함수들이 있었다.), 그 함수 내부에서 데이터 변경이 일어 나지 않는 다는것을 보장해야 한다는 뜻이라고 해석됨
개인적 생각
1. 항상 해당 데이터가 어떻게 쓸건지 주석이나 #define으로 표시해 두는것이 좋겠다.