{ Pimpl ( 핌플 )은 무엇인가? 컴파일 방화벽이다. 컴파일 방화벽은 무엇이고 무엇을 위한 것인가? 방화벽은 벽이고, 이 벽은 컴파일러의 시야를 가려주기 위한 것이다. 컴파일러의 시야는 무엇인가? 정의부를 보는 시야이다. 정의부를 보는 시야는 무엇을 보는가? 각 함수의 구현내용, 변수의 사이즈, 클래스의 총 사이즈 등을 본다. 음, 잘 이해가 안간다. 그래서 어쩔 수 있는 건가? 1. 헤더 파일간의 의존성을 엄청나게 줄여 줄 수 있다. 2. 라이브러리의 인터페이스에 영향을 미치지 않고, 변수의 추가 삭제가 용이하다. 3. 좀 더 강력하게 더블 private을 이용 할 수 있다. (private 속의 private) 어떻게 사용 하는가? .. 링크 참조 그 동안 정리한 것도 있고, 인터넷에도 많고~ ..
C++ Coding Standards 검색 결과
{ 왜냐하면, 데이터 멤버는 변수이기 때문이다. 변수는 무엇인가? 변수는 특정 상태를 기록하기 위한 공간이다. 이게 무슨 상관인가? 특정한 상태를 기록 하는 공간이, 아무에게나 열려 있으면 어찌하겠는가? C++ 로써 예를 들자면, 이런 변수에 값을 변경하기 위해선 로직을 사용 한다. 이 로직들은 함수 형태를 띠는게 자연스럽다. 이런 함수들이 많아 질 수록, 변수는 많은 변화에 노출이 된다. 이때 노출의 정도를 그나마 줄일 수 있는 방법이 private 이다. 만약 public 으로 변수를 유지하게 된다면, 함수에게만 국한된 노출이 누구나 훔쳐 볼 수 있게 되는 것이다. 휴~ 비유를 들어야 직성이 풀리겠는가? 문 잠궈두고, 열쇠를 걸어 두어야 정녕 직성이 풀리겠는가? ㅋㅋ }
{ 오버라이딩이란 무엇인가? 상속 관계에서의 멤버 함수를 재정의 하는 것을 의미한다. 오버로딩이란 무엇인가? 오버로딩은 함수를 확장한다는 의미이다. .. 사실 다른 함수를 같은 이름으로 만드는것이지만, : ) 안전하지 않은 오버라이딩의 예는 무엇인가? 1. 재정의 함수와 본래함수가 다른 디폴트 매개변수를 사용 할때, 정말 힘든 디버깅을 할 수 있다. 예) #include class Base { public: virtual void Draw( char * p = "두꺼바 두꺼바 헌집 줄께 새집 다오" ) { std::cout
{ 이 글의 취지는 무엇인가? 상속을 잘못되게 사용하지 말라는 것이다. 상속의 정확한 의미가 무엇일까? 상속은 말 그대로, 이어 받는 것을 말하는데, C++에선 상속해 주는 녀석의 행동을 이어 받는 것이다. 그래서 "is-a" 관계라 든지 "works-like-a" 라든지 상속은 이런 관계일 때만 해야 한다고 한다. is-a 관계 : B is a A 라는 관계인데, B가 A로 봐도 무리가 없다면, 상속을 해도 된다.(물론 상속을 하지 않아도 된다면 하지 않는게 좋다) works-like-a 관계 : B works like a A 라는 관계인데, B가 A 처럼 행동해야 할때, 상속을 해도 된다. 물론~ 하지 않아도 되면, 하지 않는게 좋다. 상속으로 코드의 재사용을 하면 안되는 이유가 무엇인가? 상속은 대..
{ 지금까지 상속이 필요하지 않다면, 사용하지 않는게 좋다는 이야기였다면, 이번 항목에서는 상속이 없다면 어려운 것들을 상속을 통해 보다 간단하게 만드는 방법이 있고, 어떻게 만드는 것이 좋은지에 대한 설명이 들어 있었다. 일단 이 책의 내용 중에서, 가장 어렵게 설명한 내용이지 않을까 한다. 어떤 것을 상속을 통해 손쉽게 해결 할 수 있는가? 비유 해서 설명하자면, 개과 동물 들 중에서 Dog 와, Wolf, Dingo, 등이 있다고 하자. 그리고 이 개과 동물들은 "짖는다"라는 행동은 갖으나, 소리가 다르다는 것을 알 수 있을 것이다. 만약, 내가 개과 동물들의 "짖는다"라는 행동을 보고 싶다면, 각 동물마다 "짖는다" 라는 함수를 호출해야 할 것이다. 이 작업이 여간 힘든게 아니다. 각 동물들은 수..
{ 쉽게 말하면, "기반 클래스"로 디자인 되지 않았으니까, 상속하지 않는건 당연하다. 그런데 왜 이런 말이 나오냐 하면, "잘못된 상속"을 사용할 수 있기 때문이다. 기반 클래스로 쓰이는 클래스의 경우, 대부분 다형성을 이용한 객체의 제어 때문에 사용 된다. 이는 상속하는 클래스 B가 기반클래스 A 처럼 행동 해야 할 때인데, 기반 클래스로 디자인하지 않을 경우, 가상 함수가 없다는 것을 의미한다. 이는 가상 소멸자(다형성을 사용하지 않는다면, 그냥 소멸자라도 상관 없다.)가 없어서, 스택이나 힙이 오염될 수 있고, 기반 클래스 A의 의도와 다르게, 상속 클래스 B를 사용 할 수 있다. 왜냐하면, 기반 클래스 A의 성질을 보다 정확하고 잘 아는 사람은 원래의 제작자이다. 그런 제작자가 기반 클래스로 쓰..
최근댓글