이 포스트를 만든 목적 공부하려고 이 포스트의 준비물 gVim 7.2 Microsoft Visual C# 2010 참고 서적 Effective C# 내용 타입의 가시성을 제한 하라는 말이 무엇인가? public 을 protected, private 으로 만들라는 말인다. 왜 그렇게 만들어야 하는가? 타입의 내용이 변경 되더라도, 시스템 전체를 변경할 가능성이 적어지거나, 적기 때문이다. - 왜냐하면, 타입의 노출 부위가 적기 때문이다. 결론 사생활을 적게 보여줄 수록, 간섭은 더 적어진다. 여담 이건 설계 이야기라서 좀 처럼 쉽게 받아들이지 못한다. 당연한 이야기인데...
Private 검색 결과
{ 왜냐하면, 데이터 멤버는 변수이기 때문이다. 변수는 무엇인가? 변수는 특정 상태를 기록하기 위한 공간이다. 이게 무슨 상관인가? 특정한 상태를 기록 하는 공간이, 아무에게나 열려 있으면 어찌하겠는가? C++ 로써 예를 들자면, 이런 변수에 값을 변경하기 위해선 로직을 사용 한다. 이 로직들은 함수 형태를 띠는게 자연스럽다. 이런 함수들이 많아 질 수록, 변수는 많은 변화에 노출이 된다. 이때 노출의 정도를 그나마 줄일 수 있는 방법이 private 이다. 만약 public 으로 변수를 유지하게 된다면, 함수에게만 국한된 노출이 누구나 훔쳐 볼 수 있게 되는 것이다. 휴~ 비유를 들어야 직성이 풀리겠는가? 문 잠궈두고, 열쇠를 걸어 두어야 정녕 직성이 풀리겠는가? ㅋㅋ }
내가 C++에 조예가 깊어서 글을 남기는 것이 아니라, Effecitve C++ 을 공부하는 사람들이 이 글을 보고, 도움이 되었으면 하는 생각과, 혹시 내가 틀린것이 있다면 지적해 주시지 않을까 란 생각으로 글을 올리는것임을 미리 밝힙니다. 본론으로 들어와서, 나는 설계 단계에서 다중 상속 할까낭~ 하는 생각을 한적은 있었지만, 지금까지 다중 상속을 해서 코딩한적은 없다. 왜냐하면, 일단 설계단계 조차 난해하고, 조금 복잡해지는 경향이 있었다. 그래서 스스로가 "지금 여기에 꼭 필요한가?" 란 질문에 항상 "지금은 아니오" 라고 답하곤 했기 때문이다. 이번 항목 40의 제목처럼 "다중 상속은 심사숙고해서 사용하자" 로 이야기 하고 있다. 그렇다면 나는 이런 생각을 하곤 한다. "왜!? 무엇 때문에!?"..
public 상속이나 protected 상속, private 상속일 때, 인터페이스(접근 할 범위)가 어떻게 바뀌는지 안다는 전제하에서 이야기를 진행한다. private 상속은 (is-implemented-in-terms-of) 패턴을 뜻한다. 즉, ...는 ...를 써서 구현되었다 라고 할수 있다. 38항목에 자세하게 적어 두었으니 읽어 보면 도움이 될 듯 하다. 자 소스 코드가 있어야 이해가 될듯 하여, 소스코드를 포함한다. #include class Ctest { protected: Ctest( ) : a( 1 ) { std::cout
저번장까지는 설계에 관한 이야기보다는 상속시 유의해야 되는 부분이 강조되었다면, 이번 항목은 .. 설계에 관한 부분이다. 나는 지금까지 private 상속이면 "is-implemented-in-terms-of(...는...를 써서 구현됨)" 이고 클래스 내부에서 객체선언하면 "has-a(...는...를가짐)" 이다 라고 이해했지만, 이것은 잘못된 이해이다. 각각은 추상화된 설계 패턴의 일부분이라는 것이다. 이 패턴 들은 객체 합성으로(.. 이라고 불리지만, 레이어링, 포함 통합 내장 으로도 불린다)으로 만들수 있다는 것이다. 그렇다면 다시 제목을 봐보자.. 항목 38: "has-a(...는...를가짐)" 혹은 "is-implemented-in-terms-of(...는...를 써서 구현됨)"를 모형화 할 ..
private 영역에 넣었다면? private는 클래스 외부에서의 그 어떤 접근도 허용하지 않겠다는 인터페이스이다. 항상 클래스 내부에서만 접근 가능하다. 이 때문에 많은 장점 있겠지만, 대표적으로 엉터리로 쓰기엔 어렵게 만들기 위해서이고, 캡슐화를 위해서이다. 엉터리로 쓰기엔... 이부분은 항목 18에 설명을 했고, 캡술화란 무엇인지는 지겹게 들었을 것이다. 캡슐화 부분만 다시 지적한다면, 객체 내부에 private 영역에 데이터를 넣음으로써 객체간의 혼동과 디버그, 보안 인터페이스를 보다 쉽게 막거나나 혹은 더 쉽게 가능해 지기 때문이다. 이처럼 캡슐화를 하게 되면, 모든 데이터를 함수 인터페이스 뒤에 감추게 되는데, 이때 구현상의 융통성을 전부 누릴 수 도 있다. 예를 들자면, .. 내부 데이터 접..
최근댓글