출처 : http://www.zdnet.co.kr/ArticleView.asp?artice_id=00000039173306
[지디넷코리아]
마이크로소프트가 올 봄에 Visual C++ 2008 한글버전을 발표했다. 그러나 필자와 같이
Visual C++을 주로 사용하는 개발자들은 새로운 버전에 실망을 했을지도 모르겠다.
왜냐하면 Visual C++ 6.0 버전을 발표한 이후 지난 10년 동안 큰 변화가 없었는데, 이번 Visual C++ 2008 버전에서도
이렇다 할 큰 변화가 없었기 때문이다. 솔직히 Visual C++ 6.0에서 프로젝트를 만들어서 최신 Visual C++ 2003 혹은
Visual C++ 2005로 변환(포팅)해도 별문제가 없다.
버전이 달라졌어도 기본적으로 크게 달라진 점이 없기 때문에 별다른 문제가 발생하지 않는 것이다.
그랬던 Visual C+ 2008이 서비스 팩 1 발표를 통해 많은 변화가 발생할 것 이라고 마이크로소프트에서
자신 있게 말하더니, 드디어 지난 8월말에 Visual C++ 2008 서비스 팩 1 정식 버전을 발표했다. 그러면
무엇이 어떻게 변경되었는지 직접 확인해 보자.
10년 만에 2배로 커진 MFC
기존의 MFC보다 소스 코드가 2배 이상 커졌다. 추가된 MFC 소스코드 대부분은 UI 쪽이다. 드디어
Office 2007처럼 리본(Ribborn) UI를 쉽게 개발 할 수 있게 된 것이다. Visual C++ 2008 서비스 팩 1에
새로 추가된 MFC로 그 동안 부족했던 Modern UI Look & Feel을 만들 수가 있게 됐다.
[새로 추가된 MFC 기능]
-오피스 리본 스타일 Interface 추가
-Visual Manager 추가 (Office look & feel)
-Visual Studio 스타일 Docking ToolBar, Panes
-Office 스타일 메뉴
-사용자 정의 툴바와 메뉴
-고급 GUI 컨트롤
-MDI Tab 과 Group 지원
위에서 나열한 기능 덕분에 클릭 몇 번만으로 아래 화면과 같은 멋진 리본 UI를 만들 수 있다.
이 글을 읽고 있는 독자들도 서비스 팩 1에서 같이 제공하는 Sample Code를 보면 이 기능을 쉽게 사용할 수 있다.
C++ 라이브러리 TR1(Technical Report 1)
이미 많은 개발자들은 기존 STL의 한계 때문에 BOOST 라이브러리를 많이 사용하고 있을 것이다. TR1은 좀 더
간단하게 설명하면 STL의 업그레이드로 생각하면 된다. 그리고 C++ 위원회에서 인정하는 라이브러리이다.
즉, 특정 컴파일러에서만 지원하는 라이브러리가 아닌 C++ 컴파일러라면 무조건 지원해야 하는 라이브러리인
것이다. 그리고 C++개발자라면 당연히 알고 있어야 하는 라이브러리인 것이다. 참고로 TR1 이름에서 알고 있듯이
곧 TR2, TR3… 이런 식으로 계속해서 나올 예정이다.
TR1(Technical Report 1)이란?
1. C++ 라이브러리 작업 그룹이 작성한 “1차 기술 보고서(Technical Report 1)“
2. 확장된 C++. 버전으로 이야기 하면 C++ 1.1
3. 현재는 TR2 논의 중 (http://www.open-std.org/jtc1/sc22/wg21/)
4. TR1 문서는 아래 사이트에서 다운 가능
(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf)
Visual C++ 2008 ServicePack1에 추가된 라이브러리 목록은 다음 URL에서 확인 하면 된다.
(http://msdn.microsoft.com/en-us/library/bb982198.aspx)
필자는 TR1의 여러 라이브러리 중 Shared_Ptr에 대해서 간단하게 알아 보고자 한다.
auto_ptr ap(new int(123));
ASSERT(0 != ap.get());
auto_ptr ap2(ap); //(1)
ASSERT(0 != ap2.get());
ASSERT(0 == ap.get());
auto_ptr 에서는 (1) 소스 코드에서 ap에서 ap2로 포인터 소유권을 이전한다.
shared_ptr sp(new int(123));
ASSERT(0 != sp);
shared_ptr sp2(sp); //(2)
ASSERT(0 != sp2);
ASSERT(0 != sp);
TR1 라이브러리의 Shared_Ptr에서는 (2) 소스 코드 라인에서 공유 개체의 참조 횟수 증가하게 된다.
즉, 내부적으로 같은 리소스를 참조하는 모든 shared_ptr 개체는 하나의 제어 블록을 공유하며,
이 제어 블록은 리소스를 함께 소유하는 shared_ptr 개체의 수만 변경하게 된다. 또한 Shared_Ptr 외에
참조 개수를 올리지 않는 Weak_Ptr 라이브러리도 제공한다.
필자가 .net에서 가장 부러워했던 것 중에 하나가 메모리 관리 기능을 .net framework에서 제공하는
것이다. 그런데 Visual C++ 2008 에서 제공하는 TR1을 이용해서 자신만의 메모리 관리 클래스를 만들어
Reference Count계산과 Garbages Collecting을 하면 어느 정도 메모리 관리를 할 수 있을 것 같다.
(실제로 구현하기는 꽤 힘들겠지만 해볼만할 것 같다.)
Visual C++ 2008 서비스 팩 1은 분명히 Visual C++ 라이브러리에 있어 환영할 만한 업그레이드이며
유용하게 사용할 수 있다. 이 글에서 다루지 못한 부분도 많지만 소개된 일부 내용들이 많은 개발자의
흥미를 끌어 직접 살펴볼 수 있는 계기(자극제)가 되기를 기대해본다.
필자는 현재 안철수연구소 선임연구원으로 재직 중이다. 비주얼 C++ 전문가 MVP이며,
[지디넷코리아]
마이크로소프트가 올 봄에 Visual C++ 2008 한글버전을 발표했다. 그러나 필자와 같이
Visual C++을 주로 사용하는 개발자들은 새로운 버전에 실망을 했을지도 모르겠다.
왜냐하면 Visual C++ 6.0 버전을 발표한 이후 지난 10년 동안 큰 변화가 없었는데, 이번 Visual C++ 2008 버전에서도
이렇다 할 큰 변화가 없었기 때문이다. 솔직히 Visual C++ 6.0에서 프로젝트를 만들어서 최신 Visual C++ 2003 혹은
Visual C++ 2005로 변환(포팅)해도 별문제가 없다.
버전이 달라졌어도 기본적으로 크게 달라진 점이 없기 때문에 별다른 문제가 발생하지 않는 것이다.
그랬던 Visual C+ 2008이 서비스 팩 1 발표를 통해 많은 변화가 발생할 것 이라고 마이크로소프트에서
자신 있게 말하더니, 드디어 지난 8월말에 Visual C++ 2008 서비스 팩 1 정식 버전을 발표했다. 그러면
무엇이 어떻게 변경되었는지 직접 확인해 보자.
10년 만에 2배로 커진 MFC
기존의 MFC보다 소스 코드가 2배 이상 커졌다. 추가된 MFC 소스코드 대부분은 UI 쪽이다. 드디어
Office 2007처럼 리본(Ribborn) UI를 쉽게 개발 할 수 있게 된 것이다. Visual C++ 2008 서비스 팩 1에
새로 추가된 MFC로 그 동안 부족했던 Modern UI Look & Feel을 만들 수가 있게 됐다.
[새로 추가된 MFC 기능]
-오피스 리본 스타일 Interface 추가
-Visual Manager 추가 (Office look & feel)
-Visual Studio 스타일 Docking ToolBar, Panes
-Office 스타일 메뉴
-사용자 정의 툴바와 메뉴
-고급 GUI 컨트롤
-MDI Tab 과 Group 지원
위에서 나열한 기능 덕분에 클릭 몇 번만으로 아래 화면과 같은 멋진 리본 UI를 만들 수 있다.
이 글을 읽고 있는 독자들도 서비스 팩 1에서 같이 제공하는 Sample Code를 보면 이 기능을 쉽게 사용할 수 있다.
C++ 라이브러리 TR1(Technical Report 1)
이미 많은 개발자들은 기존 STL의 한계 때문에 BOOST 라이브러리를 많이 사용하고 있을 것이다. TR1은 좀 더
간단하게 설명하면 STL의 업그레이드로 생각하면 된다. 그리고 C++ 위원회에서 인정하는 라이브러리이다.
즉, 특정 컴파일러에서만 지원하는 라이브러리가 아닌 C++ 컴파일러라면 무조건 지원해야 하는 라이브러리인
것이다. 그리고 C++개발자라면 당연히 알고 있어야 하는 라이브러리인 것이다. 참고로 TR1 이름에서 알고 있듯이
곧 TR2, TR3… 이런 식으로 계속해서 나올 예정이다.
TR1(Technical Report 1)이란?
1. C++ 라이브러리 작업 그룹이 작성한 “1차 기술 보고서(Technical Report 1)“
2. 확장된 C++. 버전으로 이야기 하면 C++ 1.1
3. 현재는 TR2 논의 중 (http://www.open-std.org/jtc1/sc22/wg21/)
4. TR1 문서는 아래 사이트에서 다운 가능
(http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf)
Visual C++ 2008 ServicePack1에 추가된 라이브러리 목록은 다음 URL에서 확인 하면 된다.
(http://msdn.microsoft.com/en-us/library/bb982198.aspx)
필자는 TR1의 여러 라이브러리 중 Shared_Ptr에 대해서 간단하게 알아 보고자 한다.
auto_ptr
ASSERT(0 != ap.get());
auto_ptr
ASSERT(0 != ap2.get());
ASSERT(0 == ap.get());
auto_ptr 에서는 (1) 소스 코드에서 ap에서 ap2로 포인터 소유권을 이전한다.
shared_ptr
ASSERT(0 != sp);
shared_ptr
ASSERT(0 != sp2);
ASSERT(0 != sp);
TR1 라이브러리의 Shared_Ptr에서는 (2) 소스 코드 라인에서 공유 개체의 참조 횟수 증가하게 된다.
즉, 내부적으로 같은 리소스를 참조하는 모든 shared_ptr 개체는 하나의 제어 블록을 공유하며,
이 제어 블록은 리소스를 함께 소유하는 shared_ptr 개체의 수만 변경하게 된다. 또한 Shared_Ptr 외에
참조 개수를 올리지 않는 Weak_Ptr 라이브러리도 제공한다.
필자가 .net에서 가장 부러워했던 것 중에 하나가 메모리 관리 기능을 .net framework에서 제공하는
것이다. 그런데 Visual C++ 2008 에서 제공하는 TR1을 이용해서 자신만의 메모리 관리 클래스를 만들어
Reference Count계산과 Garbages Collecting을 하면 어느 정도 메모리 관리를 할 수 있을 것 같다.
(실제로 구현하기는 꽤 힘들겠지만 해볼만할 것 같다.)
Visual C++ 2008 서비스 팩 1은 분명히 Visual C++ 라이브러리에 있어 환영할 만한 업그레이드이며
유용하게 사용할 수 있다. 이 글에서 다루지 못한 부분도 많지만 소개된 일부 내용들이 많은 개발자의
흥미를 끌어 직접 살펴볼 수 있는 계기(자극제)가 되기를 기대해본다.
필자는 현재 안철수연구소 선임연구원으로 재직 중이다. 비주얼 C++ 전문가 MVP이며,
다수의 세미나와 기고 등 활발히 활동 하는 개발자다.