Welcome to Dynamic C#(14) - 철지난 만우절에 낚여서 파닥파닥.

C# 2010. 4. 8. 09:00 Posted by 알 수 없는 사용자
- 뭔소리여

Eric Lippert가 만우절에 쓴 글에 아주 제대로 낚였습니다. C# 4.0이 정식으로 나오기 직전인데, 급하게 추가된 연산자가 있다더군요. 자바에 얼마전에 이런 기능이 추가되어서, C#의 우위를 유지하기 위해서 급하게 추가해서 가장 최근버전의 CTP버전에서 확인할 수 있다는 말이었습니다. 추가된 연산자는 '-->'랑 '<--'인데, 전자는  '~로 향해가는'이라는 의미이고, 후자는 '~로 접근하는'이라는 의미라고 합니다. 무슨 말인고 하니....

int x = 10;
// this is read "while x goes to zero"
while (x --> 0)
{
    Console.WriteLine("x = {0}", x);
}

위의 코드에서 while문안의 식은 x가 0에 도달할때까지라는 의미를 갖습니다.

int x = 10;
// this is read "while zero is approached by x"
while (0 <-- x)
{
    Console.WriteLine("x = {0}", x);
}

위의 코드에서는 0이 x에 의해서 접근되어질때까지(즉, x가 0으로 접근할 때까지)의 의미를 갖습니다.


제가 귀가 얇아서 일까요? 순간 '혹'해서, '좋은데? 낄낄낄'하고 생각하면서 글을 읽어나갈 무렵, 마지막 줄이 눈에 들어왔습니다. '만우절인데 얼레리꼴레리 속았지? 속았지? 우헤헤헤헤헤헤'. 저는 낚인줄도 모르고 신나게 파닥파닥 거린셈이죠. 호호호호호호. 글을 보니, C# QA팀의 테스터한명도 낚여서 파닥거렸다고 합니다. 그리고 참고로, '-->'이 연산자는 몇년 전부터 돌아다니는 쫌된 유머라고 하네요. 즉, 'x-- > 0'은 'x --> 0'과 동일하다는 거죠..... 아흙.

namespace Console1
{
 class Program
 {
  public static void Main(string[] args)
  {
   int x = 10;
   
   while(x --> 0)
   {
    Console.WriteLine("{0}",x);
   }
   
   Console.Read();
  }
 }
}

위의 코드는 아래와 같은 결과가 나오고, while문 안의 조건을 'x-- > 0'으로 바꿔도 결과는 동일합니다.




- 마치면서


사실 저도 이글을 가지고 여러분을 낚아볼려는 생각을 가지고 글을 쓰기 시작했는데, 그랬다가 많은 분들의 호응(?)을 받아서 교훈을 얻을까봐, 소개해드리는 정도로 마쳤습니다. 제가 참 좋아하는 블로거이고, 또 배우러 자주가는 블로그에서 낚일줄은 생각도 못했네요-_- 


- 참고자료

1. http://blogs.msdn.com/ericlippert/archive/2010/04/01/SomeLastMinuteFeatures.aspx

안녕하세요. Visual Studio 2010 팀입니다.
이제 다가오는 2010년 4월 12일은 Visual Studio 2010 정식 버전이 출시되는 날입니다.
이에 맞추어 저희 팀과 함께 활동하실 에너지 충만한 분들을 모집하고자 합니다.

   

 

지원 분야

  • Visual Studio 2010
  • .NET Framework 4.0
  • Cloud Development
  • Parallel Development
  • Web Development
  • Windows 7 Development
  • RIA Development
  • Architecture Development
  • Agile Development
  • Office Business Application Development
  • Team Foundation
  • Windows Mobile 7
  • User Experience (UX)
  • 기타 .NET 과 관련된 모든 분야

   

활동 영역

온라인 활동 영역

팀 블로그 활동

팀 블로그를 통해 자신의 글을 게시할 수 있습니다. 현재 수백 명의 정기 구독자에게 글이 공개가 되며, 팀 블로그가 구글 등의 검색 상위권에 이르게 됨으로 자신의 글이 상위 검색에 노출되는 간접적인 혜택을 누릴 수 있습니다.

온라인 세미나

한국 마이크로소프트와 팀 자체에서 진행하는 여러 가지 온라인 세미나의 스피커로 활동하게 됩니다.

온라인 커뮤니티(예정)

온라인 커뮤니티 활동과 함께 커뮤니티 운영 활동을 하게 됩니다.

   

오프라인 활동 영역

오프라인 세미나

한국 마이크로소프트와 팀 자체에서 진행하는 오프라인 세미나의 스피커로 활동합니다.

기고

팀 블로그를 통해 축적된 자신의 콘텐츠는 월간 잡지 등에 기고할 수 있습니다.

책 집필, 번역(예정)

다양한 노하우를 책으로 집필하고, 외국의 유명 서적을 번역하는 활동을 계획하고 있습니다.

Microsoft MVP 추천

MVP 에 되고자 하시는 분은 한국 이크로소프트 직원과 마이크로소프트 MVP 의 추천을 드립니다.

     

지원 방법

umc골벵이dotnetxpert.com 으로 아래의 양식으로 메일 보내주세요.

이름

  

나이

  

블로그

활동 커뮤니티

  

전화번호

  

티스토리 아이디

  

소개

(직업 및 회사명 포함)

관심 분야

(중복 가능)

   

[멀티터치]멀티터치 프로그래밍 환경 구축하기

Windows 7 2010. 4. 5. 09:00 Posted by 알 수 없는 사용자

Intro

안녕하세요. MFC 카테고리의 꽃집총각입니다.

앞으로 한동안은 멀티터치에 관한 포스팅을 올리려고 합니다. 지난주에 올렸던 사람이 기계와 만나는 진정한 방법 – 멀티터치 편에서는 멀티터치에 대한 개념적인 부분과 비전에 대해 설명 드린바 있습니다. 오늘은 본격적인 프로그래밍 방법에 대해 알아보기 전에 마지막으로 한가지 더 이야기해야 할 내용이 남았습니다. 바로 멀티터치 개발환경 구축에 관한 이야기 입니다 :)

일단은 당연한 말이지만 윈도우 7 운영체제가 필요합니다. 그리고 개발환경인 Visual Studio와, 멀티터치 입력이 가능한 하드웨어가 필요합니다. 오늘은 이 세 개의 준비물에 대해 각각 알아보도록 하겠습니다.

 

첫 번째 준비물 : Microsoft WIndows 7 ®

가장 당연한 첫 번째 준비물은 윈도우 7 운영체제 입니다. 윈도우 7은 기본적으로 멀티터치 입력에 대한 준비를 모두 마치고 태어난 녀석입니다. 터치 입력을 통해서 가벼운 엔터테인 수준의 컴퓨팅은 키보드와 마우스 없이도 모두 해결할 수 있습니다. 하지만 우리 블로그는 윈도우 7을 소개하는 자리가 아니니 여기서 길게 설명하지는 않겠습니다 ^^; 검색을 통해 손쉽게 윈도우 7의 터치 인식 환경에 대한 정보를 얻으실 수 있습니다.

위에 보이는 스크린샷은 윈도우7의 제어판에 기본적으로 들어있는 ‘펜 및 터치’ 항목입니다. 터치 입력에 대한 설정들을 제어하는 곳이지요. 근데, 윈도우 7을 여태 몇 달이나 사용 중이지만 저런 항목은 제어판에서 보신적이 없으신가요? 그렇다면 아마 현재 사용하시는 PC 혹은 노트북이 터치 인식을 지원하지 않기 때문 일겁니다 ㅜㅠ… 이 부분은 좀 있다 하드웨어를 이야기 할 때 다시 말씀 드리도록 하겠습니다.

다만 윈도우7의 터치 인식 지원에 대해 혼동하기 쉬운 점은 ‘멀티터치’의 인식이라는 점입니다. 비스타나 윈도우 XP도 타블렛 PC에 설치하면 터치로 조작할 수 있습니다. 하지만 그저 마우스 커서를 손으로 조작할 뿐이지요(싱글터치). 나중에 이야기 되겠지만 윈도우7의 멀티터치는 WM_MOUSE… 계열의 마우스 메세지를 처리하는 게 아니라 WM_GESTURE / WM_TOUCH라는 새로운 윈도우 메세지를 통해 처리됩니다. 이들 메세지는 윈도우7에서 새롭게 제공되는 메세지이며, 이전 OS에서는 당연한 말이지만 발생하지 않습니다. 저런… 안타까워라!

 

두 번째 준비물 : VIsual Studio 2010

두 번째 준비물은 통합 개발환경인 Visual Studio 입니다. 며칠 뒤 정식 출시될 vs2010이 있다면 추가적인 다른 준비 없이 바로 터치 프로그래밍을 할 수 있습니다. 하지만 꼭 vs2010에서만 가능한 것은 아닙니다. vs2005 / 2008 등 이전 버전에서도 터치 프로그래밍을 해 볼 수 있습니다. 단, 이 때는 별도로 Windows 7 SDK를 다운받아서 설치해 주어야 합니다.
그러니 사실 멀티터치 프로그래밍을 하는 데에는 어느 버전의 비주얼 스튜디오라도 굳이 상관은 없는 셈이지요. 하지만 vs2010 블로그인 만큼 vs2010을 기준으로 강의를 진행하겠습니다. 여러분들도 vs2010을 사용하시겠다고 한다면 Windows 7 SDK를 반드시 깔아야 할 필요는 없습니다. 하지만 이 SDK 에는 제공되는 API들을 이용한 프로그래밍 샘플 코드들도 함께 포함되어 있는데, 이중에는 몇 개의 멀티터치 예제도 들어있습니다. 샘플을 먼저 구동해 확인해 보고 싶으신 분들은 SDK를 설치해 보시는 것도 좋을 거라는 생각이 듭니다.

 

세 번째 준비물 : 멀티터치 인식 하드웨어

자, 아마도 제 생각엔 가장 많은 이들의 원성을 살 세 번째 준비물, 하드웨어에 대해 이야기해 볼 시간입니다. 터치 디바이스는 점차 꾸준히 보급되고 결국은 일반화 될 테지만(아… 혹시 뭐 안될 수도 있겠지만요! ㅎ), 아직은 초기단계이기 때문에 이 글을 보시는 대다수의 프로그래머 분들은 터치 디바이스를 보유하고 있지 않으실 거라는 생각이 듭니다. 사실은 당장 저만 같아도 터치를 인식하는 시스템을 아직 장만하지 못했답니다 ㅜㅠ …

하지만 우선 아쉬운 대로 이를 보완할 차선책이 있습니다. 마우스를 가지고 터치 입력을 시뮬레이션 해주는 방법이 있거든요. 재미있는 점은 마우스를 여러 개 연결하면 연결하는 만큼 독립적인 터치로 인식하게 해주기 때문에, 멀티터치 입력도 시뮬레이션 해볼 수가 있답니다. 책상 서랍 안에 잠자고 있는 마우스가 있다면 지금 얼른 꺼내세요! 그리고 이제 양손으로 마우스를 붙잡고 신기한 체험을 해 볼 시간입니다! “내 PC는 안될거야…”라는 패배의식을 한 방에 날려버릴 방법을 지금 소개해 드립니다 ^^

codeplex에 가보면 Multi-Touch Vista라는 프로젝트가 있습니다. ( http://multitouchvista.codeplex.com/ ) 윈도우 7이 아닌 비스타에서도 멀티터치 인식이 되게 만드는 프로젝트 입니다. 유트브에 보면 이 프로젝트의 데모를 보실 수 있는데, 동작이 꽤나 신기합니다. 그냥 기존의 일반적인 윈도우가  자연스럽게 회전이 되네요.

아… 잠시 이야기가 샐 뻔 했네요. 아무튼 이 프로젝트에서는 마우스 입력을 터치로 대신 인식하게 하는 디바이스도 함께 제공하고 있습니다. 오픈소스이기 때문에 사용에 별다른 제한도 없습니다. 터치 UX는 직관성 혹은 감성적인 측면에서도 의미하는 바가 크기 때문에 직접 느껴보는 것이 중요하겠지만, 개발을 하면서 아쉬운 대로 시뮬레이션 해보기엔 꽤나 적절한 방법입니다.

 
멀티터치를 시뮬레이션 해주는 ‘Multi-Touch Vista’ 프로젝트의 device 설치 중 팝업.

디바이스를 설치하고, 활성화하는 방법은 아래 동영상에 잘 나와있습니다. 프로젝트 주인장님이 참 깔끔히도 정리를 잘 해놓으셨네요 :) 그대로 따라 하시면 어렵지 않게 설치를 끝내실 수 있습니다.

터치 인식 장치가 준비되지 않은 윈도우 7 시스템에서는 컴퓨터의 시스템 정보 확인 창에 아래와 같이 표시될 겁니다.

아아 너무나도 슬픈 소식입니다. ‘디스플레이에 사용할 수 있는 펜 및 터치식 입력이 없다’라고 너무나도 분명하게 확인시켜 주는군요. 자기가 하나 사줄 것도 아니면서 말입니다. 터치식 입력을 가진 장치를 사용하는 경우, 시스템에서 인식된 터치식 입력의 개수를 확인해 보고 싶으면 시스템 정보창의 해당 부분을 보면 알 수 있습니다.

그런데 Multi-Touch Vista에서 제공하는 인터페이스 디바이스를 설치한 후 시스템 정보를 확인해 볼까요?

 

이번엔 너무나도 훈훈한 메세지가 떴습니다. 무려 255개의 터치 포인트를 사용할 수 있다고 하는군요!! 장치를 활성화하면 갖다 붙인 마우스 수만큼 터치를 인식하게 되는데, 최대 255개 까지 인식을 하나 봅니다. 마우스를 255개 꽂으려면 usb 허브가 몇 개나 필요할까… 하는 생각은 저 혼자만 해 본건가요… +_+ 아무튼 이제부턴 최신식 터치 노트북을 장만한 옆집 철수를 부러워 하지 않아도 되는 순간입니다.

 

Outro

자, 이젠 정말 터치 프로그래밍을 하기 위한 모든 준비가 끝났습니다. 하드웨어를 마련할 길이 막막해 보여서 공부를 시작해야 할지 말지 망설이고 있으셨다면 우선은 마우스로 터치를 시뮬레이션하면서 공부를 먼저 시작하시면 됩니다. 네이버 검색을 잠시 해보았더니 오늘 소개해 드린 터치 인식 드라이버는 윈도우 모바일 7의 개발환경에도 유용하게 쓰이는 듯 하군요. ( 실버라이트 코리아 라는 네이버 카페 - http://slkorea.net/ – 에서 인디(inde83)님이 작성하신 동일한 디바이스 안내 및 설정법 글을 보았습니다. ) 윈모바일7의 개발에 관심 있으신 분도 눈 여겨 보시는 게 좋을 듯 합니다.

다음 글부터는 본격적인 개발 이야기를 해보도록 하겠습니다. 재미있는 내용을 가지고 돌아올 테니 조금만 기다려 주세요 ^^
그럼 다음 글에서 뵙겠습니다. 오늘도 좋은 하루 보내세요 ^^*
감사합니다 @

안녕하세요. 추운날씨 잘 견디셨죠? 이제야 좀 어깨펴고 글좀 쓰겠네요. 자~ 오늘도 함께하시죠^^

이번에는 MVC로 사이트를 만드는 시간을 가져보려합니다. 간단하게 회원가입, 로그인, 게시판 정도로 해볼 생각입니다. 오늘은 첫번째로 회원가입을 해보도록 하겠습니다. 너무 썰렁하더라도 옷 단단히 더 껴입으시고 웃음으로 넘어가 주세요^^;

DB 생성하기

사용자 테이블을 만들어봐야죠^^ 테이블 컬럼은 다음과 같습니다.

 컬럼명  데이터 타입
 SEQ  int
 ID  nvarchar(50)
 NAME  nvarchar(50)
 PWD  nvarchar(50)
 EMAIL  nvarchar(100)
 EMAIL_YN  char(1)
 RGST_DT  datetime

다음의 순서대로 테이블을 생성하겠습니다.

1. SQL Server DataBase를 생성합니다. 솔루션 탐색기에서 마우스 우클릭하여 App_Data -> Add -> New Items을 선택하여 MvcDb.mdf라는 이름으로 데이터베이스를 생성합니다.
2. 서버 탐색기에서 생성된 MvcDb.mdf를 클릭하면 데이터베이스가 연결되면서 DB구조가 확장이됩니다. Tables 폴더에서 마우스 우클릭하여 Add New Table을 클릭하고, 위의 테이블 구조로 TB_USER 테이블을 만들겠습니다. 다 만든후 저장해주세요^^


DB와 테이블이 생성이 되었으면 이제 다음의 순서대로 모델을 생성하겠습니다.

1. 솔루션 탐색기에서 Models -> Add -> New Items을 선택합니다.
2. Data 카테고리를 선택하고 ADO.NET Entity Data Model 템플릿을 선택합니다.
3. 모델 이름을 UserDbModel.edmx라고 입력한후 다음버튼을 클릭합니다.
4. Entity Data Model 위자드 팝업이 뜨면 Generate from database를 선택하여 다음버튼을 클릭합니다.


5. 완료가 되면 엔티티 데이터 모델 디자인 창이 열립니다.


SQL Server DataBase의 생성과 모델 생성은 여기를 참고하세요.

초간단한 가입페이지 만들기

정말 간단하게 만듭니다. 위 모델 보시면 항목도 많지가 않죠^^

먼저, 컨트롤러를 하나 생성하겠습니다. 이름은 Member로 하겠습니다.
Controllers에서 Add -> Controller을 하시고 다음과 같이 Member 입력하시고 Add를 꼬옥 눌러줍니다.


다음으로 액션메쏘드를 만들도록 하겠습니다. 이름은 Join으로 하겠습니다.^^

public ActionResult Join()
{
    return View();
}

네, 잘 만들었죠. 그러면 View 페이지도 생성하도록 하겠습니다. 메쏘드 안에서 오른쪽 버튼 클릭후 Add View 하시면 Member 폴더 밑에 Join.aspx 페이지가 생성이 됩니다. 소스는 다음과 같습니다.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 Join
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>회원가입</h2>
    <% using (Html.BeginForm()) {%>
       <p>아 이 디 : <%= Html.TextBox("Id") %></p>
       <p>이    름 : <%= Html.TextBox("Name") %></p>
       <p>패스워드 : <%= Html.Password("Pwd") %> </p>
       <p>패스워드 확인 : <%= Html.Password("CPwd") %></p>
       <p>이 메 일 : <%= Html.TextBox("Email") %>
       <%= Html.CheckBox("Email_Yn", true, new { @value = "Y" } )%>수신여부</p>         
       <input type="submit" value="가입" />  
    <% } %>
</asp:Content>

여기서 확인해볼 것은, Html.BeginForm() 입니다. 브라우저를 열어서 소스보기를 해보시면


자연스럽게 <form>~</form>태그가 생성된 것을 확인하실 수 있습니다. 또, action 부분에 /Member/Join 이 매핑되는 것도 확인하실 수 있습니다.

페이지를 만들었으니 확인을 해봐야겠죠? F5를 꾸욱 눌러봅니다.(위에서 먼저 눌러서 확인했잖아~!! 소스보기는 하늘에서 뚝 떨어진 거니? 라고 물으신다면, 저는 할말이 ;;;)


^^ 바로 띄우기도 좀 거시기해서, 링크하나 걸었습니다;;


폼 내용을 입력하시고, 가입버튼을 클릭합니다.
그런데 이게 무슨 퐝당한 시츄에이션인지요. 뭔가 상태바를 보니 서버를 호출하는것은 같은데 제가 입력한 값들만 다 사라지고 아무 변화가 없습니다. 이유인 즉, 폼이 /Member/Join으로 전송되면 Join메쏘드를 호출합니다. 그런데 거기서 아무 처리를 안해줬으니 그냥 동일하게 뷰페이지만 새로 렌더링하는거죠. 그래서 제가 입력한 값들은... 과감히 버려졌습니다. 앍!
여기서 하나 알게된 것은, 아~ 그러면 값들을 처리하는 메쏘드가 하나 더 있어야겠구나 하는거죠^^;


소스를 보시면, Join 메쏘드가 두개인 것을 확인하실 수 있습니다. 하나는 /Member/Join이 호출되었을때의 메쏘드 이고, 다른 하나는 폼입력을 마친후에 submit시 호출되는 메쏘드 입니다.

Post로 받는 메쏘드를 보시면 EMAIL_YN이 하나 걸리긴 하는데요. Html.CheckBox() 헬퍼 메쏘드를 사용하면 hidden 필드값이 하나 더 생깁니다.(소스보기 참고) value 값은 false 로 되어있고요, 그래서 체크박스가 체크가 되어있으면 제가 value로 지정한 'Y'가 넘어오는데 체크해제때에는 'false'로 넘어옵니다. 그래서 저런 구문을 추가했긴했는데, 추후에 조금 더 알아보도록 하겠습니다.
_db.AddToUserSet(userInfo); 의 경우 엔티티 프레임워크에서 제공하는 프로퍼티로 저희가 생성한 User를 추가해준다는 거겠죠? 그리고 항상 디비작업을 완료하려면 SaveChanges(); 메쏘드를 호출해야합니다.

완료가 됐으니 JoinSuccess 페이지에 모델객체를 넘겨서 마무리를 짓도록 하겠습니다.
Views 폴더 밑 Member 폴더에서 Add -> View 를 하셔서 형식화된 뷰를 생성하도록 하겠습니다.


JoinSuccess.aspx 페이지의 소스는 아래와 같습니다.

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcSite.Models.USER>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
 JoinSuccess
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>회원가입 완료</h2>
    <%= Html.Label(Model.NAME) %> 님, 회원가입이 완료되었습니다. <br />
    환영합니다!
</asp:Content>

다시, 실행을 시켜서 폼 입력을 마친 후 가입버튼을 클릭하면,


네, 디비에 값이 잘 인서트 되었는지도 확인해보세요^^;
여기서 잠깐! 우리가 여기까지 너무 쉽게 온 것 같네요. 다시 실행을 시켜보도록 하죠. 그리고 폼에 값을 입력하지 않고 가입버튼을 클릭하면 Excepton 발생!!!


역시, 너무 쉽게 됐다고 생각했습니다. View Datail을 클릭하니


'Cannot Insert the value NULL into column 'ID...'
아이디부터 걸리기 시작합니다.

급 마무리요

글이 너무 길어졌습니다. 간단한 것을 이리도 길게 글을 쓰는 저를 꾸짖진 말아주세요^^
암튼, 여기서 과제가 생겼습니다. 다음 포스팅에서는 유효성 검사 부분들을 다루도록 하겠습니다.

사람이 기계와 만나는 진정한 방법 - 멀티터치

Windows 7 2010. 3. 29. 09:00 Posted by 알 수 없는 사용자

안녕하세요. MFC 카테고리의 꽃집총각 입니다.
오늘은 Technical Article에 앞서서 멀티터치에 대한 개념적인 글을 하나 준비해 보았습니다.

출처 : http://farm3.static.flickr.com/2152/2547399057_f91154cb87_o.jpg

이미지 출처 : http://farm3.static.flickr.com/2152/2547399057_f91154cb87_o.jpg

이제는 ‘멀티터치’라는 기술은 신기술이라고 부르기도 어색할 만큼 많이 일반화 되었습니다.
애플의 아이폰은 멀티터치의 대중화에 아주 본격적인 역할을 했습니다. 많은 사람들이 손바닥에 올려놓은 아이폰에서 사진을 멀티 터치로 zoom하고 slidng 합니다.

멀티터치 기술에서 우리가 기대할 수 있는 효과를 아래의 두 가지로 정리할 수 있다고 생각합니다.

  1. 이전에 없었던 새로운 형태의 인터페이스 구현
  2. 컴퓨팅 능력이 부족한 저연령/고연령 세대들의 학습 문턱 제거.

멀티터치는 좀 더 본능적이고, 직관적인 컴퓨팅을 가능하게 합니다. 굳이 하드웨어나 소프트웨어의 학습과정 없이, 매뉴얼도 없이 생각대로 조작하는 것을 가능하게 해주는 새로운 개념의 인터페이스 입니다.

멀티터치 기술의 상용화는 이제 겨우 걸음마 단계라고 볼 수 있습니다.
아직 우리가 상상하지 못한 놀라운 제스처들이 우리의 스크린에서 가능해 질 지도 모르는 일입니다.
제가 개인적으로 멀티터치라는 기술을 처음 접했던 것은 2006년 제프한 박사의 TED 강연을 통해서 였습니다. 저는 그가 말하는 내용 중, ‘멀티 터치는 사람이 기계와 만나는 진정한 방법이다’ 라는 말이 꽤나 인상적이군요. 강연에서 제프한 박사는 앞으로 멀티터치를 활용한 보다 다양한 분야의 응용이 이루어 질 것이고, 인터페이스의 큰 변화를 가져올 것이라는 메세지를 던지고 있습니다.

(한글 자막을 켜고 보세요)http://www.ted.com/talks/lang/eng/jeff_han_demos_his_breakthrough_touchscreen.html

애플은 이런 멀티터치 기술을 아주 발 빠르게 자사의 product에 적용해 나가고 있습니다. 아이팟 터치와 아이폰, 매직마우스 등에서 멀티터치 제스처를 인식하고 있고, 얼마 전에 새롭게 발표된 맥북에서도 터치패드가 멀티터치를 인식하도록 개선되었습니다.

마이크로소프트의 새로운 OS인 윈도우 7 역시도 멀티터치 인식 기능이 구현되어 있습니다. 하지만 생각 외로 많은 분들이 윈도우 7의 멀티터치 인식에 대해 잘 모르고 계시더군요. 아마도 애플의 제품군은 하드웨어와 소프트웨어가 함께 공급되어 바로 멀티터치를 체험해 볼 수 있는 것과는 달리, 윈도우 7은 멀티터치 인식 하드웨어가 없으면 직접 체험해 볼 수 없기 때문에 비교적 알려지지 않게 된 것이라고 추측해 봅니다.

저는 얼마 전 3월 9일에 마이크로소프트에서 주최한 Windows 7 Technical Briefing 이라는 기술 세미나에서 ‘Win32 API를 이용해 멀티터치 프로그래밍하기’라는 주제로 세션을 맡아 발표한 적이 있습니다. 그 때를 계기로 윈도우 7에서 동작하는 멀티터치 프로그램의 개발에 대해 많은 관심을 갖게 되었습니다. 발표에 앞서 ① 윈도우 7을 터치로 조작해 보신 분이 있느냐는 질문과 ② 윈도우 7이 멀티터치를 인식한다는 사실을 알고 계셨느냐는 두 가지 질문을 드려보았는데, 개발자 분들을 대상으로 하는 기술 세션이었는데도 불구하고 생각 외로 많은 분들이 처음 듣는다는 반응을 보이셔서 의외라고 생각했습니다.

아래의 동영상은 PDC 2008에서 윈도우 7의 멀티터치 인식 기능을 시연하는 장면입니다.

보시다시피 이미 2년 전인 PDC 2008에서 윈도우 7의 멀티터치 기능은 대중들에게 활짝 공개 되었습니다. 말 그대로 ‘새로운 기능이라고 부르기도 어색할 만한’, 새기능 아닌 새기능 – 윈도우 7 터치 인식 인터페이스 입니다.

앞서 잠깐 말씀 드렸던 것과 같이 윈도우 7 멀티터치의 가장 큰 장애요소는 ‘멀티터치 인식 하드웨어’가 아닌가 생각합니다. 하지만 이미 컴퓨터 시장에는 올인원 PC, 타블렛 PC, 터치 인식 노트북 등 다양한 멀티터치 인식 장치들이 쏟아져 나오고 있습니다. 유명한 d모 가격비교 사이트의 스샷을 올려드리고 싶지만, 특정 브랜드명이 다수 노출되어 그럴 수가 없네요 ^^;… 직접 한 번 검색해 보시기 바랍니다. 분명하게 말씀 드릴 수 있는 것은 향후 적지 않은 시간 동안 ‘멀티터치’ 분야는 하드웨어와 소프트웨어를 막론하고 컴퓨터 산업의 커다란 이슈가 될 것이라는 점 입니다. 아니, 이미 멀티터치는 커다란 이슈가 되었습니다.

앞으로 팀블로그나 여러가지 활동을 통해서, 윈도우 7의 멀티터치 기능을 소개하는 기회를 가지려고 합니다. 그리고 이러한 무궁한 가능성을 가진 멀티터치를 Visual Studio 2010을 통해 Windows 7의 응용프로그램에 적용하는 방법을 시리즈로 연재하고자 합니다. WPF와 같은 Managed 언어로도 구현 가능하지만 제가 진행할 시리즈들은 MFC와 Win32를 이용한 터치 프로그래밍 방법이 주요 내용이 될 것입니다.

그럼 앞으로 연재할 멀티터치 구현 포스팅에 많은 관심 부탁 드리면서
다음 포스팅에서 뵙도록 하겠습니다.

모두 오늘 좋은 하루 보내세요 ^^*

윈도우폰 7 개발환경 공개

Visual Studio 2010 2010. 3. 16. 04:10 Posted by 알 수 없는 사용자
오늘부터 3일 동안 미국 라스베가스에서 MIX10 컨퍼런스가 열리는데 알려진대로 첫날 키노트에서 윈도우폰7 관련 정보가 공개되었습니다.
실버라이트 기반으로 어플리케이션 개발이 가능하고 게임은 XNA Game Studio 4.0으로 가능합니다.
http://developer.windowsphone.com/windows-phone-7-series/ 에 가보시면 윈도우폰7 SDK를 포함한 다양한 정보에 접근이 가능합니다.
발표되자마자 빠르게 설치를 해보았는데 설치되는 요소는 다음과 같습니다.


기본적으로 윈도우폰 7 개발 관련 애드인과 기반이 되는 실버라이트 4와 SDK가 설치됩니다.
여기서 설치되는 실버라이트 4의 버전은 RC버전입니다.
그리고 XNA Game Studio 4.0과 윈도우폰 에뮬레이터 등이 설치되고 Visual Studio 2010 Express for Windows Phone도 함께 설치되는데 Visual Studio 2010 RC버전에서도 마찬가지로 개발 환경이 구성됩니다.

설치를 하고 Visual Studio 2010을 실행 해 보면 개발 환경에 윈도우폰과 XNA 4.0 템플릿이 추가된것을 볼 수 있습니다. 일반적인 어플리케이션을 개발 할 때는 실버라이트로 하면되고 게임은 XNA를 선택해서 개발하면 됩니다.


윈도우폰 어플리케이션을 선택하고 프로젝트를 생성하면 다음과 같은 작업창이 나타납니다.


기존의 익숙한 환경에 윈도우폰 UI의 모습과 실버라이트 기반이기 때문에 XAML 코드가 나타나는것을 알 수 있습니다. 개발 언어는 역시 C#으로 하면 되어서 기존의 지식을 살려서 따로 학습을 하지 않아도 바로 적용할 수 있습니다.

빌드를 하면 윈도우폰의 에뮬레이터가 실행되면서 윈도우폰의 경험을 그대로 살려 볼 수 있습니다.


윈도우 모바일의 에뮬레이터와는 다르게 아주 빠르게 실행되어 쾌적한 개발 환경을 제공합니다.
MIX10에서 발표가 되자마자 빠르게 설치하여 기본 개발 환경을 알아보았는데 앞으로 세세한 정보와 XNA에서의 개발환경도 알아보도록 하겠습니다. Microsoft의 윈도우폰 많이 기대해주세요 :)

실버라이트4 RC와 블렌드 4 베타 공개

Visual Studio 2010 2010. 3. 16. 04:00 Posted by 알 수 없는 사용자

MIX10에서 다양한 정보가 쏟아지고 있는데 실버라이트4 RC와 블렌드4 베타도 공개되었습니다.

Visual Studio 2010 RC에서 사용이 가능하도록 업데이트되었고 블렌드 4에서는 윈도우폰7 관련 지원도 추가되었습니다.

<프리뷰 버전과는 다르게 SketchFlow까지 포함된 완전한 버전입니다.>

<윈도우폰 애드인을 설치해야 윈도우폰 프로젝트가 추가됩니다.>


<윈도우폰 프로젝트를 만들면 다음과 같이 구성됩니다.>

다운로드 가능한 링크는 아래에 있으니 지금 바로 사용해보세요!

Silverlight 4 Tools for Visual Studio 2010 RC

Expression Blend 4 Beta

Blend Add-in Preview for Windows Phone

Blend SDK Preview for Windows Phone

똑똑한 검색을 지원하는 VSTS 2010의 "Navigate To" 검색

Visual Studio 2010 2010. 3. 15. 08:30 Posted by 알 수 없는 사용자

VSTS 2010에는 이전보다 더 지능적인 코드 검색을 위해 “Navigate To”라는 강력한 기능을 제공합니다.

 

“Navigate To”를 사용하려면 “Ctrl 키 + , 키”를 누르면 아래와 같은 다이얼로그 창이 나옵니다.

 

 


“Clear”을 입력하면 아래와 같은 결과가 나옵니다.

단순하게  “Clear”이 있는 위치만 알려주는 것이 아니고 Type, 메소드/프로퍼티 이름, 필드 선언, 파일 이름을 포함한 모든 것을 보여줍니다.

 

Result에서 표시된 항목에서 찾기를 원했던 것을 마우스 클릭을 하면(아니면 Tab 키로 이동하여 선택) 해당 코드를 보여줍니다.

 

 

 

 

기억이 안 나는 단어는 “fuzzy 검색으로 찾기

 

“fuzzy 검색이라는 것은 완전한 단어를 알지 못하지만 일부 단어만을 사용하여 검색 하는 것을 가리킵니다.

 

GetStreamID 라는 함수를 찾아야 하는데  “Stream” 이라는 단어만 생각난다면 이것을 입력하면 아래와 같이 출력됩니다.

 “Stream”이라는 단어를 사용한 모든 것을 다 보여줍니다.

 

 

 

“Pascal Casing” 규약으로 검색

 

닷넷 프레임워크에서는 type이나 메소드의 이름을 “Pascal Casing” 규약으로 짓기를 권유합니다. “Pascal Casing” 방식이라는 것은 여러 단어가 합쳐서 하나의 이름이 되는 것은 해당 단어의 첫 글자를 대문자로 하는 것입니다. “get”“stream”, “id”라는 단어를 붙여서 하나의 메소드 이름을 만든다면 “GetStreamID”로 됩니다.

 

“GetStreamID”라는 단어를 “Pascal Casing” 패턴으로 찾을 때는 “GSI”라는 단어만 입력하여 찾을 수 있습니다.

 

그런데 현재 RC 버전에서는 VC++의 경우는 제대로 지원되지 않습니다. VC++의 경우는 조금 더 입력을 해야 찾아집니다.

“GetStreamID”를 예를 들면 “GStrame”으로 검색을 하면 “GetStreamID”를 찾습니다.

[MFC] 태스크 대화상자(Task Dialog) - (2/3) : 사용하기

MFC 2010. 2. 15. 09:00 Posted by 알 수 없는 사용자

Intro
안녕하세요. MFC 카테고리의 꽃집총각 입니다. 이번에는 지난번 포스팅 [MFC] 태스크 대화상자(Task Dialog) - (1/3) : 기능 소개 편에 이어서, 사용하기 편을 준비했습니다.
이번 포스팅에서 다룰 내용은

  1. 비스타 이전 OS에서 태스크 대화상자 이용에 대한 이슈
  2. 태스크 대화상자의 기본적인 구성
  3. 소스코드 한 줄로 태스크 대화상자 사용하기 - ShowDialog 함수.

이렇게 세 가지 내용을 알아보도록 하겠습니다. 3번 ShowDialog 함수의 소개가 이번 포스팅의 주된 내용입니다. 태스크 대화상자를 사용하기 위해서는 CTaskDialog의 객체를 생성해 DoModal() 함수를 실행하는 방법과, 객체를 생성하지 않고 간단히 CTaskDialog::ShowDialog(...) 함수를 이용하는 방법이 있습니다. 후자는 간편하게 함수호출 한번으로 태스크 대화상자를 이용할 수 있는 장점이 있고, 전자는 보다 디테일한 설정 및 활용이 가능하다는 장점이 있습니다. 오늘은 간단한 사용법인 ShowDialog 함수에 대해 알아보고, CTaskDialog의 객체를 선언하는 방법은 다음 포스팅에서 별도로 다루도록 하겠습니다.



CTaskDialog::IsSupported() - 비스타 이전 OS들을 위한 대비
본격적인 CTaskDialog의 기능들을 알아보기 전에, 먼저 한가지 정리해야 할 점이 있습니다. 이전 포스팅에서 짧게 언급한 바 있지만, 태스크 대화상자는 비스타 이전 OS에서는 제공되지 않습니다. 그래서 만약 개발한 응용프로그램이 윈도우 XP 등에서 실행된다면 태스크 대화상자 출력 시점에 오류를 일으킵니다.  

(그림 1) 윈도우 XP에서 태스크 대화상자 출력을 시도할 때 나오는 오류 화면.


그렇기 때문에 개발한 프로그램이 비스타 이전 OS에서도 실행되어야 한다면 이런 경우를 위한 별도의 처리를 직접 해주어야만 합니다. 이럴 땐 어쩔 수 없이 기존의 메세지 박스나, CDialog를 상속받은 클래스를 직접 제작해 주어야 겠지요.
이런 처리를 찾아볼 수 있는 좋은 예가 바로 인터넷 익스플로러 8.0의 '세션 복구 기능' 입니다. 익스플로러 8.0은 비정상 종료되었다가 실행되는 경우 이전에 열려있던 페이지를 자동 복구할 것인지를 물어보는 창을 띄우는데, 실행중인 윈도우가 비스타 이전 버전이라면 일반 대화상자를, 비스타 이후 버전이라면 태스크 대화상자를 출력합니다.

(그림 2) 인터넷 익스플로러 8.0의 세션복구 기능에서 쓰인 태스크 대화상자.


(그림 3) 비스타 이전 OS에서는 태스크 대화상자 대신 기존의 대화상자를 출력합니다.


이런 식으로 OS 차원의 태스크 대화상자 사용 가능여부를 확인하고자 할 때에는, 직접 OS의 버전을 얻어와서 기능 지원 여부를 판별할 수도 있겠지만 CTaskDialog::IsSupported() 정적 함수를 이용해서 쉽게 확인할 수 있습니다.

if( CTaskDialog::IsSupported() ) // 태스크 대화상자 사용 가능 여부를 확인
{
    // 태스크 대화상자 호출.
    CTaskDialog::ShowDialog(message, emptyString, title, 0, 0, TDCBF_OK_BUTTON);
}
else
{
    // 지원하지 않는 OS인 경우는 예전 방식으로 처리.
    AfxMessageBox(message);
}
(코드 1) CTaskDialog::IsSupported() 함수를 통해 태스크 대화상자 사용 가능 여부를 확인.

참고로 윈도우 서버 2008은 비스타 이전에 나온 OS이므로 태스크 대화상자를 사용할 수 있습니다. 물론 비스타나 윈도우 7 처럼 예쁜 모양은 아니지만요 ^^;

(그림 4) 윈도우 서버 2008에서 출력되는 태스크 대화상자의 모습. 출처 : http://mariusbancila.ro/blog/2009/03/10/task-dialog-in-mfc/

 


태스크 대화상자의 기본적인 구성
태스크 대화상자는 기본적인 구성은 MSDN에 있는 아래의 샘플 스크린샷에 아주 잘 나타나 있습니다.

(그림 5) 태스크 대화상자의 기본적인 구성. (출처 : MSDN)


(그림 5)에서 알 수 있듯이 태스크 대화상자는 다양한 컨트롤들과 기능들을 제공합니다. 오늘은 우선 예전 AfxMessageBox() 수준의 심플한 사용방법을 알아보겠습니다. 간단한 메세지를 사용자에게 노출하거나, 기본적인 버튼을 통해 사용자 입력을 받아오고자 할 때는 오늘 소개하는 ShowDialog 함수를 이용하는 것이 좋습니다.


첫 번째 예제 : 일단 한 번 띄워봅시다
자, 이제 정말로 태스크 대화상자를 사용하기 위한 방법을 알아보죠. 가장 간단하게 태스크 대화상자를 출력하는 방법은 정적 함수인 CTaskDialog::ShowDialog() 를 사용하는 방법입니다. 이 함수를 사용하면 CTaskDialog의 객체를 만들지 않고도 바로 태스크 대화상자를 띄울 수 있습니다.
일단 속 시원하게 코드부터 보겠습니다! ShowDialog 정적 함수를 이용한 코드와, 실제 출력된 태스크 대화상자의 모양입니다.

INT_PTR ret = CTaskDialog::ShowDialog( L"본문 들어가는 곳", L"제목 들어가는 곳", L"타이틀 적는 곳", IDS_STRING102, // 첫 번째 커맨드 버튼. IDS_STRING104 ); // 마지막 커맨드 버튼. if( ret == IDYES ) { // blah blah... }

(코드 2) 드디어 등장했습니다! 태스크 대화상자를 띄우는 첫 번째 코드입니다!

(그림 6) (코드 2)를 통해 출력한 태스크 대화상자의 모습.


태스크 대화상자의 설명을 위해 두 차례나 걸친 포스팅에서 수없이 떠들었던 것에 비해, 너무나도 단순합니다. 그냥 함수 호출 하나 했더니 뜨는군요. 제목, 본문, 타이틀을 설정하는 것은 인자로 직접 문자열을 넣어주고 있으므로 추가 설명이 없이도 쉽게 확인하실 수 있습니다.
스크린샷을 보면 우리의 첫 번째 태스크 대화상자에서는 세 개의 커맨드 버튼을 가지고 있습니다. 커맨드 버튼은 예, 아니요, 확인, 취소 등과 같은 기존 대화상자의 기본적인 버튼 이외에 자유로운 출력 문자열을 설정할 수 있는 의사 입력 버튼 입니다. 태스크 대화상자의 가장 중앙부에 위치하며, 사실상 태스크 대화상자에서 가장 중요한 컨트롤이라고 할 수 있습니다. ShowDialog 함수를 이용할 때 커맨트 버튼을 넣기 위해서는 응용 프로그램의 리소스 파일에 있는 스트링 테이블을 참조합니다. 스트링 테이블에 커맨드 버튼의 설명으로 사용할 문자열들을 차례로 입력하고, 해당 스트링 아이디의 처음과 마지막 값을 ShowDialog의 네 번째, 다섯 번째 인자로 넣어줍니다.

(그림 7) 커맨드 버튼을 추가하기 위해 스트링 테이블을 사용하는 예시.


(그림 6)이 우리의 첫 번째 대화상자 예시에 쓰인 스트링 테이블 입니다. 태스크 대화상자에는 스트링 테이블의 문자열이 출력되고, 사용자가 해당 커맨드 버튼을 선택한 경우 ShowDialog의 리턴값으로 스트링 ID가 반환됩니다. 예제의 세 번째 커맨드 버튼처럼 화면에 여러 줄의 텍스트를 출력하고 싶다면 문자열 안에 개행문자를 이용해 여러 줄의 텍스트를 넣어주면 됩니다.



CTaskDialog::ShowDialog(...) 함수를 좀 더 자세히 알아봅시다.
ShowDialog 함수의 인자는 모두 8개 입니다. 예제에서는 다섯개의 인자만을 사용했고 나머지 인자들은 기본값이 쓰였습니다. 함수의 전체적인 기본형은 아래와 같습니다.  

static INT_PTR CTaskDialog::ShowDialog(
   const CString& strContent,
   const CString& strMainInstruction,
   const CString& strTitle,
   int nIDCommandControlsFirst,
   int nIDCommandControlsLast,
   int nCommonButtons = TDCBF_YES_BUTTON | TDCBF_NO_BUTTON,
   int nTaskDialogOptions = TDF_ENABLE_HYPERLINKS | TDF_USE_COMMAND_LINKS,
   const CString& strFooter = _T("")
);

다섯 번째 인자까지는 설명이 되었으니 나머지 인자를 보자면,
  • nCommonButtons : 태스크 대화상자 오른쪽 하단에 출력되는 기본 버튼들을 설정합니다. 기본값으로 '예', '아니오' 두 개의 버튼이 출력됩니다.
  • nTaskDialogOptions : 태스크 대화상자의 여러가지 옵션을 조절할 수 있는 인자입니다. 옵션에 대한 플래그 값은 아래에서 보다 자세히 설명합니다.
  • strFooter : 태스크 대화상자의 가장 아래쪽에 출력되는 꼬릿말 부분입니다.
기본 버튼으로 설정할 수 있는 플래그는 총 여섯가지이고, CommCtrl.h에 정의되어 있습니다.
  • TDCBF_OK_BUTTON - 확인
  • TDCBF_CANCEL_BUTTON - 취소
  • TDCBF_YES_BUTTON - 예
  • TDCBF_NO_BUTTON - 아니오
  • TDCBF_RETRY_BUTTON - 재시도
  • TDCBF_CLOSE_BUTTON - 닫기
태스크 대화상자의 옵션을 조절할 수 있는 플래그는 총 열 여섯가지이고, 역시 CommCtrl.h 파일에 정의되어 있습니다. 이 중에서, ShowDialog() 함수와 함께 쓰일 수 있을 만한 플래그 몇 가지만을 정리해 보면 아래와 같습니다.
  • TDF_ENABLE_HYPERLINKS
    하이퍼 링크를 활성화 합니다. 텍스트에 하이퍼 링크를 넣고 싶을 때에는 문자열에서 <a href=\"http://vsts2010.net\">하이퍼 링크</a>처럼 HTML 문법으로 설정할 수 있습니다.
  • TDF_ALLOW_DIALOG_CANCELLATION
    태스크 대화상자의 오른쪽 상단에 창 닫기 버튼이 생기고, Esc키나 Alt + F4로도 창을 끌 수 있게 됩니다. 닫기버튼이나 키보드 조작으로 창을 닫은 경우는 IDCANCEL이 리턴됩니다.
  • TDF_USE_COMMAND_LINKS
    커맨드 버튼을 사용하도록 설정합니다. 이 플래그가 설정되지 않으면 커맨드 버튼으로 설정한 버튼들도 기본 버튼들처럼 출력됩니다.
  • TDF_USE_COMMAND_LINKS_NO_ICON
    커맨드 버튼에 아이콘을 출력하지 않고 텍스트만 표시하게 설정합니다.
  • TDF_SHOW_PROGRESS_BAR
    프로그레스바 컨트롤을 표시합니다.
  • TDF_SHOW_MARQUEE_PROGRESS_BAR
    프로그레스바 컨트롤을 Marquee 형식으로 출력합니다.
  • TDF_POSITION_RELATIVE_TO_WINDOW
    태스크 대화상자를 부모 윈도우의 중앙 위치에 나타나도록 합니다. 이 플래그가 설정되지 않으면 바탕화을 기준으로 중앙 위치에 출력됩니다.
  • TDF_RTL_LAYOUT
    태스크 대화상자에 출력되는 텍스트들을 오른쪽에서 왼쪽으로 출력합니다.
  • TDF_CAN_BE_MINIMIZED
    태스크 대화상자의 오른쪽 상단에 최소화 버튼이 생기고, 버튼을 누르면 창이 최소화 됩니다.
위의 아홉가지 플래그 정도가 ShowDialog 함수를 이용한 간단한 사용시에도 유용하게 쓰일만한 기능들 입니다. 이 중에 프로그레스바와 관련된 플래그 같은 경우, TDF_SHOW_PROGRESS_BAR를 넣어주면 실제로 프로그레스바가 표시되지만, 프로그레스바의 값을 조절한다거나, 오류상태를 표시하는 등의 세밀한 처리를 하는 것은 어렵습니다. 이런 경우는 ShowDialog 함수를 통한 호출보다는 직접적으로 CTaskDialog 의 객체 혹은 CTaskDialog 파생클래스의 객체를 만들어서 처리해야 합니다. TDF_SHOW_MARQUEE_PROGRESS_BAR 플래그로 Marquee 형식을 출력할 수도 있지만 이런 경우도 대게는 타이머를 설정하고 자체적으로 동작이 진행중임을 표시하기 위해 주로 사용하므로, 이또한 ShowDialog를 통한 출력에는 생뚱맞습니다.

(그림 8) 예제 대화상자에 꼬릿말과 프로그레스바를 추가한 모습.


위의 (그림 8) 스크린샷을 봅시다. 꼬릿말은 그럭저럭 쓸만 하다고 하지만, 텅 빈 프로그레스바는 보는 이의 마음까지 황량하게 만듭니다. 아무래도 좀 더 추가적인 처리가 필요해 보입니다. ShowDialog 함수를 통해서도 프로그레스바 컨트롤을 출력할 수는 있지만, 이를 세밀하게 제어하는 것은 무리입니다. 이를 포함해 여러가지 컨트롤의 처리에 대한 내용은 다음 포스팅에 설명하도록 하겠습니다.



Outro
이번 포스팅 에서는 태스크 대화상자 미지원 OS를 식별하는 방법과, 태스크 대화상자의 기본적인 구성, 그리고 메시지 박스 수준의 간단한 태스크 대화상자 출력방법을 알아보았습니다. 정적 함수 ShowDialog()를 사용하면 AfxMessageBox()를 이용하는 것보다 좀 더 다양하게 머릿말, 본문, 꼬릿말 등으로 구분에 메세지를 설정할 수 있고, 모던한 디자인의 레이아웃을 갖춘 태스크 대화상자를 출력할 수 있습니다.
다음 포스팅에서는 태스크 대화상자가 제공하는 다양한 컨트롤 들을 활용할 수 있는 방법을 알아보도록 하겠습니다. 리소스 에디터로 직접 다이얼로그를 디자인하던 불편함에서 벗어나 함수호출 몇 줄만으로 다양한 기능을 추가하는 방법들을 정리할 예정입니다. 보다 미리 관련 내용을 확인하고 싶으신 분들은 MSDN(http://msdn.microsoft.com/en-us/library/bb760441(VS.85).aspx)과 다음의 페이지( http://www.nuonsoft.com/blog/2009/06/10/ctaskdialog-in-mfc-in-visual-c-2010/ )를 참고하시기 바랍니다.
그럼 다음 포스팅에서 뵙겠습니다.
감사합니다 ^^*


Reference

SharePoint 2010 Server Object Model

SharePoint 2010 2010. 2. 12. 09:00 Posted by 알 수 없는 사용자

SharePoint의 여러 어셈블리를 직접 호출하는 경우로 웹 파트와 관리자 유틸리티, 이벤트 등에서 사용이 가능합니다. 참조할 수 있는 부분은 SDK MSDN을 참고해 볼 수 있습니다.

 

이번 시간에서는 이전 버전에서도 살펴본 SPSite, SPWeb, SPList, SPListItem 등에 대한 내용을 서버 머신에서 돌아가는 WPF 응용 프로그램에서 액세스 해봅니다.

 

WPF 응용 프로그램을 생성합니다. 프로젝트 이름은 ServerOMWPF 라고 생성합니다.


지금은 대상 프레임워크가 4.0으로 되어 있습니다. 리스트 박스와 버튼을 추가해서 사이트의 목록이름을 리스트박스에 표시되게 해봅니다. 디자인 화면은 아래와 같습니다.



프로젝트에 Microsoft.SharePoint.dll

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI 밑에서 참조 추가합니다.


Get Item 버튼을 클릭해서 아래와 같이 코드를 작성합니다.
아래 코드는 SharePoint 사이트의 목록들의 이름을 리스트 박스에 추가하는 내용입니다.

프로젝트를 빌드하면 에러 나는 것을 알 수 있습니다. 특별한 코드가 아닌데도..,

서버 머신위에서 구동하는 Server Object Model의 응용 프로그램은 .NET Framework 3.5에서 구동되면서 X64, Any CPU로 설정되어야만 합니다. 그래서 에러를 만나게 됩니다.

Web Part, Visual Web Part 등은 별도 수정하지 않아도 됩니다.



프로젝트 속성에서 Application 메뉴에서 Target Framework3.5로 지정합니다.



Build 메뉴에서 Plaform Target“Any CPU”로 설정합니다.



프로젝트를 빌드하고 실행해봅니다. 그러면  Server Object Model을 이용한 간단한 WPF 프로그램의 결과를 아래와 같이 확인이 가능합니다.

 

 

 

개체 모델은 SDK MSDN을 참조할 수 있으며 다음 블로그에서 계속 알아보겠으며 위에서 간단하게 Server Object Model을 액세스하는 예와 실행하는 방법을 알아보았습니다.

 

[JumpToDX11-11] DirectCompute 를 위한 한걸음!

DirectX 11 2010. 2. 11. 09:00 Posted by 알 수 없는 사용자


앞선 시간을 통해서 GPGPU 를 위해서 마이크로소프트가 제공하는 플랫폼이
DirectCompute 라는 것이라고 말씀드렸습니다.
앞으로 DirectX11 을 지원하는 모든 그래픽카드들은 이 DirectCompute 를 지원할 것입니다.
그 이외에도 일부 DirectX10 을 지원하는 그래픽카드들도 지원을 하고 있습니다.


GPGPU 를 위해서 가장 기본적이고 핵심이 되는 기능은 무엇일까요?
저는 GPU 에서 처리된 메모리를 CPU 쪽의 메모리로 보내는 것이라고 생각합니다.
( 이는 개인 의견입니다.^^ )
즉, 그래픽카드에 있는 메모리를 메인메모리로 보내는 작업입니다.
DirectX9 세대까지는 이 작업이 불가능 했습니다.
예를 들면, 그래픽스 파이프라인 중간에 처리된 결과를 다시 가공할 수 있는 방법은
VertexShader 나 PixelShader 같은 쉐이더 스테이지 정도 뿐이였습니다.

하지만 DirectX10 부터는 이들에 대한 중간 결과를 메인메모리로 보내는 기능이 추가되어지면서,
GPGPU 의 시작을 알렸다고 생각합니다.
이 단순한 Copy 작업이 앞으로도 얼마나 유용하게 사용될 수 있을지는 기대가 상당합니다.



< DirectCompute 를 위한 ComputeShader >

DirectCompute 를 위해서 개발자가 할 일은 ComputeShader 를 작성하는 일입니다.
ComputeShader 는 HLSL 이라는 기존 DirectX 의 쉐이더 문법 구조로 작성을 합니다.




HLSL 코드는 DirectX 쉐이더 컴파일러인 FXC 나 API 를 통해서 컴파일 됩니다.
HLSL 은 결국 최적화된 IL 코드를 생성하게 되고,
이 IL 코드를 기반으로 런타임에 각각의 하드웨어에 최적화된 명령어들로 변환
되어져서 실행됩니다.


< GPGPU 에게 실행이란? >

GPGPU 를 활용해서 실행한다는 것은 하드웨어 내부적으로 어떻게 동작하도록 할까요?
앞선 시간에 GPU 는 병렬 처리에 최적화된 많은 SIMD 형태로 구성되어져 있다고 언급했었습니다.
결국 이들은 스레드들의 그룹으로써 실행합니다.
스레드들을 얼마나 많이 생성할 것인지를 개발자가 정해주면, 그에 맞게 연산을 수행합니다.

API 에서는 이들을 큰 그룹으로 나누어 줍니다.
큰 그룹으로 나누어 주는 API 는 ID3D11DeviceContext::Dispatch() 입니다.

ipImmediateContextPtr->Dispatch( 3, 2, 1 );

이렇게 큰 블럭 단위로 나누고 난 후에
ComputeShader HLSL 에서는 이들을 세부적인 스레들로 분할하는 문법을 지정합니다.

[numthreads(4, 4, 1)]
void MainCS( ... )
{
        ....
}




결과적으로 위의 그림처럼 스레드들이 생성되어서 병렬적으로 실행이 됩니다.
위에 나열된 숫자들은 스레드 ID 로써의 역활을 합니다.
즉, 어떤 스레드의 ID 가 MainCS 함수에 파라메터로 넘오오면,
그 ID 를 통해서 해당 버퍼에 값을 작성하게 됩니다.

아래에 간단한 예가 있습니다. 

[numthreads( 256,1,1) ]

void VectorAdd( uint3 id: SV_DispatchThreadID )
{

  gBufOut[id] = gBuf1[id] + gBuf2[id];

}


아무리 스레드들이 복잡하게 동작하더라도, 위와 같이 ID 를 통해서 제어한다면
그 어떤 작업도 문제없이 할 수 있습니다.

일단 먼저 어떻게 DirectCompute 가 실행되어지는지에 대해서 살펴보았습니다.
실행까지 가기 위해서는 일련의 절차를 거쳐야 합니다.
이들에 대해서는 앞으로 차근차근 살펴보겠습니다.



참고 자료
http://microsoftpdc.com/Sessions/P09-16
본 내용은 위의 PDC 를 참고해서 만들었습니다.

SharePoint 2010 Event Receiver

SharePoint 2010 2010. 2. 10. 09:00 Posted by 알 수 없는 사용자

항목을 추가하고 삭제하는 경우 이벤트 코드를 작성해야 할 필요가 있습니다. 이전 버전에서도 마찬가지로 클래스를 상속하여 Feature Object Model을 통해 작업을 했지만 수작업이 필요했습니다. Visual Studio 2010을 통해 새로워진 Event Receiver에 대한 부분을 이번 시간에 알아 보도록 하겠습니다.

 

HJ 라는 공지 사항이 있습니다. 간단히 삭제가 안되게 Event 코드를 작성해봅니다.

Visual Studio 2010 SharePoint 프로젝트중 Empty 프로젝트를 생성합니다. 이름은 EventDemo라고 합니다.

EventDemo 프로젝트를 오른쪽 클릭하여 새 항목을 하나 추가합니다. 새 항목은 아래와 같이 Event Receiver를 선택합니다.


Name
은 기본값을 그대로 하고 Add를 선택합니다. 그럼 해당 사이트에 연결하여 어떤 이벤트로 할 것인지와 어떤 목록인지, 어떤 이벤트 인지를 그래픽적으로 선택하게 됩니다.



이벤트 종류는 단순 List Item Event 뿐만 아니라 여러 가지가 나와 있습니다.


List Item Events
Announcements를 선택하고 “A item is being deleted”를 선택합니다.


마침을 선택하면 Feature가 생성되는 것을 확인 할 수 있습니다.

Feature의 활성, 비활성 이벤트를 어떻게 만드냐 하면 Feature1을 오른쪽 클릭하면 아래와 같이 Add Event Receiver를 볼 수 있습니다. 여기서 생성은 하지 않습니다.



EventReceiver1 폴더 아래의 Elements.xml을 살펴봅니다. 다 제대로 구성된 것을 확인할 수 있습니다. (이제부터는 특정 공지사항에만 이벤트를 적용시킬 수 있습니다. ^^)



마침을 선택했을 때의 코드는 아래와 같이 생성되어 있습니다. Deleting만 선택했기 때문에 이벤트 메서드는 하나만 생성되어 있습니다.



간단히 코딩을 해서 HJ 라는 공지사항에 글을 삭제하지 못하도록 해봅니다.



위의 코딩은 이전 버전의 스타일이며 2010에서는 추가로 뒤에서 다룰 Dialog Framework 으로 에러 핸들링을 할 수 있습니다.

 

EventDemo 프로젝트를 오른쪽 클릭하여 Deploy를 선택하고 완료 후 HJ 공지사항의 항목을 새로 추가합니다. 그러면 아래와 같이 결과 페이지를 확인할 수 있습니다.



Visual Studio 2010에서 만든 Event Receiver가 잘 동작되는 것을 확인했으며 Visual Studio 2010을이용해서 보다 더 생산성 있게 작업이 가능하다는 것을 알 수 있습니다.

 

'SharePoint 2010' 카테고리의 다른 글

SharePoint 2010 Server Object Model  (0) 2010.02.12
SharePoint 2010 데이터 기술  (0) 2010.02.11
SharePoint 2010 Feature  (0) 2010.02.09
SharePoint 2010 Visual Web Part  (0) 2010.01.21
SharePoint 2010 Web Part 생성  (0) 2010.01.19

Visual Studio 2010 RC 공개

Visual Studio 2010 2010. 2. 9. 11:41 Posted by POWERUMC

금일 2010년 2월 9일이 MSDN Subscription 을 통해 공개가 되었습니다. (미국 시간 2월 8일)

Visual Studio 2010 RC(Release Candidate) 공개
http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx

 

이전 Visual Studio 2010 Beta 2 에서 발생하는 가상 메모리와 성능 관련된 문제에 대해서 이번 RC(Release Candidate) 버전에서는 상당히 개선이 되었다는 인터넷 블로거들의 반응이 보입니다.

이미 Visual Studio 2010 RC 버전을 설치한 외국의 블로거의 말에 의하면, Microsoft 는 이런 문제를 해결하는 것에 대해 용기있고 현명함에 칭찬을 아끼지 않고 있네요. 필자 또한 이번 RC 버전에 대해 Microsoft 대한 찬사를 아끼지 않습니다.

일반적으로 RC(Release Candidate) 버전은 더 이상의 기능이나 사용자의 피드백의 반영이 없고, RC 에 안정성을 확보하여 RTM(Release to Manufacture) 버전으로 정식 제품이 공개가 됩니다. 이전의 Beta 버전을 설치하기 꺼려하셨던 분들도 크리티컬한 이슈가 해결된 RC 버전을 설치하셔서 미리 공부하시면 될 것 같습니다.

앞으로 다가오는 4월달 정식 제품이 더욱 기대가 되는 하루입니다. ^^

[MFC] 태스크 대화상자(Task Dialog) - (1/3) : 기능 소개

MFC 2010. 2. 8. 09:00 Posted by 알 수 없는 사용자

Intro
안녕하세요. MFC 카테고리의 꽃집총각입니다. 이번에는 앞서 말씀 드렸던 대로, MFC 10.0에서 새로 추가되는 클래스 중에 하나인 CTaskDialog에 대해서 알아보도록 하겠습니다. 이번 포스팅에서는 CTaskDialog클래스와 이를 이용해 구현할 수 있는 기능인 태스크 대화상자(Task Dialog; 이하 한글 표기만을 사용합니다)에 대한 전반적인 개념을 정리하고, 다음시간 부터는 실제 사용방법 및 주의 사항 등을 정리해 보도록 하겠습니다.


태스크 대화상자 소개
태스크 대화상자(Task Dialog)는 윈도우 비스타 버전에서 새롭게 선보인 컨셉의 대화상자 입니다. 태스크 대화상자를 이용해 개발자들은 기존의 메세지 박스를 이용해 구현하던 기능을 보다 손쉽고 강력하게 처리할 수 있습니다. 이전부터 널리 사용되고 있는 AfxMessageBox(...)를 이용해서도 간한단 정보의 노출이나 사용자 의사선택을 처리할 수 있었지만, 추가적인 기능을 확장해 넣기에는 번거로운 점이 많았습니다. 어떻게든 예, 아니오로 대답할 수 있는 연속적인 질문을 생각해내 메세지 박스를 연거푸 출력하거나, 리소스 에디터를 열고 새로운 대화상자를 직접 만들어 주어야 했습니다. 하지만 태스크 대화상자를 이용하면 개발자가 대화상자를 커스터마이징 하기 위해 필요한 거의 대부분의 기능을 옵션으로 제공하고 있어, 손쉽고 풍부한 기능확장을 아주 심플하게 해낼 수 있습니다.

원래 길게 말해봐야 한 번 보는게 더 와닿는 법입니다. 아래의 스크린샷이 바로 태스크 대화상자의 예시 입니다.

(그림 1) Internet Explorer 8.0의 세션 복구 기능에서 등장하는 태스크 대화상자.


(그림 2) 지난번 강좌에서 설명한 리스타트 매니저에서 사용되는 태스크 대화상자.


(그림 3) 윈도우 7의 업데이트 옵션 설정할때 등장하는 태스크 대화상자.


아마도 윈도우 비스타나 윈도우 7을 사용해보신 분이라면 이곳 저곳에서 많이 보셨던 형식의 대화상자 일겁니다. 위에서 예를 든 세 가지 스크린샷도 모두 프로그래머가 별도로 만든 것이 아니라, 운영체제나 인터넷 익스플로러 등에서 쓰인 녀석들 입니다. Visual Studio 2010의 MFC기반 응용 프로그램에서는 이러한 태스크 대화상자를 몇 줄 안되는 코드만으로 쉽게 제어할 수 있는 강력한 클래스를 제공합니다. 그 클래스가 바로 CTaskDialog 입니다 :)


CTaskDialog로 할 수 있는 일들.
거의 예/아니오 내지는 확인/취소 정도의 선택밖에 제공할 수 없었던 기존의 메세지 박스와는 달리 태스크 대화상자는 아래와 같은 풍부한 커스터마이징 옵션을 제공합니다.

  • 사용자 지정 아이콘
  • 메인 헤더 텍스트 (멀티라인 지원)
  • 본문 텍스트 (당연히 멀티라인 지원)
  • 프로그레스바 컨트롤 표시 가능.
  • 라디오 버튼 표시 가능.
  • 커맨드 버튼 - 대화상자의 가장 중앙에 나타나는, 사용자의 의사 선택을 받는 버튼 - 표시 가능.
  • 추가적인 본문 텍스트를 보이거나 숨길 수 있게 해주는 확장/축소 버튼 표시 가능.
  • 체크박스 표시 가능.
  • 꼬릿말 텍스트 (멀티라인 지원)
  • 대부분의 컨트롤 및 텍스트에 하이퍼 링크 지원.
  • 타이머 기능 제공.

위처럼 다양한 옵션을 제공하기 때문에 어지간한 대화상자 UI의 구성은 번거롭게 다이얼로그 리소스에 버튼을 배열하고 CDialog 파생클래스를 만들어 일일이 코딩을 해야 하는 수고를 들이지 않아도 CTaskDialog 를 이용해 아주 심플하게 처리할 수 있게 되었습니다. 개발 편의성 뿐만 아니라 실용성 측면에서도 실제 비스타 이후 버전의 윈도우 자체에서도 널리 쓰이고 있는 것을 보면 그 실용성은 입증 되었다 볼 수 있겠네요.
각각의 기능들에 대한 자세한 사용 방법은 다음 강좌에 보다 본격적으로 다루도록 하겠습니다.



태스크 대화상자와 운영체제, API들의 관계
이번 강좌에서는 이 부분을 좀 더 일찍 정리하고 싶었습니다. 실제 기능의 사용에는 크게 상관없지만 그래도 기본 개념의 정리가 중요한 법인데, 지난 번 강좌에서는 너무 늦게 말은 한 것 같아서요. 노파심에 다시 한 번 운영체제 및 API들과 기능간의 관계를 정리해 보겠습니다.

  1. 꼭 MFC에서만 할 수 있는 건 아닙니다. MFC는 보다 편리하게 쓸 수 있도록 도와줍니다.
    태스크 대화상자는 기존의 메세지 박스보다 확장성 측면에서 훨씬 유용하게 쓰일 수 있는 새로운 컨셉의 대화상자 입니다. 이 태스크 대화상자는 윈도우 비스타에서 처음 소개되었으며, 태스크 대화상자를 제어할 수 있는 Windows API들도 함께 제공 되었습니다. MFC에서는 이러한 API들을 쉽고 편하게 사용할 수 있도록 랩핑한 클래스를 제공하는 겁니다. 그래서 굳이 MFC를 사용하지 않아도 태스트 대화상자를 이용할 수는 있지만, MFC의 CTaskDialog를 이용해 보다 편하게 작업을 할 수 있습니다.
  2. 윈도우 비스타 이전 버전에서는 사용할 수 없습니다.
    하지만 애석한 점 한가지는, 비스타 이전 버전의 윈도우에 대한 대비책은 딱히 제공되지 않는다는 점입니다. 지난번 포스팅에서 소개했었던 리스타트 매니저도 마찬가지로 비스타 이후 버전에서만 동작했었습니다. 하지만 리스타트 매니저는 응용 프로그램을 윈도우 XP에서 실행해도 기능을 하지 않을 뿐 오류를 내지는 않았지만, 태스크 대화상자를 사용하는 응용 프로그램을 윈도우 XP에서 실행한다면 태스크 대화상자 출력시점에 에러를 내게 됩니다. 화면상에 출력되어야 하는 기능이니 리스타트 매니저 처럼 오동작 없이 넘어가기가 어렵기 때문입니다.


Outro

늘 마찬가지지만 제가 설명해 드리는 MFC의 새로운 기능들은 이해하기 쉽고 빠르게 개발에 적용할 수 있는 기능들 입니다. MFC의 기본적인 방향성 자체가 보편적인 기능을 손쉽게 다룰 수 있게 제공되는 라이브러리 이기도 하고요. 그래서 초보 개발자나, 학생 분들도 어렵지 않게 내용을 따라오실 수 있다고 생각합니다. 그래도 설명 중 잘 이해가 되지 않는 부분이나 잘못된 점이 있다면 피드백을 부탁 드리겠습니다.

그럼 이번 포스팅에서는 간략하게 기능소개 정도로 글을 마치고, 다음 글에서 본격적으로 태스크 대화상자를 사용하는 방법을 다뤄 보도록 하겠습니다. 다음 글을 기다리기가 지루하신 분들은 MSDN( http://msdn.microsoft.com/en-us/library/bb760441(VS.85).aspx )이나 다음의 글( http://www.nuonsoft.com/blog/2009/06/10/ctaskdialog-in-mfc-in-visual-c-2010/ )을 참고하세요.
그럼 다음에 뵙겠습니다.
감사합니다 ^^*


Reference

디버깅 모드에서 역어셈블리 코드 보기

Visual C++ 10 2010. 2. 4. 09:00 Posted by 알 수 없는 사용자

VC++ 10 C++0x나 병렬 프로그래밍 라이브러리 이외에도 툴적인 측면에서도 여러 좋은 기능들이 추가 되었습니다. 알고 있으면 작업할 때 편리한데 시간이 부족하여 제가 아직 자세하게 찾아보지 못해서 소개하지 못한 것이 많이 아쉽습니다. 그래서 짥은 것이라도 틈틈이 시간나면 소개하려고 합니다.

 

 

VC++ 10에서는 디버깅 모드에서도 역어셈블리 코드를 볼 수 있습니다.

 

메뉴에서 “Debug” -> “Windows” -> “Disassembly”를 선택합니다.



아래와 같이 역어셈블리 코드 창이 나타납니다.



그러나 위 화면을 보면 코드 바이트는 표시되지 않고 있습니다.

코드 바이트를 보고 싶다면 위 화면 왼쪽 상단의 “Viewing Option”을 클릭합니다.



위와 같이 옵션을 선택할 수 있습니다. 이 중 “Show code bytes”를 선택합니다.

그러면 아래와 같이 코드 바이트가 표시됩니다.



 

 

 

참고

http://d.hatena.ne.jp/kkamegawa/20100130/p1

 

Visual Studio 2010 RC 공개 임박!

Visual Studio 2010 2010. 2. 3. 09:00 Posted by 알 수 없는 사용자

현재 Visual Studio 2010 Beta 2까지 공개가 되었는데 RC버전의 발표가 임박한 것 같습니다. 
원래 1월 공개 예정이었으나 알려진대로 약간 딜레이 되어서 2월 중에 발표된다는 소식이 있었는데 곧 나올 것 같습니다.

우리나라 시간으로 2월 2일 Windows Azure Tools 1.1 버전이 공개되었는데 지원하는 Visual Studio 버전이 Visual Studio 2008 SP1과 Visual Studio 2010 RC버전입니다.


이것을 보았을 때 RC버전이 곧 공개된다는 뜻이고 Windows Azure Tools 팀 블로그에서도 Windows Azure Tools의 새로운 버전 발표와 함께 Visual Studio 2010 RC 버전이 곧 나온다는 소식을 전하고 있습니다.
최신 소식에 의하면 RC버전에서는 퍼포먼스가 대폭 향상되어 아주 만족스럽다는 내용을 볼 수 있었습니다.

보통 이정도 발표되면 늦어도 2주 내에는 나올 것 같고 빠르면 며칠 내로 발표될 가능성도 있습니다.
아직 정확한 일정은 나온게 없으니 참고만 하시고 자세한 정보가 나오면 알려드리도록 하겠습니다.

[MFC] 리스타트 매니저(Restart Manager) - (3/3) : 활용하기

MFC 2010. 2. 1. 10:00 Posted by 알 수 없는 사용자

Intro
안녕하세요. MFC 카테고리의 꽃집총각 입니다.
지난번 [MFC] 리스타트 매니저(Restart Manager) - (2/3) : 사용하기 편에 이어서 오늘은 리스타트 매니저 시리즈의 마지막인 ‘활용하기’ 편입니다. 이번 시간에는 실제로 리스타트 매니저의 동작을 확인해 볼 수 있는 샘플을 만드는 과정을 정리하고, 실제 동작에 관련된 이슈들을 몇 가지 정리해 보겠습니다. 


예제 프로그램작성 – 1. MFC Application Wizard 설정 하기.

자, 우선은 VIsual Studio 2010을 열어서 Ctrl + Shift + N 을 힘차게 누질러서 새 프로젝트 생성 창을 띄우고, MFC Application을 선택해 MFC 어플리케이션 위자드(Application Wizard;응용 프로그램 마법사)를 띄웁니다.

(그림 1) MFC Application을 선택해 새 프로젝트를 생성합니다.

어플리케이션 위자드가 뜨면 왼쪽 메뉴에서 Application Type을 선택하고, 기본 비주얼 스튜디오(Visual Studio) 형식으로 되어 있는 프로젝트 스타일 항목을 오피스(Office) 형식으로 변경해 줍니다. 비주얼 스튜디오 스타일의 여러 가지 도킹 pane들은 이번 예제에는 크게 쓸모가 없으니까, 괜히 걸리적 거리기만 하거든요 ^^;


(그림 2) MFC Application Wizard > Application Type 항목 설정.

Document Template Properties 항목을 선택하고, 파일 확장자(File extension) 란에 임의의 확장자를 입력해줍니다. 파일 확장자를 명시하게 되면 별도의 코딩을 추가하지 않아도 생성된 프로젝트에 자동 생성되는 소스코드 부분에 Document의 저장/로딩 처리가 추가됩니다. 파일 확장자를 입력하면 오른쪽에 있는 필터 이름(Filter name)칸도 자동으로 채워집니다. 저는 custom-document-format의 뜻으로 cdf라고 적어봤어요.

( 그림 3) MFC Application Wizard > Document Template Properties 항목 설정.

그리고 가장 중요한 부분! Advanced Features 항목에 가서 리스타트 매니저 지원 사항들을 확인합니다. 리스타트 매니저와 관련된 세 개의 체크사항들이 기본적으로 체크되어 있기 때문에 수정을 할 필요는 없지만 그래도 올바로 체크되어 있는지 확인해야 겠지요. 


(그림 4) MFC Application Wizard > Advanced Features 항목 설정.

자, 이제 마지막으로, Generate Class 페이지로 가서 뷰 클래스의 부모 클래스를 CView –> CEditView로 변경해 줍니다. CEditView를 상속받은 클래스는 기본적으로 뷰 영역이 메모장 프로그램처럼 캐럿이 깜박이는 에디트 컨트롤 형식으로 되어있어서, 별다른 처리 없이도 문서의 저장을 확인할 수 있는 문자열 형식의 데이터를 입력할 수 있게 됩니다.


(그림 5) MFC Application Wizard > Generated Class 항목 설정.

이제 어플리케이션 마법사의 모든 설정이 끝났습니다. Finish를 눌러 프로젝트를 생성합니다.


예제 프로그램작성 – 2. 크래시 발생 버튼 추가하기.

리스타트 매니저가 올바르게 동작하는지 알아보기 위해서는 프로그램이 비정상 종료 되어야 합니다. 샘플 프로그램의 리본 UI에 간단하게 패널 하나와 버튼 하나를 추가하고, 핸들링 함수를 추가해서 아래와 같이 잘못된 포인터 연산을 하는 코드를 넣어줍니다. 어플리케이션 위자드에서 오피스 형식의 Application Type을 선택하셨다면 아마 기본적으로 리본 UI가 붙어있을겁니다. 그렇지 않다면 툴바든, 마우스 입력이든 상관 없이 아무 이벤트나 받아서 고의적으로 예외를 발생시키는 코드를 넣어주면 됩니다.

  
(그림 6) 리본에 누르면 터지는 버튼을 넣어줍니다.

 

 예제 프로그램 작성 – 3. 문서 자동 저장 간격 조절하기.
지난번에 리스타트 매니저 사용 팁을 정리하면서, 문서 데이터 자동 저장 기능의 기본 저장 간격 시간은 5분이라고 말씀 드린 적이 있습니다. 우리는 매우 바쁜 사람이니까, 이 시간을 당겨보죠. 이왕이면 프로그램을 띄우고 나서 바로 확인할 수 있도록 아주 짧게 잡아보겠습니다. 한 10초 정도면 나쁘지 않겠죠?

(그림 7) CWinApp 파생클래스의 생성자에서 m_nAutosaveInterval의 값을 10000 미리세크(=10초)로 설정해줍니다.

시간 설정에 대한 내용은 지난회 포스팅이었던 [MFC] 리스타트 매니저(Restart Manager) - (2/3) : 사용하기 편을 참고하시면 됩니다.

 

예제 프로그램 실행!
이제 빌드를 하고 프로그램을 실행시켜서 에디트 뷰에 블라블라 테스트용 잡담을 늘어놓은 후, 10초가 지나 임시 문서가 만들어졌을 만한 충분한 시간을 제공한 뒤에 ‘누르면 폭발!’ 버튼을 야심차게 눌러주면 프로그램이 크래시가 나고 리스타트 매니저가 동작하면서 프로그램을 다시 띄워 주겠지요? 하지만 실제로 실행해보시면 아마 리스타트 매니저는 커녕 그냥 프로그램만 죽어버리고, 프로그램을 닫든지 디버깅을 하든지 니 맘대로 하라는 쓸쓸한 대화상자만 출력되고 말 겁니다.


(그림 8) 크래시가 났지만, 재시작도 문서 복구도 아무 것도 일어나지 않았습니다.
우리는 대 사기극에 휘말린 걸까요?


(그림 9) ‘그래, 내컴은 닷넷 디버거가 깔려 있어서 그럴 거야! 일반 사용자들은 이렇지 않겠지!’
라는 일말의 희망도 부질없습니다. 닷넷 미설치 PC에서는 위와 같은 창이 출력됩니다.

이 시점에서 몇 가지 더 알아두어야 할 것이 있습니다. 우리의 샘플 프로그램에서 리스타트 매니저가 동작하지 않는 이유와 함께, 실제로 리스타트 매니저를 사용하려고 할 때 알아두면 좋은 몇가지 정보들을 함께 정리해 보도록 하겠습니다.

  

(중요*) 리스타트 매니저 사용시 고려사항.

  1. 우리가 살펴보고 있는 MFC 10.0의 리스타트 매니저 기능이 실은 첫 번째 포스팅에서 설명 드렸던 것처럼 윈도우 비스타 시스템에서 선보인, OS 차원에서 제공되는 기능입니다. MFC 10.0에서는 이 기능을 좀 더 쉽게 사용할 수 있게끔 추가처리를 지원하는 것입니다. 예를 들자면 win32 GDI의 DC(Device Context)와 MFC의 CDC 클래스 관계 정도가 되겠네요. MFC의 리스타트 매니저도 내부 구현으로 들어가면 비스타 이후 OS에서 지원하는 윈도우 API인 RegisterApplicationRestart, RegisterApplicationRecoveryCallback 등의 함수를 사용해 재시작 및 문서 복구 기능을 제공하고 있습니다. MFC를 사용하지 않은 일반 Win32 윈도우 프로그램이나, 콘솔 프로그램에서 까지도 재시작 및 복구 기능을 사용할 수 있습니다. 하지만 MFC를 이용하면 보다 쉽게 사용할 수 있게 되는 것이지요.
  2. 프로그램 재시작 기능의 핵심이 되는 RegisterApplicationRestart 함수는 사용시 한가지 주의해야 할 사항이 있습니다. 만약 프로그램의 초기화 코드에 오류가 있어서 인스턴스가 실행되자마자 크래시를 내는 상황인데 리스타트 매니저가 동작한다면 어떻게 될까요? 아마 프로그램은 뻗고, 실행되고, 다시 뻗고, 다시 실행되는 무한 재실행을 반복하게 될겁니다. 이런 경우를 피하기 위해서 비스타의 응용 프로그램 재시작 기능은 초기 재시작 후 60초 동안은 크래시로 인한 비정상 종료가 있었다고 해도 동작하지 않습니다. 우리가 실행시킨 샘플 프로그램은 구동한지 60초가 지나지 않았기 때문에, 재실행 기능이 실행되지 않았던 겁니다. 보다 자세한 내용은 MSDN(http://msdn.microsoft.com/en-us/library/aa373347(VS.85).aspx)에서 확인하실 수 있습니다.
  3. 자동 저장되는 문서 파일의 경로는 CDataRecoveryHandler::GetAutosavePath 함수로 알아낼 수 있습니다. 프로그램을 실행하고 해당 경로에 가보면 실제로 자동 저장되는 버전의 문서파일을 확인하실 수 있습니다. 우리의 샘플 프로그램은 10초마다 착실하게 문서를 잘 저장하고 있네요 :) 임시 파일 저장 경로의 변경은 CDataRecoveryHandler::SetAutosavePath 함수로 가능합니다.

 

 이제 예제를 통해 리스타트 매니저 동작을 직접 확인해 봅시다.
이제는 정말로 리스타트 매니저의 놀라운 동작을 우리 눈으로 직접 확인할 시간입니다. 준비는 이미 다 끝났습니다. 단지 리스타트 매니저가 실행될 수 있도록 예제 프로그램 구동 후 60초의 시간을 기다려 주기만 하면 됩니다.


(그림 10) 리스타트 매니저의 동작을 한 눈에 파악하기 위해
 모두 저장된 파일, 반만 저장된 파일, 저장 안 된 파일을 준비.

60초의 시간이 흐르는 동안 저는 위의 (그림 10)과 같이 세 개의 문서 파일을 준비했습니다. 저장한 문서창 하나, 저장한 후 추가로 내용을 추가한 문서창 하나, 그리고 저장하지 않고 내용만 적은 문서창 하나. 곧 리스타트 매니저가 이들을 각각 제대로 복구해 주는지 실제로 확인해 보겠습니다.
그리고 실제로 우리가 설정한 10초의 간격으로 문서 파일이 저장되는지 확인해 보겠습니다. 저는 윈도우 7을 사용하고 있는데, 임시 문서 기본 저장 경로가 C:\Users\(윈도우계정명)\AppData\Local 으로 잡혀있네요. 윈도우 탐색기로 해당 경로를 열어보면 실제 10초 단위로 갱신되고 있는 임시 저장 파일들이 보입니다.


(그림 11) 착실히 저장되고 있는 자동 임시 저장 파일들.

이제 미리 만들어 두었던 리본 UI의 크래시 버튼을 눌러 프로그램을 비정상 종료 시킵니다. 프로그램이 비정상 종료된 후, 자동으로 재시작 되면서 문서를 임시 저장된 버전으로 복구할 것인지를 묻는 대화상자가 출력됩니다.


(그림 12) 크래시 발생후 리스타트 매니저가 자동으로 응용 프로그램을 재시작.


(그림 13) 응용 프로그램 재시작 후, 임시 저장된 버전의 문서를 복구할 것인지 묻는 대화상자 출력

그림 13의 문서 복구 여부 확인창이 떴을 때 ‘자동 저장 문서 복구’ 항목을 선택하면, 크래시가 나기 전에 저장해 두었던 문서의 텍스트들이 그대로 모두 복구되는 것을 확인할 수 있습니다. 임시 버전으로 복구된 파일들은 파일명이 출력되는 탭 부분에 [복구됨] 이라는 표기가 붙어서 출력됩니다.


(그림 14) 리스타트 매니저의 '자동 복구 기능'으로 복구된 문서파일의 모습.

 

Outro
이번 포스팅 에서는 리스타트 매니저를 직접 동작시키고 확인해 볼 수 있는 예제 작성 방법과 몇 가지 주의 사항을 짚어 보았습니다. 첨부된 이미지들이 많아서 괜히 길어 보이긴 하지만, 어려운 내용은 없었으리라 생각합니다.
이것으로 3회에 걸친 리스타트 매니저 강좌를 마치고, 다음에는 MFC 10.0에서 새롭게 선보이는 CTaskDialog 클래스에 대한 강좌를 가지고 다시 찾아 뵐 예정입니다.
그럼 다음 강좌에서 뵙도록 할게요.
감사합니다 ^^*

 

Reference

 

이번에는 두번째로 프로젝트를 만들거나 새롭게 cs 또는 vb 파일을 추가할 도움이 되는 것입니다.

 

바로 프로젝트를 생성할 나타나는 화면입니다.

 

 

여기서 우리는 그냥 해당하는 프로젝트를 선택합니다. 그리고 프로젝트 만들기를 하는데 VS 2008에서는 .NET 플랫폼의 선택 기능이 있었습니다. VS 2010에서는 다른 보다 우선 설치된 템플릿과 기존에 만들었던 템플릿들 온라인 템플릿으로 나우어 집니다. 첫번째인 Recent Templates 최근에 만들었던 것으로 여러분들이 기존에 만들었던 템플릿을 불러옵니다.


 

이렇게 기존에 만들었던 템플릿을 가져와서 템플릿을 이용하여 다시 만들수가 있습니다. 다음은 설치된 템플릿입니다.

설치된 템플릿은 여러분들 설치한 VS 2010 언어에 맞추어 템플릿이 표시됩니다.

 

 

 

바로 이렇게 표시가 되죠.^^ 그렇다면.. 바로 위에 있는 Enable loading of per user extensions 틀릭하면 도구상자의 옵션 대화상자를 열고 안에 있는 Extension Manager 메뉴를 호출합니다. 여기서 "Automatically check.." 하면 자동으로 자기가 템플릿 관련 확장을 체크하여 업데이트를 합니다.

 

 

 

다음이 온라인 템플릿입니다. 템플릿은 온라인상에서 템플릿을 불러오는데 바로 사용자를 추가로 새롭게 템플릿을 만든 것을 지원하는 것입니다. 바로 사이트에 있는 내용을 가져오는 것입니다.

 

http://visualstudiogallery.msdn.microsoft.com/en-us

 

 

화면은 이렇게 나오는데 왼쪽 템플릿 메뉴에 여러 목록이 있는데 목록에 해당하는 것을 선택하면 선택한 것만 표시됩니다.

  

 

 물론 기존의 VS 2008 있는 .NET 선택할 있게 되어있는 것은 그대로입니다. 하나 추간된 것은 왼쪽의 Sort by라고 하는 부분이 추가되어 정렬도 있습니다. Sort by VS 2008에서는 없는 것입니다.

 

 

.NET 선택 시에는 2.0 버전부터 선택할 있으며(이건 당근이죠 ^^) 그외 .NET 버전도 선택할 있습니다.

 

 

여기 More Frameworks 부분입니다. 그러면 닷넷 프레임 워크 홈페이지로 이동을 합니다. 주소는

http://msdn.microsoft.com/en-us/netframework 이쪽으로 이동을 하여 추가적인 닷넷 프레임워크를 지원합니다. 사이트에는 지금까지의 닷넷을 다운로드 받을 있도록 하고 있습니다.(예를 들어 SharePoint 2010 개발하기 위하여는 최소한 .NET Framework 3.5 이상을 선택해야 합니다.)

 

이제 이번 글의 하이라트라고 있을까요? Search 입니다.

 

부분은 IE 에서 많이 보셨거나 Windows Desktop Search 사용해 보신 분은 이거~ 하실 겁니다.

바로 VS 프로젝트 템플릿을 찾아주는 역활을 합니다. 제가 여기서 C 라고 입력하면 C 관련된 템플릿이 표시됩니다.


 

cs 하면 C#관련 내용일 것입니다. 이것이 중요한 것은 중간에 파일을 추가할 class 파일을 추가 할때 어떨가요? 해당 프로젝트에서 클래스 하나 추가할 때에도 도움이 됩니다.(사실 중간에 강의 하거나 갑자기 class 파일 하나 만들때 가끔 어디 있는지 못찾을 때가 .)

 

 

바로 생각외로 도움이 것입니다.(사실 정말 도움이 됩니다 ㅋㅋㅋ)

 

오늘은 VS 에서 새롭게 프로젝트를 생성하거나 중간에 프로젝트를 추가 또는 class 이나 cs 또는 aspx파일을 같은 것을 추가하는 대화 상자를 봤습니다. 사실 여기서 집고 넘아가는 것은 개발자에게 파일을 찾기, 또는 추가 할때 위치가 어디 있는지 갑자기 당황 스럽거나 또는 기존에 만들었던 템플릿을 다시 만들고자 할때 쉽고 빠르게 만들 있도록 도와 준다는 것입니다.

 

한가지 확실히 도움을 받습니다. 프로젝트 파일을 추가할 경우 저는 C# , C++, Modeling 같이 있으며 Web Services파일등이 있을 추가하려고 하는 파일을 쉽게 찾아서 추가 한다는 것입니다. 정말 편리합니다. 이것을 조금 유식하게(?) 하면 바로 생산성 향상 측면으로 볼수 있을 겁니다.

 

그럼 다음 번에는 실제 코딩과 관련 있는 부분을 보겠습니다.


 

안녕하세요.^^ 오늘은 IDE 4번째 시간으로 C# 개발자분들은 위한 IDE 소개하곘습니다.

이미 PDC 09 사이트에서 IDE관련한 동영상이 있고 C#, VB.NET 있습니다. 오늘은 C#&VB.NET 으로 개발하시는 분들을 위한 설명을 할까 합니다. 그럼 다음은?? ㅎㅎ VB.NET 입니다. 그리고 다음은 .. Web, C++ Project Management 마지막이 General 마무리를 지으려 합니다. 사실 PDC에서는 별도의 섹션으로 되어 있으나 제가 그냥 하나로 합쳐서 글을 씁니다. 이유는 글을 끝까지 읽어보시면 됩니다.

 

그럼 첫번째 C# 하기 전에 PDC 09 DJ Park 이란 분의 동영상과 자료는 이곳에서 다운로드 받을 있습니다.

 

http://microsoftpdc.com/Sessions/FT35

 

마지막에 분은 1분안에 코딩을 완료하는.. 멋진 모습(?) 보실 있습니다.(저도 해보고 싶지만.. ㅋㅋ 실력이 딸려서 . 그렇지만 언제는 해보고 싶습니다.^^ 세미나에서 1 코딩 완성 ㅎㅎㅎㅎ)

여기서는 동영상에서 나온것을 일단 정리하면서 C# 개발자 분들에게 도움이 될만한 IDE 환경에 대하여 한번 써보겠습니다.

 

 

화면을 아시는지요??(.. 뭐냥. 이건.. 아는 건뎅. .) 화면은 모두 아시겠지만 여러분들이 개발하는 언어를 선택하면 언어에 맞는 환경 구성을 한다는 것입니다. 여기서 환경이라고 하면.. 당근 개발 환경이겠지요. General Development Settings 으로 합니다. 일반적인 개발 환경으로는 개발 속도가 조금 다를것입니다. 일단 C#이므로 C#으로 선택합니다. 물론 중간에 설정 변경을 있습니다. 중간 변경은 Tool 에서 Import and Export Settings 에서 변경할 있습니다.

중간 변경화면 입니다.

 

 

처음 설정을 C# 개발자 하여 환경설정을 해보죠^^(중간에 변경 가능 아시죠?)

 

이렇게 경우 C# 개발 환경으로 변경이 되는데 변경되는 것은 키보드의 단축키와 IDE 환경이 변화게 됩니다.

IDE 환경에서 개발 언어 또는 관리자에 맞게 IDE 환경을 변경하여 최적의 개별 환경을 꾸미는 것입니다. 그럼 C# 최적은 무엇일가? 단축키?( 쓰지 않습니다 .) VS 시작할 시자화면? 모두 개발의 생산성이나 편리성에 맞추어 개발자가 바로 개발을 있다는 것입니다.

 

이렇게 C#으로 선택하면 초기에는 왼쪽은 박스, 오른쪽에는 솔루션탐색기와, 탁색기, 속성만 일단 표시됩니다. 다음 여러분들이 추가/변경 하실 있습니다. 다음은 바로 단축키 입니다. 단축키 부분이 변경이 되는데 소스 코드 한줄 할줄 생성할 여러분들이 단축키를 이용하면 오타를 많이 줄일 있습니다.( 사실 오타 땜시 오타쟁이라고 소문이 .)

 

첫번째는 Modernize the IDE라고 하는 부분입니다.

짧은 영어 실력으로 번역을 해보면 현대적인 IDE 환경을 이야기 합니다. 현대적인? 현대화 라고 하는데.. 정확히는 IDE환경을 조금 현대적으로 또는 우리가 마음대로 바꿀 있도록 했다는 것이며, 요즘 모두 모니터가 2 이상을 사용하는 추세이므로(HDMI까지 하면 노트북에서도 3개까지 가능합니다.) 멀티 모니터의 지원입니다. 사실 멀티 모니터는 개발자들에게 매우 많은 도움이 것이라는 것은 믿어 의심치 않습니다. ^^. 그럼. 현대적인 개발환경에서 첫번재 시작화면을 이야기를 하겠습니다.

 

시작 화면은 이미 변경 가능하다는 것으로, 일단 부분은 다른 블로그에서 소개 했습니다. 시작 페이지의 변경이 없으면 화면에서 왼쪽은 새로운 프로젝트와 시스템 연결선택 메뉴가 있고 바로 밑에 Recent Projects 메뉴가 있습니다. 사실 메뉴는 프로젝트 목록을 불러오는 것인데, 개발자에 따라 사용도 하고 그렇지 않은 경우도 있습니다.(사실 느린 시스템이나 인터넷이 연결 안된 상황에서는 시작페이지를 뛰우지 않습니다 . 가끔 그런상황이 있죠?? ㅎㅎ ) Recent Projects에서 해당 프로젝트의 목록을 이제부터는 Pin 형식으로 고정 사라지게 있다는 것입니다.

 

 

 

  여기서 보시면 제가 빨간색으로 체크한 부분입니다. 부분이 추가됐구요..

 

 

이제 위의 화면은 바로 두번째 메뉴입니다. 바로 해당하는 폴더를 바로 열어 있습니다.(사실 TFS 연결시 실제 폴더를 찾기 위해 소스제어에서 폴더 위치를 가끔 확인하곤 합니다 ^.^ 역시 바부팅 .) 그리고 하나씩 삭제도 가능하죠. ^^ 다음이 바로 밑에 있는 두개의 체크 박스입니다.


 

부분은 시작페이지의 표시 여부와 프로젝트 로드 시에 작업을 체크하는 것입니다. 이것은 그냥 Pass VS 2008에도 있었던 것이므로, 그렇지만. 여기서는 시작페이지에 표시되었다는 것이 조금 다르지요 옛날에는 메뉴에서 환경 설정에서 변경 했는데 편하게 변경되었습니다. 그것이 조금 눈에 들어오고, PDC PPT에서는 첫번째 체크 항목에 대하여 나왔는데 바로 프로젝트를 로드하고 페이지를 닫을 것인지에 대한 체크입니다.

 

다음이 뉴스 부분입니다. 부분은 조금 쉽게 변경되었다고 있습니다. Microsoft 에서 동안 너무 일방적인(?) 부분으로 개발관련 자료는 웹이나 로컬에 MSDN 설치해서 봐야하고 특정 목차가 초급자가 쉽게 접근할 없었습니다. 그런데 ~ 처음에는 Welcome 으로 초급자에게 쉽게 VS 사용법을 접근할 있도록 표시두었다는 것입니다. 전에는? 최신정보도 좋았지만 초급자가 원하는 정보는 찾기가 힘들었다는 것입니다. 그렇다면 고급자는 뉴스 메뉴에 Guidance and Resources 선택하면 조금 고급으로 넘어갑니다.

 

정리하면,  초급자에게 접근하기 좋은 화면 Get Started

              중급자 이상이 보기에 좋은 화면 Guidance and Resources

 

 

 

 

 이렇게 정리할 있습니다.

물론 RSS feed 수저할 있거나 URL 변경, 최신정보로 가져올 있습니다. 변경은 Latest News 에서 수정 또는 갱신이 가능합니다.


 

이제 다음으로 넘어가서 초기 기본으로 제공하는 시작화면에 대하여는 여기서 끝입니다. ^^

그럼 이제 프로젝트 부분인데 이것은 다음에 다시.^^ 글을 씁니다.


nullptr

C++0x 2010. 1. 28. 09:00 Posted by 알 수 없는 사용자

오랜만에 팀 블로그에 C++0x 관련 글을 올립니다.

이미 알고 계시겠지만 Visual Stuido 2010 Beta2에 새로운 C++0x 기능이 추가 되었습니다.

추가된 것은 nullptr 이라는 키워드 입니다.

nullptr C++0x에서 추가된 키워드로 널 포인터(Null Pointer)를 나타냅니다.

 

 

null_ptr이 필요한 이유

 

C++03까지는 널 포인터를 나타내기 위해서는 NULL 매크로나 상수 0을 사용하였습니다.

그러나 NULL 매크로나 상수 0을 사용하여 함수에 인자로 넘기는 경우 int 타입으로 추론되어 버리는 문제가 발생 합니다.

 

< List 1 >

#include <iostream>

 

using namespace std;

 

void func( int a )

{

cout << "func - int " << endl;

}

 

void func( double *p )

{

cout << "func - double * " << endl;

}

 

int main()

{

func( static_cast<double*>(0) );

                 

func( 0 );

  func( NULL );

                 

getchar();

return 0;

}

 

< 결과 >

 


첫 번째 func 호출에서는 double* 로 캐스팅을 해서 의도하는 func이 호출 되었습니다. 그러나 두 번째와 세 번째 func 호출의 경우 func( doube* p ) 함수에 널 포인터로 파라미터로 넘기려고 했는데 의도하지 않게 컴파일러는 int로 추론하여 func( int a )가 호출 되었습니다.

 

바로 이와 같은 문제를 해결하기 위해서 nullptr 이라는 키워드가 생겼습니다.

 

 

 

nullptr 구현안

 

C++0x에서 nullptr의 드래프트 문서를 보면 nullptr은 아래와 같은 형태로 구현 되어 있습니다.

 

const class {

public:

    template <class T>

    operator T*() const

    {

        return 0;

    }

 

    template <class C, class T>

    operator T C::*() const

    {

        return 0;

    }

 

private:

    void operator&() const;

 

} nullptr = {};

 

 

 

nullptr 사용 방법

 

사용방법은 너무 너무 간단합니다. ^^

그냥 예전에 널 포인터로 0 이나 NULL을 사용하던 것을 그대로 대처하면 됩니다.

 

char* p = nullptr;

 

<List1>에서 널 포인트를 파라미터로 넘겨서 func( double* p )가 호출하게 하기 위해서는

func( nullptr );

로 호출하면 됩니다.

 



nullptr의 올바른 사용과 틀린 사용 예

 

 

올바른 사용

char* ch = nullptr; // ch에 널 포인터 대입.

sizeof( nullptr ); // 사용 할 수 있습니다. 참고로 크기는 4 입니다.

typeid( nullptr ); // 사용할 수 있습니다.

throw nullptr; // 사용할 수 있습니다.

 

 

틀린 사용

int n = nullptr; // int에는 숫자만 대입가능한데 nullptr은 클래스이므로 안됩니다.

 

Int n2 = 0

if( n2 == nullptr ); // 에러

 

if( nullptr ); // 에러

 

if( nullptr == 0 ); // 에러

 

nullptr = 0; // 에러

 

nullptr + 2; // 에러

 

 

 

nullptr 너무 간단하죠? ^^

VC++ 10에서는 예전처럼 널 포인터를 나타내기 위해서 0 이나 NULL 매크로를 사용하지 말고 꼭 nullptr을 사용하여 함수나 템플릿에서 널 포인터 추론이 올바르게 되어 C++을 더 효율적으로 사용하기 바랍니다.^^

 

 

 

짜투리 이야기...... ^^


왜 nullptr 이라고 이름을 지었을까?

nullptr을 만들 때 기존의 라이브러리들과 이름 충돌을 최대한 피하기 위해서 구글로 검색을 해보니 nullptr로 검색 결과가 나오는 것이 별로 없어서 nullptr로 했다고 합니다.

제안자 중 한 명인 Herb Sutter은 현재 Microsoft에서 근무하고 있는데 그래서인지 C++/CLI에서는 이미 nullptr 키워드를 지원하고 있습니다.

 

 

C++0x 이야기

근래에 Boost 라이브러리의 thread 라이브러리가 C++0x에 채택 되었다고 합니다. Boost에 있는 많은 라이브러리가 C++0x에 채택되고 있으므로 컴파일러에서 아직 지원하지 않는 C++0x의 기능을 먼저 사용해 보고 싶다면 꼭 Boost 라이브러리를 사용해 보기 바랍니다.

 


 

참고

http://d.hatena.ne.jp/faith_and_brave/20071002/1191322319

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf

http://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms/nullptr

http://d.hatena.ne.jp/KZR/20080328/p1