레퍼런스와 포인터 저는 프로그램을 작성할 때 객체를 저장할 위치와 프로그램의 각 모듈에서 객체를 가져오기 위한 방법에 대해서 항상 고민을 합니다. 객체는 레퍼런스와 포인터를 이용하여 참조할 수 있는데 레퍼런스와 포인터의 가장 큰 차이점은 참조하고 있는 객체가 항상 유효한지의 여부입니다. 레퍼런스는 참조 대상과 함께 초기화되어야 하기 때문에 의미 없는 객체를 참조할 수 없습니다. 반면, 포인터 변수에는 어떠한... Continue Reading →
Mixed 클래스에서 포인터 사용하기
C++ 개발자의 .NET 개발 환경으로의 이주 새로 옮긴 개발팀에서는 CLI/C++을 사용한다. 이전 회사에서 .NET 개발 환경을 검토했던 경험을 얘기하자면, MFC를 사용하는 어플리케이션을 개발하고 있었기 때문에, 새로운 툴에 대한 적응도 문제도 있었고, .NET 환경으로 이전하기 위한 시간적 여유가 없었기 때문에 개인적으로 일부 컴포넌트에 대해서만 .NET 개발 환경에 대해서 검토를 했었다. 하지만, 어플리케이션이 여전히 Native Binary로 남아있는... Continue Reading →
C++/CLI에 대해서 알아두어야 할 것들
C++/CLI는 unmanaged code와 managed code의 경계를 허물어 줄 수 있는 도구입니다. 하지만 unmanaged code 영역에서 사용하는 C++의 특성과 managed C++가 갖는 C++의 특성을 모두 가지고 있는 반면에 이 두가지 특성이 모두 managed code에 반영되는 것은 아니기 때문에 C++/CLI로 클래스 라이브러리를 작성한다면 다음과 같은 사실을 미리 감안하는 것이 좋습니다. 네이티브 타입은 더 이상 공짜가 아니다 Visual... Continue Reading →
한 번 템플릿은 영원한 템플릿
템플릿은 타입을 감춘다 템플릿의 파라미터에 타입을 지정하여 특정 타입을 갖춘 새로운 타입의 클래스가 만들어진다. 한 번 템플릿은 영원한 템플릿 언젠가는 반드시 템플릿의 파라미터를 결정해야 한다. 하지만, 타입을 결정하기 위한 책임을 점점 뒤로 미룰 수록, 템플릿에 전달하기 위한 파라미터를 포함하기 위해 새로운 템플릿으로 코드를 구현해야 한다. 이렇게 템플릿에 의존하고 타입이 결정되지 않은 템플릿 클래스가 점점 늘어간다. 템플릿으로... Continue Reading →
컨테이너 객체 제대로 사용하기
STL 컨테이너와 객체 관리 STL 컨테이너가 객체를 다루는 방법은 객체를 직접 참조하는 것으로 객체를 처리할 때 항상 복사, 비교가 따라다닌다. 그런데, 일반적으로 프로그램을 설계할 때 크기가 큰 객체들이나 메모리를 동적으로 할당하는 경우는 특히 객체를 절대로 복사하지 않는다는 불문율이 있다. 그도 그럴 것이 크기가 큰 객체의 경우 복사에 필요한 메모리의 양이 절대적으로 부족할 수도 있고, 객체를... Continue Reading →