이 포스트는 지난 포스트인 http://ikpil.com/1070 에 이름을 붙인것에 불과하다. 이전 포스트의 요지는 "if가 중첩되면 중첩 될 수록 코드 수정이 어려워지고, 가독성이 떨어진다" 였다. 이번 포스트는 이러한 if 중첩을 "if 지옥 또는 if Hell" 이라고 나는 이름을 붙여, 표현하겠다는 것이다. 이렇게 불리는 이유는 다음과 같다. 첫째, 개미지옥에 걸린 개미의 모습과 인간의 집중력이 매우 흡사하다. 중첩이 되면 될 수록, 집중력이 점점 흐트려 진다. 왜냐하면, 안쪽으로 깊숙히 들어 갈수록 기억해야 할 상태가 많아 지기 때문이다.. 결국 몇단에 걸친 if 안이라면, 아무리 기억력이 좋아도, 결국 위쪽을 다시 살펴 보고, 다시 코드 리뷰를 해야만 한다. 이것 말고도로 개미처럼 집중력도 ..
연구실 검색 결과
내가 왜 이런 생각을 하게 되었는지 모르겠다. 가끔씩 생각이 가지치게 되는데, 그때 마다 발견하곤 한다. 여기서 발견이라고 표현한 이유는 내가 어떠한 질문을 창조해 낸게 아닌, 내 머리가 그것을 발생시키고, 내가 그것을 인지했기 때문이다. 좀 이상한 말이였다. 사설이 길어서 여기서 이만 줄인다. 질문은 "어떤 if 문이 인간이 이해하기 더 좋을까?" 이다. 내가 지금까지 써본 if문은 다음과 같은 4가지 유형이였다. 아마도 이 if문의 유형 외로는 다른 유형을 찾기가 힘들 것이다.(없다곤 말을 못하겠다. 외계생명체가 다른 별에 있을 수 있으니까..) 3가지 유형의 예제코드 enum etype { Atype, Btype, Ctype }; enum eMode { AMode, BMode, CMode, }; e..
간만에 책이 아닌, 내 생각의 정리를 포스팅을 한다. 이 포스트가 "데드락을 피하는 방법" 이라든지 "락을 거는 시기를 아는 방법" 이라든지 "락의 종류에 따른 효율성" 등의 이야기를 다루고 있지는 않는다. 이 생각의 정리는 "멀티 쓰레드 기반에서 C++로 어떻게 편하게 락을 걸까?" 이다. 그렇다면, 기존의 락을 걸던 방법들과 불편한점들에 대해서 정리해 보자. 초기의 락을 거는 방법은 다음과 같다. // This post is written by ikpil // 초기의 락 거는 방법 예 #include void f( CRITICAL_SECTION *pcs ) { // Step 3. 임계영역을 걸고 들어 간다. EnterCriticalSection( pcs ); // 연산하는 영역 // Step 4. 임..
1부에선 기본적인 개념을 정리했습니다. 2부에서는 BOOST_FOREACH를 보다 확장해서 사용하거나, 최적화 해서 사용 하는 방법에 대해서 알아 봅니다. BOOST_FOREACH 의 확장 BOOST_FOREACH 를 사용하다보면, 내가 정의한 새로운 타입의 집합체도 BOOST_FOREACH를 이용하여 훑고 싶을 때가 있습니다. 어떻게 하면 사용 할 수 있을까요? 여기서 말하는 확장은 바로 "새로운 타입을 BOOST_FOREACH"로 돌리기 위한 확장 입니다. 확장을 하는 방법으로 다음 코드를 보세요. 여기선 예로 std::string 이라고 정하는데, 원리는 똑같습니다. #include #include #include // for BOOST_FOREACH namespace my { // 시작과 끝을 나..
BOOST_FOREACH 의 경우 boost 1.34.0 부터 정식으로 들어간 라이브러리 입니다. 본 문서는 boost 1.40.0 기준으로 작성 되었습니다. BOOST_FOREACH 에 대한 메뉴얼은 다음의 링크에서 확인 할 수 있습니다. http://www.boost.org/doc/libs/1_40_0/doc/html/foreach.html BOOST_FOREACH 란? C++ 에서 반복자로 정해진 구역을 기존의 방식보다 편하게 훑기 위해서 만들어진 라이브러리 입니다. 기존의 방식으로는 for 문, std::for_each 가 대표적인데, 사용방법이 귀찮거나, 소스관리가 어려운 단점이 있었기에, 사용 할 때 많은 신경을 써야 했습니다. 기존의 방법들의 단점을 한번 봐 봅시다. #include // f..
이번 boost 포스팅은 boost의 1.38.0 버전 부터 추가가 된 scope exit 입니다. 라이브러리 이름에서 오는 포스에서 알 수 있듯이, "유효 범위"와 관련 있는 라이브러리 입니다. http://www.boost.org/doc/libs/1_40_0/libs/scope_exit/doc/html/index.html 에서 확인 가능합니다만, 시간이 지나서 링크가 깨질수 있으니. boost.org 에 직접 들어 가봐서 보는게 좋을듯 싶네요. scope exit 란 무엇인가? "{ }" 를 벗어 날 경우, { } 안에 있는 변수들의 경우, 스택 되감기에 의하여, 지워 집니다. 이때 C++에서의 객체라면, 소멸자를 호출해주는데, 문제는 동적메모리 할당된 개체의 경우라든지, 뮤텍스라든지, 파일 핸들, ..
최근댓글