일반화 프로그래밍의 가장 큰 매력은 코드의 재사용이다. 이번 항목은 "어떻게 좀 더 일반화 시킬 수 있지?"를 생각해 보는 항목이다. 1 ) 일반적 클래스나 함수를 설계하고 작성할 때 추구해야 할 사항들로는 무엇이 있는지 설명하라. 내 경우는 간단함과 직관적인 함수명, 마지막으로 재사용 이다. 책에서는 필요 이상의 형식 제한을 피하고, 필요 이상의 기능성을 제하고, 필요 이상의 일체적 설계를 피하는 것을 추구해야 한다고 한다. 2 ) 다음 코드는 콜백 함수를 감싸는 흥미롭고도 유용한 관용구를 보여준다. 좀 더 자세한 설명은 원래의 글[Kalev01]을 참고하기 바란다. 다음 코드를 비평하고 다음을 지적해라. #include template class ca..
책 정리/Exceptional C++ Style 검색 결과
이번 항목부터 40 항목까지 스타일에 대한 이야기를 한다. 1 ) 명료하고 이해하기 쉬운 코드는 누구에게 도움이 될까? 당연히 누구에게나 도움이 된다. 그 중 가장 도움이 되는 사람은 바로 자기 자신일 것이다. 예전에도 그랬고 지금도 그런데, 일화로 3주일 전에 짠 코드를 다시 볼 일이 생겼었다. 코드를 보니, 최적화를 한다고 여기 저기 if 들이 있었고, 변수명과 함수명으로는 도저히 감을 못잡겠다. 더군다나 어떻게 돌아가는지 몰라서, 결국 실행해 보면서 코드를 쫒아 보는 사태가 발생했다. .. 이 경험을 통해서 한가지 교훈을 얻게 되었는데, "나 때문에 코드를 간단하게 만들자." 로 되었다. 2 ) 다음 코드는 기존 컨테이너들에 대한 색인 테이블 생성을 위한 흥미롭고 유용한 관용구를 보여준다. 색인 테..
이번 항목은 C++의 문법 연습이라 할 수 있겠다. 기본적으로 C++ 컴파일러가 여러 기호들을 해석하는 규칙을 알아야 생각해 볼 수 있을 것이다. 컴파일러는 기본적으로 토큰을 최대한 길게 잡는다. 왜냐하면 이것은 보다 빠른 파싱의 기본 원리이기 때문이다. 만약 토큰을 최소 단위로 한다면, 파싱이 더 어려워져서 컴파일 타임이 정말 길어 질 것이다. 비유를 한다면, 책을 책장에 넣으려 할 때, 책을 크기 순으로 넣게 되면, 크기로도 책을 손 쉽게 찾을 수 있다. 물론 이름 순으로 정리해도 되고, 장르순으로도 정리해도 된다. ^^( 컴퓨터는 아무래도 크기 순이 더 편할 듯 하다. ) 1 ) 하나의 유효한 C++ 프로그램에서, 더하기 기호(+)가 연달아(중간에 빈칸 없이) 나올 수 있는 최대 개수는 몇개인가? ..
이번 항목의 표기법을 보고 참으로 놀라웠다 " 아니!? 이런 표기법도 있었다니, 이런건 보통 안쓰잖아!?" 라고 생각했는데, 이번 항목의 주제가 바로 이것이다. "이런 생소한 표기법 쓰지마!" .. 란 표현도 되겠고, "이런 표현도 있으니 조심해" 란 표현도 알맞을 것 같다. 1 ) 표준을 따르는 C++ 컴파일러를 사용 한다고 했을 때, 다음 프로그램은 무엇을 출력하는가? #include #include int main( void ) { int x = 1; for( int i = 0; i < 100; ++i ); // 다음 줄은 무엇을 할까? 증가????????????????????/ ++x; std::cout p[2]; }; }; int main( void ) { return 0; } 여기서 나는 9 ..
이번 항목에서 말하고자 하는 것을 정확히 겪어 본 터라, 책의 예제는 생략하고, 경험담만 쓰려고 한다. 이번 항목은 #define 의 단점을 정확히 지적을 한다. 경험 1. 졸업 작품 만드는 중 KGCA15기 동기인 강일이형이 "도저히 디버깅을 할 수가 없는데, 좀 봐봐" 라고 하면서 코드를 보여 줬다. 이상이 없는 코드인데, 컴파일이 되지 않는 것이 문제점이 였다. 에러 메세지를 봐도, "이 문구의 에러가 아닌데 왜 이러는거야!" 라고 속으로 생각하다가, 혹시나 하고, 같은 이름의 것들이 있나 찾아 보게 되었다. .. 그 순간, 아!! 아!! 를 연발하게 되었는데, 바로 #define 으로 정의된 이름을 함수명과 같기 때문 이였다. 전처리기에 의해서 함수명도 #define 정의된 이름으로 변경되면서, ..
최근댓글