이 포스트는 지난 포스트인 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. 임..
C++ object serialization 란 무엇인가? 국내에 번역된 말로는 "객체 직렬화" 라고 하는데, 우리나라말로 좀 더 풀어 보면, 객체의 메모리를 연속적인 바이트로 만들고, 만들어진 연속적인 바이트를 원래의 객체로 복원하는 작업을 말한다. 그러므로 C++ object serialize 라고 한다면, 위에서 말한 작업을 하라는 것이다. 어디에 쓰이는가? 이러한 객체 직렬화는 메모리에 있는 데이터를 스트림으로 보낼 때 사용 한다. 스트림을 이용하면 객체(객체를 아니여도 ... )를 파일에/로/ 출력/입력 할 수 있으며, 네트워크에서 송수신 할 수 있으므로, 보통, 객체를 파일로 저장해서 읽으려고 할 때, 네트워크로 보내고 받을 때 이다. 개인적 사견으로는 암호화를 할 때, 사용 될 수도 있을것 ..
#include #include int main( void ) { std::locale::global( std::locale( "" ) ); wchar_t stringdata[4] = { 0, }; stringdata[0] = 0xac00; // 유니코드 "가" 와 같습니다 stringdata[1] = 0x3050; // 유니코드 "ぐ" 와 같습니다. stringdata[2] = 0x10a0; // 유니코드 "Ⴂ" 와 같습니다. std::wcout
boost 라이브러리에 항상 고마운 마음을 갖고 있다. 왜냐하면, 무엇인가 만들 때, 그 무엇을 구성하기 위하여 "부품"이 필요하다. 이러한 "부품"들 중 대다수는 boost 라이브러리에 있어, "부품"을 만드는 수고를 덜어 준다. 또한 "부품"의 퀄러티가 세계 최고이니, 고맙고 감사하고, 존경스럽기 까지 하다. 처음 boost::smart_ptr 를 사용하다, boost::bind, boost::fuctional, boost::any, boost::tokenizer, boost::lexical_cast, boost::tuple, boost::asio, boost::timer, boost::array, boost::lambda, boost::utility, boost::random, 까지 써 보았을 때,..
최근댓글