본문 바로가기

C++

(10)
[책]C++ 템플릿 가이드 C++ 템플릿 가이드 - 니콜라이 M. 조슈티스, 데이비드 반데보드 지음, 한정애 옮김/에이콘출판 오랜만에 읽은 책입니다. 너무 오랫동안 큰 프로젝트에 투입되어서인지, 프로젝트가 끝나고도 예전 생활패턴으로 돌아가는 데 시간이 걸리네요. 다행히 요 몇 주 주말에 도서관에서 지내다 보니 이 책도 겨우 다 읽을 수 있었습니다. C++ 처럼, 템플릿 역시 학교에서 제대로 배운 적은 없었습니다. 졸업할 때는 C 만 배우고 졸업했으니 ^^ 프로그램 하다 보니 STL 이 필요하게 되었고 STL 책으로 열심히 공부하다 보니 template 의 기본적인 기능과 사용방법 정도는 익히게 되었습니다. 또 MS 의 ATL 을 활용한 COM 인터페이스 구현을 하다 보니 본의 아니게 ATL 소스를 깊이 있게 파고 들게 되었고, 엄..
[C++]포인터 Wrapping 클래스 만들기 요즘 회사 내에서 기존에 만들어진 컨트롤들을 새로 만들어 진 컨트롤로 변경하는 작업을 계속 진행 중입니다. 새로 만들어진 콘트롤들은 인터페이스 기반으로 만들어 져 있고 인터페이스는 조금씩 틀리지만 대부분 아래와 같은 선언과 생성, 리소스 반환 방식을 채택하고 있습니다. 1. 선언 IXXControlA* m_pControl; 2. 생성 m_pControl = NULL; m_pControl = GetControlA(); 3. 종료 함수 if (m_pControl) m_pControl->Release(); 와 같은 방식으로 사용하고 있습니다. 컨트롤들의 종료는 수십 가지이지만, 컨트롤을 생성하는 방식과, 모두 다 사용한 후 리소스를 반환하는 방식(->Release() 호출) 은 모두 동일합니다. 새로 만들어진..
[C/C++] enum, 보다 나은 enum #define 과 얼핏 비슷해 보이지만, 비슷한 유형별의 데이터를 표현하기 위해 반드시 필요한 C++의 필수 타입인 enum 의 몇 가지 재미있고 유용한 팁을 소개합니다. 1. namespace 와 결합하기 일반적으로 enum 을 이용하여 타입이름을 짓기란 쉬운 일이 아닙니다. 만약 리스트에 필요한 정렬 기준을 enum 으로 표현한다면 아래 정도가 됩니다. enum SORT_LIST{ SORT_DATE, // 날짜순 SORT_NAME, // 이름 SORT_CONTENT, // 내용 S0RT_ETC, // 기타}; bool SortSomeData(SORT_LIST SortList){ switch (SortList) { case SORT_DATE: break; case S0RT_NAME: break; // ..
[C++]STL Container 조합하기 STL 에서 하나의 Container를 선택하는 방법은 간단합니다. vector – 맨 뒤에만 추가할 경우 순차 검색에 유리 dequeue – 앞 뒤로 추가할 경우 및 순차 검색에 유리 map – 검색이 필요할 경우 유리 list – 데이터의 삽입과 삭제가 빈번할 경우 유리 … 와 같은 식으로 간단하게 선택할 수 있습니다. 하지만, 가끔가다 보면 위에 Container 의 특징을 하나 이상 만족해야 할 경우가 있습니다. 특히 검색도 빨라야 하면서, 초기에 주어진 순서를 그대로 유지해야 하는 경우가 그렇습니다.간단하게 생각하면 map 와 vector 를 같이 사용하면 되지 않나 싶은데요 몇 가지 고려해야 할 경우가 있습니다. 우선 설명을 더 진행하기 전에 예제에서 사용할 간단한 더미 구조체를 하나 선언하겠..
[C++]인터페이스를 이용하여 상호참조와 종속성을 최소화하는 방법 이번 글의 주제는 C++ 에서 호출하는 클래스(CCaller) 와 호출 받는 클래스(CCallee) 가 있을 경우 호출 받는 클래스(CCallee)에서 이벤트가 발생 등의 이유로 호출하는 클래스(CCaller)의 어떤 함수를 호출하고자 할 경우 사용할 수 있는 안전한 방법에 대해 얘기하고자 합니다. 일반적인 함수호출은 아래 그림과 같습니다. 오늘 설명 드리고자 하는 내용은 반대로 CCallee 클래스에서 CCaller 클래스의 Method를 종속성을 해하지 않고 호출하는 방법을 알아 보려고 합니다. 설명을 진행하기 위해 간단하게 CCaller 와 CCallee 를 만들었습니다. CCaller 는 CallSerice() 멤버 함수에서 CCallee 의 인스턴스를 만들고 CCallee::DoSomething..
[C/C++]#define 매크로 팁 C/C++ 에서 #define 을 사용을 가급적 자제하도록 권고되고 있지만, 잘 사용할 경우 많은 코딩상의 이득을 볼 수 있습니다. #define을 활용하는 예를 몇 가지 설명하려고 합니다. 우선 팁을 설명하기 전에 간단하게 ‘##’ 과 “#’ 에 대해 살펴보고 가겠습니다. (샘플소스는 MSDN 에서 가져왔습니다) 1. ‘##’ - Token-Pasting Operator (##): 분리되어 있는 2개의 토큰을 하나로 뭉쳐주는 역할을 합니다. int token9 = 9;paster( 9 ); // token##n -> token 과실제인수9 를합쳐token9 가됨 다음과 같이 풀이되어 결국 ‘token9 = 9’ 가 화면에 표시되게 됩니다. #define stringer( x ) printf( #x "\..
[책]GoF 디자인패턴! 이렇게 활용한다 GoF 디자인 패턴! 이렇게 활용한다 - 장세찬 지음/한빛미디어 이 책은 Gang of Four(Erich Gamma, Richard Helm, Ralph Johnson, Jone Vlissides)가 쓴 “Design Patterns: Elements of Reusable Object-Oriented Software” 라는 책을 보다 쉽게 접근 할 수 있도록, 다양한 C++과 관련된 문제와 이를 해결하기에 적합한 디자인 패턴을 소개하는 방식으로 이루어져 있습니다. 이 책이 놀라운 점은 저자가 한국인이라는 점입니다. 국내에서는 정말이지 드물게 C++의 아주 깊은 이해를 필요로 하는 분야인 디자인패턴에 대해 이렇게 멋진 책을 쓴 저자가 저와 같은 프로그래머라는 것이 놀랍고 부러울 뿐입니다. 이 책은 거의 ..
안전하고, 좋은 냄새가 나는 C++ 코드 만들기 C++ 을 배운지 꽤 오래 되었지만, 아직도 코드 리뷰를 통해 다른 개발자들의 코드를 볼 때면 한숨이 나오는 경우가 많습니다. 이런 경우가 반복되다 보니, 예전에 몇 가지 코딩 규칙 비슷하게 만들어놓은 자료가 있어 포스팅해 봅니다. 자료가 만들다 말아 내용이 중구난방이네요.. 앞으로도 계속 내용 보강해 나가겠습니다. ▤ 포인트 핸들 및 윈도우 핸들 체크 - 가급적 STL 컨테이너를 사용해서 아예 포인터를 사용하지 않는 것이 정신건강에 이롭다. (STL 자체적으로 메모리 생성 및 소멸)- (윈도우 프로그램의 경우)윈도우 API 호출 직전 항상 윈도우 핸들이 정상인지 IsWindow 와 같은 함수로 검사한다. ▤ DRY(Don't Repeat Your Code)원칙- 동일한 코드를 공용 루틴(함수)으로 개발..