블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 
 
요즘 모바일 디자인 & 개발 이라는 책을 읽고 있습니다.
얼마전에 서점에 가보니 깔린 책들이 몽땅 아이폰이나 안드로이드 개발이야기 더군요. 그만큼 요즘 모바일이 많이 관심 받고 있다는 이야기인데. 블로그에도 포스팅 했지만 WP7도 테스트 해보고 안드로이드도 테스트해봤습니다. 아이폰은 사실 개발 환경 설정의 귀차니즘으로 코드만 본정도? 입니다.

제 직업이 아키텍트이기 때문에 주로 전체적인 시스템 설계를 담당합니다. 아키텍쳐링에서 가장 중요한것은 기술의 특성을 이해하고 비지니스 요구 사항을 이해해서 중간의 GAP을 없애고 시너지를 낼 수 있게 하는 것이 가장 중요합니다.

사실 모바일 개발이야, 플랫폼적인 특성과 언어적인 특성을 빼면 개발 자체에 대한 내용은 크게 차이가 없습니다. (물론 개발 테크닉, 개발환경, Learning Curve등의 차이는 존재합니다.) 중요한 것은 모바일 생태계와 비지니스 시나리오를 이해하고 접근 방식을 결정하는 것입니다.
그리고 모바일의 특성상 통신사나 통신망 기술과 밀접하게 연관이 되기 때문에 이에 대한 이해와 모바일이라는 다른 사용자 시나리오 (공간과 시간의 제약에서 벗어나는)를 위해서 UI 그리고 여러 센서들을 어떻게 사용할지와 같은 다른 방식의 접근이 필요합니다. 이야기가 길었습니다만, 모바일 프로그래밍이 아니라, 모바일 자체를 이해하는게 더 중요하다는 것입니다.
그런면에서 이 책은 상당히 이런 기반 지식을 쌓을 수 있게 잘 쓰여져 있는 것 같습니다.
모바일 플랫폼의 소개에서 부터 시작해서 핵심 기술에 대한 소개,디자인,테스트등등 모바일쪽에 관련이 되는 사람(개발자가 아니더라도) 한번 꼭 추천하고 싶은 책입니다.

저작자 표시
신고

어제 10시30분에 Windows Phone 7 키노트 행사가 있었습니다.
행사 내용이나 WP7 Feature들은 이미 인터넷에서 떠돌고 있는 동영상들을 다 보고, WP7 개발환경으로 테스트를 해봤기 때문에 색다르지는 않았습니다.

단 AT&T의 전략이나, 어제 공개된 9가지의 폰등은 참으로 흥미로웠습니다. 트위터에서의 반응도 재미있었구요. 정리를 해보겠습니다.

1. AT&T의 서비스 발표
AT&T는 삼성,HTC,LG 3개의 폰으로 서비스를 발표했습니다.
재미있는 것은 AT&T가 WP7과 아울러서 AT&T의 IP TV서비스인 U-verse와 연동 서비스를 제공한다는 겁니다. TV 플랫폼 시장은 이미 애플이나 구글 TV등의 이슈로 떠들석합니다. 그런데 MS는 조용했을까요? 아닙니다. 사실 IP TV 플랫폼의 전세계 실제 마켓쉐어 1위가 Microsoft입니다. MediaRoom이라는 이름의 IP TV솔루션을 제공하고 있고, 현재 Media Room 2.0을 발표해서 몇몇 업체가 적용에 들어갔습니다. 이 MR2.0은 3스크린 전략을 지원합니다. TV,X-BOX,PC,핸드폰을 모두 지원합니다. 집에 STB가 한대만 있다면 STB에 영화를 녹화해놨다가 X-BOX나 핸드폰에서도 플레이해서 볼 수 도 있고, 제가 영화를 보다가 와이프가 드라마를 볼려고 하면, 핸드폰을 조용히 들고 방으로 들어가서 아까 보던 부분부터 다시 볼 수 있습니다.

AT&T는 이 MR 솔루션의 가장 큰 고객입니다. WP7만을 발표한것이 아니라 TV,X-BOX,PC,핸드폰 을 통합한 멀티 스크린 서비스를 제공한다는 메세지가 나름 시장에 임팩트가 있을겁니다.

2. 9종의 핸드셋 발표

어제 9종의 핸드셋이 발표되었습니다. HTC가 상당히 많은 모델을 가지고 나왔더군요.
LG의 경우 음성 기반의 명령 인터페이스나, PC나 다른 디바인스와 연계할 수 있는 DLNA등의 피쳐가 흥미로웠습니다. DELL 은 윗쪽으로 슬라이딩이 열리는 QWERTY 키보드를 탑재한 모델입니다. 그에 비해 삼성은 수퍼 아몰레드 이외에 특별한 피쳐는 없었던것 같습니다 .아니면 제가 놓쳤던가요. 기대를 모았단 HTC의 슈베르트는 예전 Leaked된 디자인에 비해서 한층 떨어저 보입니다. 사실.. 아직 ASUS등의 모델이 공식 발표되지 않았으니 더 많은 모델이 나오기를 기대해 봅니다.
사실 아이폰 4에 비해서 디자인은 기대에 부흥하지 못했던것 같습니다.

3. 대박 키보드 입력


키보드 입력 시연하는데.. 대박이더군요.. WP7 리뷰 나올때 마다 키보드가 놀랍다고 하던데.. 어제 보고 알았습니다. 왜 그렇게들 이야기 하는지. 아마 자동 완성 기능 때문인것 같던데.. 키보드 입력 속도가 PC에서 키보드 치는 수준으로 나옵니다.
이건 스마트 폰에서 새로운 사용자 시나리오를 만들어낼 수 있음을 암시하는데, 스마트폰 사용자분들은 아시겠지만, 장문의 글을 쓰기 어렵습니다. 그래서 트위터 같은 단문 메세지가 유행인것이고, 장문의 이메일을 쓰거나 블로그 포스팅은 스마트폰에 맞지 않는 시나리오 였습니다만, 이런 입력 환경이면 블로그나 기타 장문글을 이용한 새로운 사용자 경험이 제공되지 않을까 싶습니다.
다른 키보드 입력 영상을 첨부해봅니다. 어제 시연에서는 이것보다 더 빨리 치던데.. 이 영상에서 키보드 치시는 분들은 약간 느리군요. 대한민국 여학생(?)이 데모로 나갔으면 분당 500 타는 보여줬을텐데요.

4. 발표 국가
60개 서비스 사업자가 30개 국가에 걸쳐서 서비스를 제공한답니다. 아직 1차인데, 한국등은 포함되어 있지 않아서 매우매우 아쉽습니다.

5. 일관된 인터페이스
eBay 애플리케이션으로 어제 시연을 했었는데, UI가 일관됩니다 .어느 App이건 Zune 스타일의 UI를 사용하기 때문에 사용하기 매우 편리하고 Learning Curve가 작다는 장점이 있습니다.
어제 시연 영상을 보니, 아이폰이나 안드로이드에 비해서 메뉴 이동 느낌이 쾌적하고, 원하는 메뉴를 찾아가는데 까지 시간이 덜 걸리는 듯한 느낌이 들었습니다.

단, 이 일관된 인터페이스는 양날의 검이 될 수 있는데, "일관"이란 반대로 "다양성"을 제재한다는 이야기가 됩니다. 요즘 처럼 UI가 중요한 시대에 애플리케이션들이 다양한 사용자 인터페이스를 제공해줄 수 있는지 우려되는 부분입니다.

6. Zune 연동 그리고 Netffix 등
Zune은 잘 아시겠지만 MS의 멀티미디어 플레이어입니다. Itune와 비슷하게 영상이나 음악에 대한 Market Place 모델을 제공하고 있고, 어느정도 생태계가 성숙되어 있는 모델입니다. 이 Zune 컨텐츠들이 그대로 WP7에 들어옵니다. 아마 멀티미디어 컨텐츠 수급은 문제가 없겠네요. 어제 키노트에는 언급이 되지 않았지만 Netffix와 같은 서비스도 제공이 되는 것으로 알고 있습니다.

7. 게임 환경

게임 환경역시 아마 WP7의 큰 무기중 하나일겁니다. X-BOX Live와 연동이 되서 하나의 ID로 X-BOX 게임기의 게임과 연동이 되고, 다른 사용자와 플레이도 가능합니다.
무엇보다 XNA라는 게임 개발 플랫폼을 가지고 있는데, 말 그대로 전용 게임 개발 플랫폼입니다. 게임 개발을 위한 3차원 그래픽 엔진, 충돌처리, 스프라이트 처리, 이펙터들이 이미 Pre Built in 되어 있습니다. 다른 스마트폰에서 개발 생산성 차이가 많이 날 것 같습니다.
아울러 XNA 개발환경은 같은 게임을 하나의 소스로 개발하더라도 컴파일 타겟만 바꾸면 같은 게임이 X-BOX 360이나 데스크탑에서도 실행될 수 있습니다.
이는 개발자들에게 하나의 소스로 여러개의 시장을 동시에 노릴 수 있는 기회를 제공해주고 이는 바로 수익으로 연결이 됩니다.

어제는 SIMS3를 데모하더군요. 얼마전에도 발표되었지만 메이져 게임 개발사들이 이미 따끈한 WP7 게임 60개를 만들어 놓고 대기중입니다.
가끔 WP7 데모를 보면 게임기 같다는 느낌도 듭니다.

8. 엔터프라이즈 지원
다음으로는 엔터프라이즈 지원 환경입니다.
기업용 스마트 폰으로 성공한 플랫폼은 블랙베리가 대표적입니다. 블랙베리의 성공요인은 QWERTY 키보드도 있겠지만, 강력한 푸쉬 기능과 기업의 인프라 스트럭쳐와의 통합 능력에 있습니다. 블랙베리 엔터프라이즈용 플랫폼인 서버를 이용해서 Lotus Notes나 MS Exchange등과 연동이 잘되었던게 큰 성공요인중 하나였습니다.

MS는 기본적으로 MS Exchange와는 당연히 연동이 될 뿐더러 Active Directory와 같은 인프라 스트럭쳐 솔루션과의 연동, MS Office,Share Point, BI등의 MS 기업용 솔루션과 데스크탑 솔루션과의 자연스러운 연계를 통해서 엔터프라이즈 시장에 만만하지 않은 저력을 가지고 등장했습니다.

애플이 공식적인 엔터프라이즈 적용 플랫폼이나 제품이 없고, 구글은 구글 앱스와 GMAIL을 내세우는 반면, MS는 기업내 시스템과 좀더 정교한 연동이 가능한 시나리오를 준비했다는 것이 기업 시장에서의 가능성을 밝게 해주는 부분입니다.

9. 타일 그리고 SNS
타일 기반의 UI나 타일에서 SNS 등의 정보를 실시간으로 타일에 표시해주는 기능은 워낙 많이 언급되어 왔던것이기 때문에 패스

10. 개발 환경
개발환경이 이번에 구체적으로 언급되지는 않았는데, 제가 직접 SDK를 받아서 테스트 해본 결과로는 상당히 만족스럽습니다. 자바 개발 백그라운드를 가지고 있지만 2~3일이면 충분히 개발환경에 적응이 가능합니다. 예전 이클립스 기반의 안드로이드 UI 개발환경과 비교하면 이건 생산성 차이가 엄청 나겠네요.  개발 환경이나 언어에 대해서 자세히 알고 싶으면 아래 링크를 참고해보세요. 간략 리뷰가 있습니다.

http://bcho.tistory.com/category/프로그래밍/Windows%20Phone7

11. 마켓 플레이스
이미 Zune 마켓을 운영하면서의 노하우와 쌓여온 컨텐츠, 그리고 오픈전에 약 2,000여개의 앱들이 준비중이고, 안드로이드 마켓의 실패와 애플마켓의 성공 사례를 레퍼런스해서 나름 잘 해놨을것이라고 기대해봅니다.

12. Copy & Paste
Copy & Paste는 2011년에 지원 예정이랍니다.

개인적인 의견들
윈폰7 자체만으로 보면 상당히 만족 스럽습니다.
그러나 곧 안드로이드 3.0이 탑재된 폰들이 출시될것이고, 내년에 아이폰5가 출시될것이라는 이야기를 봐서, 윈폰7은 현재 아이폰4나 안드로이드 2.X대가 아니라는 겁니다. 시기적으로 좀 많이 늦었져.  곧 업그레이드 버전이 나오기를 기대합니다.
가트너나 IDC에서 윈폰7에 대해서 상당히 부정적인 리포트들을 쏟아놓고 있는데.. 과연 그렇게 부정적일까 의문입니다. 리포트 쓴 사람들에게 한번 물어보고 싶습니다. "아이폰,안드로이드,WP7 개발해봤어? 안해봤으면 말을 하지 말던가..."
C#,실버라이트,XNA등 이미 개발층이 두텁게 있는 MS는 WP7이 WM6.5에서 아무리 바뀌었다 하더라도, 제 사견으로는 더 많은 개발자를 끌어들일 수 있다고 봅니다. 오히려 예전보다 쉬워졌고, 저변이 넓은 기술을 택했기 때문이지요.
그리고 저 UI는 특이하긴한데, 시장에서 얼마나 먹힐련지 상당히 궁금하군요. 아마 출시후 1~2개월내에 결판이 나지 않을까 싶습니다.
그외에 테더링이 지원 안되는 점은 치명적일듯 합니다.
다른 부분은 지켜봐야겠지요.. 그나저나 저는 멋진 디자인의 WP7 이 나왔으면 합니다. 요즘은 디자인 시대지요

저작자 표시
신고

데이터 바인딩의 개념
데이터 바인딩은 UI 컨트롤과, 비즈니스 객체 (ValueObject)를 어떻게 맵핑 시켜줄것인가를 정의해주는 것이다. 이 데이터 바인딩은 윈폰7에서 새롭게 등장한 것이 아니라 윈도우의 WPF나 실버라이트의 데이터바인딩과 동일한 기술이다.
 
딱 보고 받은 느낌은 자바의 스트럿츠나 JSF에서 컨트롤에 ValueObject를 데이터를 바인딩 시키는 구조와 동일하다. (View와 Model을 논리적으로는 분리해놓고, 데이터를 연결시키는 모델) 결국은 비슷한 개념은 거기서 거기라는 것.
재미있는 특징중의 하나가 데이터 소스가 되는 ValueObject가 .NET의 CLR 객체뿐만이 아니라 XML도 가능하단다. XML을 데이터 소스로 해서 UI Control에 데이터 바인딩이 가능하다.
 


용어를 정식용어로 바꿔보면 Dependency Object는 데이터 바인딩이 되는 대상 UI 컨트롤이고, Dependency Property는 바인딩 대상의 값이다. 예를 들어 버튼의 TextBox.Value Button.Value등이 Dependency Property에 해당한다. 바인딩에 데이터를 제공하는 데이터 소스가 Binding Source이다. 그리고, 그 안에 실제 값을 저장하는 것이 Property 이다.


데이터 바인딩의 방향성
데이터 바인딩의 특징 중의 하나는 방향성을 가지고 있다. 
 

  • One Way : Binding Source에서 반영된 데이터를 UI에 반영하되 UI에서 그 내용을 바꿔도 자동으로 Binding Source에 반영 되지 않는다.
  •  Two Way : Binding Source에 데이터가 변경되면 UI에 반영되고, 반대로 UI에서 데이터를 변경하면 Binding Source에 반영된다.
  •  One way to source : UI에서 변경된 데이터가 Binding Source에 반영된다. 반대로 Binding Source의 데이터는 UI에 반영되지 않는다.

이벤트

이렇게 데이터 바인딩이 UI와 Binding Source간에 데이터를 교환해서 반영하는 개념이라면, 방향성에 맞게 언제 데이터가 변경되었는지를 인지해야 한다. One Way의 경우 Binding Source의 데이터가 바뀐 것을  UI가 인지해야 바뀐 데이터를 읽어와서 화면에 표시할 수 있고, 반대로 TwoWay의 경우 UI내의 바뀐 데이터를 언제 Binding Source에 반영해야 하는지 시점을 알아야 한다.
이를 처리하기 위한 것이 이벤트인데, UI  Binding Source는 UpdateSourceTrigger라는 Binding의 Property를 이용하여, 언제 Binding Source에 데이터를 업데이트 할지 정의한다. (예를 들어 Focus를 잃어 버렸을때나, TAB을 눌렀을 때 등)
Binding Source UI는 이전 예제 처럼 Collection(List 타입)의 경우 ObservableCollection과 같이 값이 변했을 때 UI에 이벤트를 전달해주는 클래스를 이용한다.

데이터 변환
그리고 Binding Source와 UI 간에 데이터를 바인딩할 때, 데이터의 포맷이나 타입이 틀릴 수 가 있는데. 예를 들어  TextBox.Value는 string형이고, ValueObject에서 float 타입을 저장하고자 할 때 형 변화가 필요하다. 또는 금액이라는 데이터가 KRW로 저장되어 있는데, 출력은 상황에 따라서 USD로 출력해야할 경우와 같은 경우가 된다.
이런 경우에는 Data Converter를 사용할 수 있다. Binding 과정에 데이터를 변환해주는 개념이다. 자세한 개념은 IValueConverter 인터페이스 (http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx) 를 참고하도록 한다.

Collection 형태의 데이터 핸들링 및 검색,그룹핑
그 밖에도, 앞 포스팅 예제에서도 설명한것과 같이 Collection (List)  형태의 데이터 바인딩도 지원하며, 이런 타입의 경우 조건에 따른 Filtering, Grouping도 가능하고, Master-Slave 형태의 데이터 모델도 바인딩이 가능하다.

본 포스트는 http://msdn.microsoft.com/en-us/library/ms752347.aspx 내용을 기반으로 작성되었습니다. 자세한 내용은 위의 링크를 참고하세요.

 

저작자 표시
신고


아바타 데모


XBox Live 개정에 자신의 아바타를 만들어서 맵핑 시키는 형태, 아바타 자체가 점수에 따라서 웃기도 하고, 폰의 상태(흔들기)등에 따라서 반응도 하고, 재미있는 개념인듯.

게임 데모


중간중간 보면 알겠지만, 3D 게임 퀄러티가 상당히 훌륭하다는!!
신고


지금까지 대강 윈폰7의 프로그래밍 개념에 대해서 잡아봤고, 오늘은 약간 더 실제 프로그래밍을 하는데 필요한 부분에 대해서 알아봅니다.
스마트폰 애플리케이션을 개발하는데, 가장 많이 사용되고 필수적인 컨트롤은 ListBox 컨트롤입니다. 전화번호 목록, 이메일 목록, 상품 목록등 각종 목록을 표시하는데 필수적으로 사용됩니다. 이번에는 이 ListBox 컨트롤의 사용방법에 대해서 알아보고, 아울러 상당히 중요한 데이터 바인딩 개념에 대해서 소개합니다.

 
오늘 만들어볼 예제 화면입니다. 위의 두개의 텍스트 박스가 있고, 왼쪽에는 이름을 오른쪽에는 이메일을 넣습니다. 그후에 Add 버튼을 누르면 아래 리스트에 추가되고, 아래 리스트에서 아이템을 선택한후에 Remove 버튼을 누르면 삭제되는 아주 간단한 애플리케이션입니다.
데이터 구조는 상당히 간단합니다. Contact이라는 ValueObject가 Name과 Email이라는 속성을 가지고 있고, 이 Contact이라는 ValueObject를 List형태로 저장한 것이 데이터 모델입니다.
Contact Class를 먼저 살펴보면

형태입니다. 간단합니다.
다음으로 UI를 디자인합니다.
TextBox와 Button등을 배열하고, 가장 중요한 ListBox를 추가합니다.

대충 이런식으 코드가 됩니다.
이제 ContactList를 정의할 클래스를 지정하고, ContactList를 List형태로 생성합니다.

List<Contact> contacts = new List<Contact>();

이런 식으로요. 그런데, 이런식으로 코딩을 하고 나중에 수행을 해보면, 아무리 Add나 Remove 버튼을 눌러도 화면에는 새로운 Contact이 추가되거나 삭제되지 않습니다. 왜냐? ListBox UI콘트롤과 이 contacts 변수가 바인딩되서 ListBox는 이 contacts 내부의 내용을 출력하게 되는데, ListBox 컨트롤은 contacts 변수에 값이 추가되는지 안되는지를 모르기 때문입니다. 그래서 contacts 리스트에 데이터가 추가되거나 삭제 되면 이를 ListBox 컨트롤에 알려줘야 하는데, 이렇게 List 형태에서 데이터가 추가되거나 삭제될 때 연결된 UI 컨트롤에 이벤트를 발생해서 전달해주는 클래스로 “ObservableCollection” 가 있습니다.
그래서 contacts를 생성할때는 다음과 같이 해줘야 합니다.

ObservableCollection <Contact> contacts = new ObservableCollection<Contact>();

그리고, Add 버튼이 눌렸을 때 새로운 Contact을 추가하고, Remove를 눌렀을 때 현재 선택된 List 아이템을 삭제하는 코드를 추가합니다. 추가한 MainPage.xaml.cs 내용은 다음과 같습니다.

Add 버튼 클릭에서는 단순히 contacts에 새로운 Contact 객체를 생성해서 Add해주고, Remove는 ListBox :: SelectedIndex라는 메서드를 이용해서 현재 선택되어 있는 아이템 번호를 읽어오고, 그것을 RemoveAt 메서드를 이용해서 지웁니다. 앞에 if문으로 SelectedItem이 null인지 체크하는 것은 예를 들어 현재 3개의 아이템이 있는데, 3번째것을 삭제하고 나면 선택 포커스가 그대로 3번째를 가르킵니다. 3번째를 삭제했는데도 말이지요. 그래서 만약 사용자가 선택을 1,2번째로 바꾸지 않고 그대로 Remove 버튼을 눌러서 삭제하면 Null Pointer Error가 납니다. (3번째 선택에는 아이템이 없기 때문에 삭제할 수 없기 때문에. 말로 설명이 잘 안되는데, 직접 한번 테스트 해보시기를.)
그리고 가장 중요한 것 ListBox UI 컨트롤에 어디서 데이터를 가지고 올지 알려줍니다.

contactListBox.ItemsSource = contacts;

이 말은 ListBox에 데이터를 contacts라는 List형 변수에서 가지고 오라는 이야기입니다. 이것이 데이터 바인딩인데, 이건 조금 있다 설명하기로 하고
자아 끝났습니다. 실행을 하면? 예상과 다른 결과가 나타납니다.


우리가 원하는 것은 contacts 안에 있는 Contact 객체들의 내용 즉 이름과 이메일을 보고 싶은데 생뚱 맞게, ListBoxSample.Contact 들이 목록으로 쭈욱 나옵니다. 그도 그럴것이 ListBox 컨트롤은 Contacts 형태의 리스트만을 가지고 있는 contacts라는 변수만 바인딩을 했을뿐, 실제 Contacts 안의 데이터를 어떻게 나타내야 할지를 모릅니다.
이제 ListBox에게 실제Contacts 객체를 얻어왔을 때 어떻게 데이터를 출력할지를 알려줍니다.MainPage.xml을 다음과 같이 수정합니다.

• 먼저 ListBox에 각각의 아이템을 어떻게 출력하는지를 정의하기 위해서 Template을 정의합니다. ListBox.ItemTemplate이 각각의 아이템을 어떤 형태로 출력할지를 정의하는 겁니다.
• 우리는 데이터를 contacts라는 객체에서 가지고 올것이기 때문에 DataTemplate을 정의하고, 각 하위 엘리먼트에서 contacts의 Item인 Contact 객체의 Attribute (Name,Email)을 각각의 TextBox에 추가하도록 한다.
• ListBox에서 ItemSource를 contacts를 정의했기 때문에, TextBox에서 “{Binding Name}”은 이런식으로 해석된다 DataTemplate에 의해서 contacts의 각각의 아이템이 선택되고 (Contact) 객체, 거기에 {Binding Name}에 의해서 Contact.Name 값이 뽑아지게 된다.
다시 이 개념을 정리해 보면

사실 이 포스트에서의 핵심은 ListBox와 List<> 클래스를 어떻게 바인딩하느냐가 핵심이다. 물론 ListBox 컨트롤 사용법을 알리는것도 목적이 있지만, 이 부분이 상당히 헷갈릴 수 있씁니다., (필자는 여기서 좀 헤맸습니다...) 그래서 다음 포스팅에서는 데이터 바인딩의 개념에 대해서 조금 더 자세하게 설명해보도록 하겠습니다.

참고 : 소스 코드

저작자 표시
신고

모든 프로그래밍 언어가 그렇듯이 데이타를 저장할 수 있는 저장소가 필요하다.
보통 파일이나 DBMS가 가장 통상적인 방법인데
안타깝게도....!! 윈폰7에서는 Embedded DBMS를 지원안한다. WM6.5까지는 기본 내장이었는데.. 윈폰7에서는 빠졌다. 이유인 즉슨.. 클라우드를 쓰라는 것. SQL Azure 클라우드도 있으니 사용해도 되긴 하는데.. 그래도.. 로컬 구동 앱에서는 DBMS가 편한건 사실이다.. (오픈소스로 제공되는 DBMS가 있으니 나중에 한번 소개해보기로 하고)

윈폰7의 Persistance 저장구조는 파일 시스템이다.
디렉토리를 생성하고, 각 디렉토리에 파일을 저장하는 방식이다.

그리고 또 하나가 Local Setting이라는 것이 있는데, 이건, 간단하게 말하면 애플리케이션의 Config(설정 정보)를 저장하는 공간으로 마치 HashTable처럼 Key,Value로 이루어져 있다.

실제 코드 예제를 보면

간단하다. 디렉토리 만들고, StreamWrite 이용해서 파일 열고, WriteLine으로 쓰고 Close로 닫는다.
자바나 닷넷 코드와 크게 다르지 않다.

아!! 여기서 하나 꼭 기억해야 할것. 이 파일들은 해당 애플리케이션에서만 사용이 가능하다. Isolated 라고 하는 속성인데, 보안적인 문제로 다른 애플리케이션이 함부로 파일을 교차해서 접근할 수 없도록 막는다.
여기에 더해서 애플리케이션별로 Quota (허용 용량) 제한이 없다.
저작자 표시
신고

요즘 스마트폰은 기본 요소가 GPS 기반의 위치 정보를 제공함으로써, LBS (Location Based Service)를 제공하게 하는건데, 당근 윈폰7도 API를 제공한다. 그런데 약간 특이한데, 일단 한번 살펴보자


GPS뿐만 아니라, cellphone과 radio를 지원

GeoCoordinateWatcher watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Low);

위치 정보를 가지고 오는 Class는 위와 같다. GeoGoodinateWatcher를 사용하는데, 재미있는것중 하나가 안에 생성자에 들어가는 GeoPostionAccuracy.Low와 High라는 값이다.
윈폰7의 기기 요건은 GPS 필수 장착과 라디오 필수 장착 요건이 있다.
GPS를 이용한 위치 추적은 정확도는 높으나 기본적으로 배터리 소모가 높다. 반대로 전화 기지국을 통한 위치 추적이나, 라디오를 이용한(이건 원리를 아직 잘 모르겠는데.) 위치 추적은 정확도는 낮지만 전력 소모량이 낮다.
윈폰7에서는 이걸 용도에 맞게 선택해준다는 말씀, Low로 설정하면 라디오나 기지국 기반의 위치 추적을, High는 GPS기반의 위치 추적을 이용한다.

이동시에 위치 변화 감지 방법
윈도우 플랫폼 답게 현재 위치가 변하는 것에 대해서는 이벤트를 발생 시켜서 이벤트 핸들러에서 처리하게 한다. 이때, 위치가 변하는 기준(즉 원래 위치에서 얼마나 움직였을때 위치가 변화한것으로 판단하냐)를 MovementThreadHold로 설정할 수 있다.

위의 예제는 20m로 설정한 예이다.
실제 개발자 가이드에서도 보면 MovementThreshold를 20m 이상으로 설정하게 되어 있다. GPS 자체가 노이즈에 민감하게 반응하고, 더군다나 외장 GPS 안테나를 가지고 있지 않기 때문에, 20m 가 적정값이라는 거다.. (3~4m 내외로 정확하면 좋겠다는 아쉬움이)
 

위치가 바뀌었을때, 이벤트를 받아서 처리하는 함수는 위와 같이 PostionChanged에 EventHandler를 지정해주면 된다. StatusChanged 이벤트는 GPS의 상태가 바뀌었을때, 예를 들어 수신 불능 상태, 수신 가능 상태, 준비중 등 일때 사용할 수 있다.

아마다 MovementThreshold의 값은 하드웨어 제조사의 GPS 감도에 따라서 차이가 있을 수 있을것 같고, 사실 흥미로운 것은 GPS가 불가능한 지역이나 날씨에서도 기지국이나 특히 라디오를 이용해서 위치 정보를 추적할 수 있다는 것이다.




저작자 표시
신고

앞서 주로 사용자 관점의 차별점에 대해서 설명했는데, 이제 개발자 관점에서 살펴보도록 하자.

넓은 개발자 계층과, 편리한 개발 인프라

삼성 전자가 얼마전에 ‘bada’라는 이름의 모바일 플랫폼을 발표하였다. 필자가 얻은 정보에 따르면 속도도 빠르고, 기기도 좋다. 근데 문제는? 개발자 인프라가 없다. 한마디로 아직 인기가 없는 플랫폼이고, 개발에 필요한 API나, 튜토리얼, 커뮤니티등의 생태계가 생성되지 않아서 개발을 하기가 쉽지 않다.

윈폰7의 개발 인프라는 SilverLight와 .NET 그리고 XNA에 기반을 가지고 있다. 이 기술들은 윈폰7을 위해서 새롭게 개발된 기술이 아니다. 이미 윈도우 프로그래밍에 사용되고 있는 기술이다. 바꿔 말하면, 윈도우 프로그래머는 손쉽게 윈폰7개발에 참여할 수 있다는 말이고, 관련 커뮤니티들도 활성화 되어 있다. C#과 비주얼 베이직과 같은 익숙한 개발 언어를 비주얼 스튜디오라는 익숙한 개발환경에서, 개발하면 된다. 스마트폰 애플리케이션 개발에 있어서 진입 장벽이 높은 것이 쉽지 않은 일인데, MS는 이 부분에 상당히 공을 들인 듯 싶다. 안드로이드가 개발자 층이 넓은 자바를 통해서 급속하게 개발 생태계를 확보했듯이, MS는 .NET이라는 개발자층이 넓은 플랫폼 + 비주얼 스튜디오등의 안드로이드 보다 훨씬 강력한 개발환경으로 개발자층을 지원할 예정이다. 안드로이드 개발자 분들은 아시겠지만, 개발환경은 이클립스다. 이클립스는 자바 개발환경으로 참 좋은 환경이지만, 단하나 문제는 UI쪽의 레이아웃 디자인 하는 도구가 조악하다. 당연히 개발 편이성도 떨어지고 난이도도 올라간다.


<그림. 이클립스 기반의 안드로이드 UI 디자인 도구 >

근 20년간 비주얼 스튜디오라는 개발툴을 계속해서 개발하고 판매했던 MS의 관록이 느껴지는 부분이라고나 할까?


<그림. 비주얼 스튜디오 기반의 UI 디자인 환경>

클라우드 서비스

스마트폰 애플리케이션이 좀 더 나은 서비스를 하기 위해서는 백엔드에 서버가 필요하다, 일반적인 스마트폰 애플리케이션들은 인터넷 서비스 업체 (트위터,구글,페이스북등)가 제공하는 공개 API (OPEN API)를 사용한다. 그런데 좀 더 특화된 서비스를 하고 싶다면?
별도의 서버가 필요하다. 사용자의 정보를 저장하고, 서버에서 여러 트렌젝션을 처리하고, 사용자간의 정보를 처리하기 위한 서버..!! 이런 서버를 개인이 보유하기는 비용적으로 쉽지 않다.  0.99$ 짜리 애플리케이션을 만드는 개발자가 몇백만원짜리 서버를 구입하고 데이터 센터에 호스팅을 하는 것은 쉽지 않다. 더군다나 전세계를 대상으로 서비스를 할려면 속도나 법적 문제 때문에 세계 여러곳에 서비스를 설치 해야 하는데, 이건 개인이 아니라 기업도 쉽지 않은 일 이다.
이런 문제를 해결하는 방법중 하나는 클라우드 서비스를 사용하는 것이다. 클라우드 상에 서버를 임대하거나 저장 공간을 임대해서 사용하고 (Iaas – Infra as a service). 또는 OPEN API플랫폼을 구축하거나 기 구축된 것을 사용하는 것 (Paas – Platform as a service)등이 좋은 예이다.
애플의 경우 일반 사용자에게 제공하기 위한 Public 클라우드는 가지고 있지 않다. 그래서 애플리케이션들은 모두 일반 OPEN API를 사용하거나, 개개인 별로 호스팅 되는 서버를 통해서 서비스를 제공한다.
구글의 경우 클라우드 플랫폼을 제공한다. 그런데 이것이 쌩뚱맞게 Python 언어 기반이다. 근래에들어서 Java도 지원하긴 하지만, 자세히 들여다 보면 제약 사항이 많다. DB서비스나 Storage서비스도 없거나 제약 사항이 있다.


여기에 또 윈폰7의 가능성이 나오는데, MS는 메이져 클라우드 플레이어중 하나이다. CRM,MS Exchanage, SharePoint와 같은 애플리케이션 서비스를 제공하는 Saas. AppFabric과 같은 SOA 를 지원하는 프레임웍,MS-SQL서비스등과 같은 Paas 그리고 Windows Server 가상화,Storage 서비스등을 지원하는 Iaas등 클라우드의 3계층 Saas-Paas-Iaas를 모두 제공한다.  물론 다른 스마트폰 플래폼들도 이 클라우드를 쓸 수 있다. 그러나 MS의 클라우드 기술은 기본적으로 .NET 개발 환경 기반으로 되어 있고, 윈폰7역시 .NET 기반이다. 즉 아주 Smooth한 연동이 가능하다는 것이다.


 윈폰7은 단순하게 디바이스에 탑재되는 플랫폼만이 아니라 MS의 클라우드 전략과 연동해서 클라우드 서버와 연동해서 서비스를 제공할 수 있는 모델을 지원한다.

엔터프라이즈 솔루션

일반 사용자 입장이 아닌 기업 사용자의 관점에서 스마트폰 플랫폼을 보면 기업의 업무 시스템과의 연동성이 매우 중요하다. MS는 오피스,MS Exchange 서버, 계정 및 자산 관리 도구인 Active Directory 그리고 Windows Server를 기반으로 구성되는 CRM (Dynamics)등의 여러 엔터프라이즈 솔루션을 가지고 있고, 이런 솔루션들이 자연스럽게 윈폰7과 연동될 수 있는 인프라를 제공하고 있다. 기존의 아이폰이나 안드로이드는 이런 인프라가 없기 때문에 일일이 개발을 해야 하거나 써드 파티 제품을 써야 하기 때문에 기업 애플리케이션 통합이 쉽지 않다. RIM의 블랙베리 같은 경우 오랜 역사를 가지고 있고, Lotus Notes나, MS Exchange와 좋은 통합성을 가지고 있기 때문에 기업 시장에서 좋은 우위를 점유할 수 있었던 것이었는데, 이번 윈폰7이 이러한 장점 역시 같이 커버 함으로써 엔터프라이즈 모바일 스마트폰 시장에서도  높은 가능성을 보여 줄 수 있을 것이라 기대한다.

저작자 표시
신고


윈도우즈폰7 은 마이크로소프트가 스마트폰 경쟁에서 살아남기 위해서 야심차게 준비한 플랫폼이다. 2002년도만 해도, 전세계 스마트폰 플랫폼의 15%이상을 점유하면서 스마트폰 OS 시장의 1위를 차지하던 마이크로소프트가 심비안,애플의 아이폰과 구글의 안드로이드플랫폼에 밀려,  그 시장 점유율은 계속해서 하락하고 있다.
이런 상황에서 모바일 시장을 재 장악하기 위해서 기존 Windows Mobile 이라는 이름을 버리고 Windows Phone 7이라는 이름으로 새로운 OS를 준비하고 있다. 단순히 이름만 바뀌는 것이 아니라, 기존 Windows Mobile과의 호환성을 모두 포기하고, 새로운 인터페이스로 무장한 완전히 새로운 플랫폼을 내놓는 것이다.
시장 상황으로 보면 이미 안드로이드와 아이폰이 시장을 나눠 가지고 있는 상황에서 늦은감이 있다. (사실 이게 제일 아쉽다. 1년만 더 빨리 출시하지… ) 그러나, MS의 Windows Phone 7이 이 게임 판을 뒤집을 수 있는 몇가지 무기를 가지고 있는데, 이에 대해서 살펴보고자 한다.

윈도우폰 7의 태생적인 강점은 MS라는 기업과 늦은 시작이라는데 있다.
MS는 대형 IT 업체 중에서 벤더와 서비스 성격을 모두 가지고 있는 업체이다. 오라클이나 IBM과 같이 기업 중심의 엔터프라이즈 제품 (MS-SQL,TP Monitor,CRM과 같은 백엔드에서 Exchange,WinServer,Active Directory같은 인프라 스트럭쳐 솔루션)에서부터 애플과 같이 윈도우,X-BOX에 이르는 End Client 시장, 그리고 MSN,Windows Live와 같이 구글과 같은 서비스  솔루션을 가지고 있는 IT에 대해 Full Coverage를 제공하는 IT 업체이다.
시장 진입이 늦었다는 것은, 이미 애플과 구글이 스마트폰 시장에서 했던 실수를 하지 않을 수 있다는 이야기다. (Windows Phone 7 스펙을 보더라도 알 수 있다. 차차 설명하겠지만)
그럼 이 두 가지 장점이 구체적으로 어떻게 Windows Phone7의  포텐셜로 연결되는지 설명한다.

 

디바이스의 표준화
아이폰의 성공 요인과, 안드로이드의 문제점은 무엇일까? 표준화된 디바이스에 있다. 아이폰은 단 하나의 화면 해상도와 동일한 CPU 성능, 동일한 인터페이스를 제공한다. 그래서 개발된 애플리케이션은 하나의 환경에서 테스트 되고, 빨리 시장에 진입할 수 가 있다. 반면에 안드로이드는? 안드로이드는 공개 플랫폼이기 때문에, 디바이스의 스펙은 물론 OS 자체까지 뜯어 고칠 수 있다. 그래서 디바이스의 CPU 나 화면 해상도, 프로그래밍 인터페이스들이 제각각이다. 그래서, 제작된 애플리케이션의 디바이스간 상호 호환성 문제들이 나타난다.
이는 개발자 입장에서는 진출할 수 있는 시장이 줄어드는 것을 의미하고, 개발의 난이도와 테스트에 소요되는 시간과 비용을 늘리게 된다.
Windows Phone 7은 이런 문제를 피하기 위해서, Windows Phone 7에 필요한 하드웨어 사양을 아예 기준화 시켜 버렸다. 특정 화면크기, CPU 성능, 버튼 배열까지. 아직 출시되지는 않아서 확언할 수 는 없지만, 적어도 안드로이드 플랫폼에서 일어나는 호환성 문제는 없을것이다. 물론 OS도 제조사가 마음대로 뜯어 고칠 수 없다.!!

멀티 스크린 전략
근래 들어서 MS의 전략은 3 스크린이라는 IT 전략을 사용하고 있다. PC-TV-MOBILE을 통합하여 서비스를 제공하겠다는 개념인데, 앞전 강의에서 언급했던, XNA기반의 게임이 PC-X BOX-WP7에서 모두 구동되는 것도, 이 3 스크린 전략의 일환이다.
 


이미 MS는 콘솔 게임 시장에서 X-BOX 360으로 소니의 플레이스테이션과 함께, 하이레벨 게임기 시장을 장악하고 있으며, 국내에는 서비스를 하고 있지 않아서 잘 모르는 사람도 많겠지만, 구글이 구글 TV,애플이 애플 TV가지고 떠들석하게 이야기 할 때, 이미 MS는 IP TV쪽에서 500만 가입자를 가지고 있는 IP TV 플랫폼의 전세계 최고 사업자이다. 다들 알고 있는 PC용 윈도우7이야 말할것도 없고, 이런 인프라를 기반으로 멀티 디바이스에 대한 서비스가 가능하다.
 MS의 IP TV솔루션인 Media Room 2.0은 이미 이런 시나리오가 반영이 되어 있는데, 예를 들어 집의 IP TV로 VOD를 서비스를 받는 사용자는 집에서 WIFI를 이용해서 VOD 컨텐츠를 폰에 저장해서 들고 다니면서 플레이를 한다거나, 스포츠 방송을 보고 있는데, 와이프가 드라마를 틀어버리면 핸드폰을 가지고 플레이하면 아까 보고 있던 스포츠 방송(녹화분이건, 생방송이건)을 연결해서 볼 수 있다.
스마트폰 플랫폼이 단순하게 모바일 영역에만 머물러 있는 것이 아니라 TV-게임기-PC-모바일을 넘나들며 크로스 서비스를 한다는 것이고, 이는 애플리케이션 개발자에게 새로운 수익 모델을 제시할 수 있고, 사용자 입장에서는 상당히 다양한 형태의 연결된 서비스 환경을 제공할 수 있다는 것이다.

SNS (Social Networking Service)
앞서도 언급했듯이, MS는 유일하게 서비스와 엔터프라이즈 제품을 동시에 제공하는 업체이다. (벤더 + 서비스 업체). MS는 MSN을 가지고 있고, Bing 검색엔진, 광고 플랫폼, Windows Live 기반의 메신져등,Zune 다양한 SNS 매체를 가지고 있다. (Facebook의 최대 주주이기도 하다) 이는 두가지 관점에서 의미를 가지는데, SNS가 보유한 컨텐츠를 손쉽게 공급할 수 있다는 장점과, 이러한 SNS 서비스와 타이트한 연결을 통해서 서비스를 제공할 수 있다는 것이다.
애플은 이러한 서비스가 없다. ITune 정도가 다인데, 그렇기 때문에 컨텐츠의 수급과 서비스 연동 방식을 전적으로 개발자에게 의존하고 있다. 안드로이드가 아이폰에 비해서 차별화 되는 것은 구글이 가지고 있는 SNS와 컨텐츠를 연동하는데 있다. 구글맵,지메일등이 대표적인데 스마트폰 플랫폼 전쟁이 장기화 됨에 따라서 누구도 서비스가 계속해서 오픈되어 있을것이라고 장담할 수 는 없다. 미워 보이는 경쟁자에게는 폐쇄 정책을 사용할 수 도 있고, (드문일이겠지만..)
이러한 기존의 MS의 서비스 플랫폼들이 자연스럽게 윈폰7에 녹아서 연결이 될 예정이고, 이는 스마트폰의 기술적인 차별성이 아니라 컨텐츠와 사용자 경험에 있어서 다른 스마트폰 플랫폼사와 하나의 차별화 포인트가 될 수 있다.

저작자 표시
신고
Learning Kit에 들어가 있는 간단한 게임(갤럭시같은..) 튜토리얼을 따라해보고 리뷰를 올립니다.
먼저 이글을 올리기전에 제 백그라운드에 대해서 소개할 필요가 있는데,
94~97년정도까지 게임 개발을 했습니다. MS-DOS상에서 인라인어셈블리와 C/C++을 이용해서 2D 게임을 만들고, Direct-X 초창기 버전과 Direct 3D등으로 게임을 만들어본 경험이 있습니다.
시절이 10년은 지났으니, 결과적으로 게임 프로그래밍에 대해서 기본 개념은 있지만, 요즘 최신 게임 프로그래밍 기법에 대해서는 정보가 부족한 상황임을 미리 이야기 해둡니다.

사실 윈폰7의 게임 개발 프레임웍쪽에는 아주 기대가 컸습니다. 게임 이라는 컨텐츠가 스마트폰의 킬러앱중의 하나이고, 특히 윈폰7에서 XNA를 기반으로 개발된 게임은 X-BOX에서도 수정없이 포팅되서 돌아갈 수 있기 때문에, 개발자 입장에서는 같은 컨텐츠로 콘솔 게임과 스마트폰 게임 시장 양쪽을 모두 공략할 수 있다는 장점을 가지고 있습니다. 그리고 타 스마트폰 플랫폼과 다르게 전용 게임 플랫폼을 제공한다는 것이 매우 흥미로웠습니다.
일전에 개발자 컨퍼런스에서 윈폰7 XNA를 이용한 3D 게임 개발 데모를 본적이 있었는데, Collision 처리 (충돌처리-두개의 개체가 충돌하였다는 것을 알려주는 처리-예를 들어 총알에 맞았다. 이런거..)가 API하나로 해결되고, 각종 3D 이펙트(먼지가 난다거나, 샤방샤방 별가루가 떨어지는 처리등)이 아주 쉽게 개발되는 것들이 아주 신기했기 때문에, 나름 기대를 하고 튜토리얼에 접했습니다. 사실 제가 게임 개발했을때는 이런건 다 날코딩으로 만들어야 했습니다. 심지어 Direct X 이전에는 애니메이션을 표현하기 위한 스프라이트 처리 엔진 조차 인라인 어셈블리로 다 만들어야 했으니까요.

아래는 예제로 따라서 만든 게임 스냅샷입니다.

따라 해보시면 아시겠지만, 상당히 간단합니다.
2D 게임이라서 그런지, 몬가 대단한것이 있을거라는 기대(?)에 몬가 대단한것은 나오지 않았습니다. (그도 그럴것이 2D 게임에 필요한 프레임웍들이 뻔하니..)

몇가지 특이한것만 집어 보겠습니다.

리소스 로딩
게임에 필요한 음성,캐릭터 이미지,백그라운드 이미지들을 로딩하고 관리해야 합니다. 보통 파일을 열어서 일일이 읽어서 메모리에 적재하고, 필요한 파일들도 배포할때, 묶어서 배포해야 하는데, 이부분이 상당히 편리합니다. 다른 스마트폰 플랫폼에서도 될것 같긴한데... 구닥다리 게임 개발자의 시야에서는 신기하더군요.
필요한 리소스들을 비주얼 스튜디오에서 레퍼런스 부분에 Import만 하면됩니다.
리소스들을 사용할때는

이렇게 Load만 해주면 됩니다.
마치 자바의 리소스 번들과 같은 느낌입니다. 배포할때는 모든 리소스들이 함께 패키징 되니까는 상당히 편리하져.

3 스크린 지원
MS의 전략중에 강력한 전략중 하나가, 3 스크린이라는 전략이 있습니다. TV-PC-모바일을 모두 지원하고, 하나의 플랫폼처럼 지원하겠다는 겁니다. VOD 서비스를 TV-PC-모바일을 통해서 각 장점을 통해서 하겠다 모.. 그런건데..
XNA기반의 게임 역시 이 전략의 연장선산에 있습니다.
위에서도 언급했듯이, XNA기반의 게임은 윈폰뿐만 아니라, X-BOX는 물론이고 PC용 윈도우에서도 작동됩니다.
이를 가능하게 하려면, XNA로 개발한 게임을 해당 타겟 플랫폼에 맞게 빌드하면됩니다.
위에 스크린샷에도 보면 알 수 있듯이 Windows와 X-Box 360용 프로젝트로 만들어서 컴파일이 됩니다.

게임 처리 프레임웍
게임 개발 플랫폼에서 당연한것이겠지만, 게임의 실행 사이클에 맞는 프레임웍을 제공합니다.
게임은 보통 하나의 화면 단위로 진행되고, 하나의 화면은 리소스 로딩후, [ 입력을 받고, 캐릭터의 위치나 충돌 처리등과 같은 계산을 하고, 계산 결과에 따라서 화면과 음성으로 출력] 하는 루프를 반복합니다. 이런 프레임웍들이 내부적으로 다 구현되어 있습니다.
예를 들어 화면 처리 패턴은
class GameplayScreen : GameScreen
이런식으로, 상위 클래스로 지정되어 있구요. :)
스프라이트 처리 패턴을 보면 다음과 같습니다.
SpriteBatch.Draw(tankTexture, player.Position, Color.White);
이런식으로요. 상당히 편리하져.
아직 전체 프레임웍을 다 본게 아니라서 모라 말하기는 어렵지만, 일단 게임 개발의 생산성을 높이고, 게임 개발 패턴을 위한 상당히 성숙된 프레임웍을 갖추고 있습니다.

다음에 시간이 되면 3D 게임쪽을 찾아서 한번 봐야 겠습니다. 3D 게임쪽에서 다른 스마트폰 플랫폼들과 차이가 많이 날것 같네요. 혹시 아이폰이나 안드로이드에서 게임쪽 프로그래밍 하신분 계시면 피드백 환영합니다.


=== 추가 ===

충돌 처리 로직
위에서도 잠깐 언급했었는데, 게임 프로그래밍에서는 충돌 처리 로직이 필요합니다.두개의 객체가 충돌했을때를 감지하는 로직인데, 위의 예제에서는 별도 API를 안쓰고, X,Y 좌표축만으로 해서 몰랐는데, 다른 예제를 보니까는 충돌 처리 API가 있네요.

        void CheckForCollision()
        {
            BoundingBox bb1 = new BoundingBox(new Vector3(spritePosition1.X - (sprite1Width / 2), spritePosition1.Y - (sprite1Height / 2), 0), new Vector3(spritePosition1.X + (sprite1Width / 2), spritePosition1.Y + (sprite1Height / 2), 0));
            BoundingBox bb2 = new BoundingBox(new Vector3(spritePosition2.X - (sprite2Width / 2), spritePosition2.Y - (sprite2Height / 2), 0), new Vector3(spritePosition2.X + (sprite2Width / 2), spritePosition2.Y + (sprite2Height / 2), 0));
            if (bb1.Intersects(bb2))
            {
                soundEffect.Play();
            }
        }

BoundingBox라는 사각형 공간을 정의하고 두 공간간에 충돌을 intersects라는 함수로 비교합니다.
잘 보시면 아시겠지만, BoundingBox를 정의하는것을 두개의 벡터로 정의합니다. 각각의 벡터는 3개의 좌표를 가지고 있습니다. X,Y,Z축 입니다. 즉!! 3D에서 충돌처리를 지원하기 위한 함수라는 것입니다. 위의 예제는 2D의 예제라서 Z축을 0으로 했네요.
 
저작자 표시
신고

앞에서 UI에 디자인까지 입혀봤고, 이번에는 윈폰7의 강력한 기능중 하나인 애니메이션 효과를 줘봅니다. 보시면 아시겠지만 진짜 간단합니다.
앞의 예제가 텍스트 박스에 글자를 넣고 클릭하면 위의 텍스트가 바뀌는 시나리오 였는데, 이번에는 클릭하면 위의 글자가 바뀌면서 뺑글 돌아가는 형태로 바꿔봅니다.

역시 디자인을 변경하는 것이기 때문에, Expression Blend 4에서 작업을 합니다.
모드를 디자인 모드에서 애니메이션 모드로 바꾸면 Objects and Timeline에 각 객체별 타임라인이 나옵니다. (마치 동영상 편집기 처럼요)

이제 애니메이션 효과를 줘봅니다. 배너 글자 컨트롤인 BannerTextBlock을 선택한후에, 레코딩 모드로 전환하고, TimeFrame을 1초로 선택한후에, x축을 -1로 세팅합니다. 다음 2초를 선택한후 x축을 다시 0으로 복구합니다.
즉 0초에는 제대로 표현하다가 1초에는 x축을 180도 회전 시키고, 2초에는 다시 0으로 세팅합니다. 이렇게 되면 0~1초 사이에 180도 돌고, 그다음 1~2초 사이에 다시 180도가 돌아서 2초동안 텍스트를 360도 돌리게 됩니다.


이렇게 지정한 애니메이션은 바로 개발툴에서 테스트 해볼 수 있습니다. 아래 처럼요.



자아 이렇게 개발이 끝난 애플리케이션을 그럼 테스트 해봅시다.



이렇게, 윈폰7 개발환경에서는 다이나믹한 애니메이션 효과를 주는게 무지 쉽습니다. 아주 간단한 예만 했지만, 애니메이션 속도, 화면 전환할때 마치 페이지 넘기는 것과 같은 효과를 이렇게 클릭 몇번만으로 자유롭게 줄 수 있습니다.

앞에 디자인 UI적용 부분과, 이번에 애니메이션 처리 부분을 봤는데, 이정도면 상당히 높은 합격점을 주고 싶습니다. 스마트폰이면 스마트폰에 알맞는 멋진 UI가 있어야겠지요.
저작자 표시
신고

윈도우즈 모바일 7의 장점 중의 하나가 아주 강력한 UI를 지원한다는 것이다. 화면 전환 애니메이션, 각 컨트롤에 대한 커스터마이징이 매우 쉽다.

앞의 글에서 설명했듯이 일반적인 화면 레이아웃이나 배치등은 Visual Studio에서 XAML을 이용하여 디자인 한다.

여기에 컨트롤에 상태에 따라서 추가로 디자인이나 애니메이션 효과를 지정할 수 있는데, 이는 개발툴킷에 들어있는 "Microsoft Expression Blend 4 Windows Phone"이라는 도구를 사용한다. 마치 RIA (Rich Internet Application)개발도구와 비슷하다.

애니메이션도 직접 테스트해볼 수 있기 때문에, 무슨 애니메이션 저작툴과 같은 느낌도 좀 들기는 하는데, 애니메이션 효과는 나중에 설명할것이기 때문에 패스...

일단 윈폰7의 디자인 개념을 설명해보면 다음 그림과 같다.

원래 레이아웃과 배치등을 했으면 거기에 디자인을 덧 붙이는 것이다.
가장 쉽게 설명할 수 있는 말은 HTML에다가 CSS를 붙이는 개념을 생각하면 된다.
Visual Studio에서 표준 컴포넌트로 배치등을 하고, Expression Blend 로 CSS와 같이 컴포넌트에 디자인을 입히는 것이다.

사용한 예제는 "ClickMe" 버튼이 Focus out되어 있으면 검정색으로 표시되다가, Focus In이 되면 글라데이션으로 칠해지고, 라운드 박스로 테두리가 그려지는 예제이다.

원래 왼쪽화면과 같은 UI에 디자인을 오른쪽과 같이 디자인을 입히는 것이다.
실제 화면 디자인 파일인 *.xaml을 보면

위의 코드는 디자인이 안적용된 코드이고 아래 코드는 디자인이 적용된 코드이다.
아래 코드를 보면 버튼 컨트롤 안에 Template="{StaticResource FancyButton}"이라고 적용된 부분이 있다. 버튼 컨트롤의 스타일을 지정하는 것이다. 그 다음에 같은 *.xaml안에 마치 HTML의 CSS를 정의하듯이 버튼의 디자인 스타일을 지정한다. (그림 아래 <ControlTemplate ... 부분 >

실제 동작되는 모습을 보면 다음과 같다.

특히나 스마트폰에서는 사용자 경험이 매우 중요하다. 버튼 모양, 애니메이션, 반응성 등등. UI 컨트롤등을 변경하고 상태에 따라서 (클릭전,후, 포커스가 갔을때와 빠졌을때) 디자인을 반영하고 하는 것은 전통적인 UI 프로그래밍 방식에서는 매우 귀찮은 일이다. 안드로이드나 아이폰에서는 이런것은 해보지는 않았는데, (되기는 하는데, 윈폰7보다 귀찮을듯, 일일이 코딩이 있을듯) 윈폰7은 전용 디자인 스튜디오를 통해서 적용할 수 있다는 것이 상당히 마음에 들고... 
 디자인 적용 구조가 HTML의 CSS 개념과 비슷해서, 전체적으로 개발 프레임웍 자체가 앞 글에서도 언급했듯이 HTML + MVC 웹프로그래밍과 유사해서 (걍 JSF 프로그래밍 하는 느낌) 기존 개발자들이 쉽게 접근할 수 있을듯 싶다.

참고:
예제는 트레이닝 키트에서 제공되는 http://www.microsoft.com/downloads/details.aspx?familyid=CA23285F-BAB8-47FA-B364-11553E076A9A&displaylang=en )
 " Exercise 2: Using Expression Blend to Design the UX of your Windows Phone "
를 사용하였다.
저작자 표시
신고
점심먹고 와서. 잠깐 Windows Phone 7에 대한 개발환경 설정하고, 그 간단한 Hello World를 테스트. 모든 언어의 개발 환경들은 대부분 간단한 애플리케이션 하나 만들어서 테스트 해보면 된다.
대충 절차랑 느낌들을 정리해보면

먼저 개발환경은 여기서 다운 받는다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=c8496c2a-54d9-4b11-9491-a1bfaf32f2e3&displaylang=en#filelist
여기서 vm_web.exe 만 다운받아서 클릭한번이면 모든 개발환경 설치 완료!!
이때 주의할점은 윈7과 비스타만 된다. XP는 안되니.. 혹시 윈폰7개발 하실분은 어여 윈7으로 갈아타시길..

설치가 끝나고 Visual Studio 2010 Express for Windows Phone 실행 시키면 대충 다음과 같은 화면이 나온다.

일단 프로그래밍 모델을 살펴보자.
화면 UI에 해당하는 부분은 MainPage.xaml 이고, C# 코드는 MainPage.cs에 들어가 있다.
웹프로그래밍의 MVC 모델과 비교하자면, HTML에 해당하는 부분이 *.xaml 그리고 비지니스 로직 (자바 클래스나, C#코드)들은 *.xaml.cs에 들어간다.

화면 디자인 부분을 보면

각각의 컨트롤(버튼)등이 XML 엘리먼트로 정의된다. HTML과 상당히 유사하다. 크기나 위치도 간격 들도, Height,Margin등의 속성으로 쉽게 지정이 가능하다. HTML 아는 사람이라면 바로 적응할듯. 안드로이드에서는 레이아웃 디자인에서 좀 불편하다 느꼈는데, 위의 디자인도 직접 XML코딩을 하는 것이 아니라 비주얼 베이직 처럼 컨트롤을 드레그앤 드롭해서 그리는 형태다

버튼에 이벤트를 추가해서 코드를 추가하는 과정을 보면

오른쪽 프로퍼티 창에 컨트롤별로 사용할 수 있는 이벤트들이 나타나고, 이벤트에 메서드를 바인딩(연결) 시키면, 코딩 창에 해당 코드가 나타난다. 무슨 이벤트가 있는지 일일이 메뉴얼 찾을 필요없이 비주얼 베이직 처럼 상당히 직관적이다.

이제 실행..
에뮬레이터에서 실행이 되고, 폰에 직접 실행할 수 도 있다. (지금은 폰이 없는 관계로 에뮬레이터 사용). 당연히 디버깅도 지원되고.

전체적인 느낌은 모바일 프로그래밍을 따로 한다는 느낌이 없다. 그냥 예전 비주얼 베이직 프로그래밍하거나 MVC기반의 웹프로그래밍 하는 느낌이다. 적어도 안드로이드나 아이폰에 비해서 동급 이상의 개발환경을 제공하는 느낌이다.

실버라이트나,XNA등 테스트 해보고 또 올리겠습니다.

여기 예제는 Trainning Kit 인스톨후에 Kit에서 제공되는 첫번째 튜토리얼을 사용했습니다. (다운로드 : http://www.microsoft.com/downloads/details.aspx?familyid=CA23285F-BAB8-47FA-B364-11553E076A9A&displaylang=en )

저작자 표시
신고

Windows Phone 7 스터디 시작.

프로그래밍/Windows Phone7 | 2010.08.06 10:11 | Posted by 조대협

사용자 삽입 이미지


다니는 회사가 회사인지라... 윈도폰7에 관심을 안가질래야 안가질 수 가 없다.
더군다나 지난 세미나에서 윈폰7의 Feature와 개발 환경에 매료된 나로써는.. 꼭 한번 발 담궈보고 싶은 부분이다.
이미 안드로이드나 아이폰쪽은 다른 개발자분들이 치고 나가셨기 때문에.. ^^;
윈폰7의 개발 환경중 매우매우 재미있는 것 두가지를 들어보면

XNA 기반의 게임 개발환경과
XNA는 게임 개발 프레임웍인데, 3D 이팩트,Collistion Detection(충돌)처리 등등 게임을 만들때 골아픈 부분들이 SDK로 이미 다 들어가 있고. 무엇보다!! XNA기반으로 개발하면 XBOX와 윈폰7 둘다에서 돌아간다... 개발자 입장에서는 폰과 X-BOX 두가지 시장을 노릴 수 있는 것이다.
사실 내 입장에서는 개발 환경의 편의성에 놀랬다. (약 10여년전, '어스토니아 스토리 시절'에 게임개발자로 시작한 경력이 있기 때문에..)

마치 플래쉬와 같은 UI 개발 환경이다.
윈폰7의 UI가 특이한것은 말하나 마나고, 안드로이드가 아이폰 UI 베낀거라면, 윈폰7은 ZUNE에서 검증된 독특한 UI를 사용한다. 거기에 화면이 페이지 처럼 넘어가는 것이나 리스트 만드는것등등 Anyway 개발 환경이 매우매우 편리하다는.. 이클립스 기반의 안드로이드 개발환경에서 헉 소리 한번 났었고.. 아이폰 개발할려고 맥 세팅 하다가 (타이거라서 안되고..) 삽질한 경험이 있는 나로써는. Visual Studio 기반으로 원빵에 간단하게 인스톨해서 개발을 시작할 수 있는 것도 매력이다.

헐.. 어젯밤에 BizTalk ESB공부하기로 해놓고.. 아침에 윈폰7을 보는 이 산만함이란... -_-;

관련 URL

http://developer.windowsphone.com/
Windows Phone 7 Development Kit : http://go.microsoft.com/?linkid=9723028

신고