클래스들의 Attribute에 보면 Visibility(public/protected/private)란 항목이 있다. 개발자로 하여금 굉장히 착각하기 쉬운 요소가 여기에 숨에 있는데, 이것은 Attribute 자체의 VIsibility를 의미하는 것이 아니라 해당 속성의 Accessor와 Mutator의 함수(Operation)의 Visibility를 의미하고 있다. 아래의 그림과 같이 m_pMsgQPool의 Visibility는 Public으로 설정되어 있다. 코드 제너레이션을 하여 결과물을 확인하여 보자.
소스를 확인해 보면, m_pMsgQPool 자체는 Protected로 선언되어 있는 것을 확인할 수 있다.
그렇다면, 자동생성되는 Accessor와 Mutator의 속성을 확인해 보자. Public에 선언되어 있음을 확인할 수 있다.
m_pMsgQPool의 Visibility로 바꾸어 보자.
m_pMsgQPool의 Visibility는 Protected로 변화가 없지만, Accessor와 Mutator는 Public에서 방금 설정한 Private으로 변경되었음을 확인할 수 있다.
그렇다면, 어떻게 Attribute의 Visibility를 변경할 수 있을까? 해당 Attribute의 Feature 창을 연다음에 Visibility로 검색을 하여, 아래의 속성을 바꾸어 주면 우리가 원하는 작업을 수행할 수 있다. 이제 왜 visibility를 죽어라 바꾸더라도 정작 Attribute의 속성이 Protected로 남아있었는지에 대한 의문이 풀릴 것이다.(그런데 왜 이렇게 복잡하게 만들어 놓았을까...)
이 글은 스프링노트에서 작성되었습니다.