Head First C# : 상상을 초월하는 객체지향 C# 학습법(개정3판)-미리보기

Page 1


헤드 퍼스트 C#(개정3판) : 상상을 초월하는 객체지향 C# 학습법 초판발행 2015년 3월 1일 지은이 앤드류 스텔만, 제니퍼 그린 / 옮긴이 최길우 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 마포구 양화로 7길 83 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 978-89-6848-165-9 93000 총괄 배용석 / 책임편집 최현우 / 기획 강은희 / 편집 강은희 디자인 표지 강은영, 조판 이경숙 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 서은옥 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려 주십시오. 잘못된 책은 구입하신 서점에서 교환해 드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr

Copyright © 2015 by HANBIT Media, Inc. Authorized Korean translation of the English edition of Head First C #, 3 rd Edition ISBN 9781449343507 © 2013 Andrew Stellman and Jennifer Greene. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. 이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다. 신 저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금합니다.

지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.


Head First C# (개정3판) 전화번호부를 외우는 것보다 더 재미있게 C#을 배울 수 있다면 정말 꿈만 같지 않을까? 꿈 속에서나 있을 수 있는 일이겠지…

앤드류 스텔만, 제니퍼 그린 지음 최길우 옮김


2007년 4월 17일에 브루클린으로 헤엄쳐 왔던 고래 슬러지를 기리며…

우리 운하에서는 하루밖에 살지 못했지만 우리 마음속에서는 영원히 살 수 있길.

4


『Head First C#』에 대한 찬사 “『Head First C#』은 초보 개발자 혹은 나처럼 자바 경험을 가진 개발자 모두에게 훌륭한 책이 다. 독자의 숙련도는 가정하지 않았지만, 초보 개발자들도 쉽고 빠르게 이해할 수 있도록 만들 었다. 이 책은 내가 첫 번째로 맡은 C# 개발 대형 프로젝트 업무를 즉시 진행할 수 있도록 도와 주었다. 이 책을 강력히 추천한다.”

- 쉘레와 오두산야, 구글 테크니컬 어카운트 매니저

“『Head First C#』은 C#을 학습하는 데 있어 뛰어나고 간단하며 재미있는 책이 될 것이다. C# 초보자를 위한 최고의 작품이다. 예제와 주제가 명확하고 간결하게 잘 쓰여 있다. 미니 게임에 있는 각양 각색의 프로그래밍 문제들은 분명히 독자들의 뇌에 잘 전달될 것이다. 실습을 하면 서 배우기 좋은 책이다!”

- 조니 할리프, Mural.ly 수석 아키텍트

“『Head First C#』은 마치 친구와 대화하는 것처럼 C#을 배울 수 있는 폭 넓은 지침서이다. 심 지어 개념이 조금 이해하기 어렵더라도 많은 코딩 문제들이 흥미를 유지할 수 있게 도와준다.” - 레베카 둔-크렌, 세마포어 솔루션 창립 파트너

“지금까지 컴퓨터 책을 처음부터 끝까지 읽어본 적이 한 번도 없었는데, 이 책은 정말 첫 페이 지부터 마지막 페이지까지 흥미진진하게 읽었다. C#을 깊이 있게, 그러면서도 재미있게 공부 하고 싶다면 단연코 이 책을 권하겠다.”

- 엔디 파커, 새내기 C# 프로그래머

“좋은 예제 없이 프로그래밍 언어를 배우는 것은 정말로 힘들다. 이 책은 좋은 예제들로 가득 채워져 있다. 『Head First C#』은 초보자들이 C#과 .NET 프레임워크를 사용하는 데 실질적인 지침으로 자리잡을 것이다.” - 크리스 버로우스, 마이크로소프트의 C# 컴파일러팀 개발자

“『Head First C#』에서 앤드류와 제니는 C#을 공부하는 데 있어서 매우 훌륭한 튜터리얼을 제공 하고 있다. 저자들은 독특한 스타일로 상세한 내용을 모두 다루면서도 독자들이 쉽게 다가갈 수 있는 책을 만들어냈다. 다른 C# 책에 실망한 독자들이라도 이 책은 분명히 마음에 들 것이다.”

- 제이 힐야드, 소프트웨어 개발자, 『C# 3.0 Cookbook』 공저자

“프로그래밍과 C#의 세계로 뛰어들려는 사람들에게 추천한다. 첫 번째 페이지부터 저자는 계 속해서 독자가 C#의 어려운 개념을 간단하고 쉽게 이해할 수 있도록 설명한다. 마지막 부분에 있는 프로젝트와 실습을 하면서 독자는 자신이 성취한 내용에 깜짝 놀랄 것이다”

- 데이비드 스털링, 마이크로소프트 비주얼 C# 컴파일러팀 개발자

5


“『Head First C#』은 머릿속에 쏙쏙 들어오는 예제와 재미있는 연습문제로 가득한, 즐겁게 공부할 수 있는 튜터리얼이다. 여기저기 손으로 적은 듯한 설명이 달린 연습문제에서 추상 클래스와 인터페이스가 설전을 벌이는 ‘난롯가 담소’에 이르기까지 독자들의 눈을 사로잡을 만한 생동감 넘치는 스타일로 꾸며져 있다. 프 로그래밍을 새로 배우는 사람에게는 더할 나위 없이 좋은 책이다.” - 조셉 알바하리, 영국 최대의 의료 소프트웨어 공급사인 에그톤 의료정보 시스템의 C# 디자인 아키텍트, 『C# 3.0 in Nutshell』 공저자

“『Head First C#』은 쉽게 읽고 이해할 수 있는 책이다. C#을 막 시작하려는 개발자라면 단연코 이 책을 추 천하겠다. 그리고 자기가 만든 코드에서 어떤 일이 일어나는지 더 자세하게 이해하려는 고급 개발자들에게 도 추천하고 싶은 책이다. 그리고 ‘C#이 어떤 식으로 작동하는지 더 잘 설명할 수 있는 방법이 없을까’ 고민 하는 개발자들에게도 추천할 만한 책이다.” - 주세페 투리토, 콘월 컨설팅 그룹 C# 및 ASP.NET 개발자

“앤드류와 제니는 독자들이 C#을 흥미롭게 학습할 수 있도록 이 책을 만들었다. 컴퓨터 앞에 앉아 연필을 움켜쥐고 우뇌와 좌뇌, 뼈를 타고 오는 재미를 즐겨라. ” - 빌 미텔스키, 소프트웨어 엔지니어

“『Head First C#』을 읽은 것은 매우 좋은 경험이었다. 원래 독자를 가르치는 방식의 책 시리즈에 특별한 인 상을 받지 못했었다. 그러나 이 책은 C#을 배우고 싶은 사람들에게 확실히 추천하고 싶은 책이다.” - 크리쉬나 팔라, MCP(Microsoft Certificated Professional)

다른 Head First 책에 대한 찬사 “내 머릿속에서 500킬로그램 정도되는 책을 걷어내 버린 듯한 느낌이다.” - 워드 커닝햄, 위키의 발명자이자 힐사이드 그룹 창립자

“우리 마음 속에 숨어 있는 쿨한 괴짜 코더에 딱 맞는 스타일의 책이다. 실용적인 개발 전략에 있어서도 최적 의 레퍼런스라고 할 수 있다. 지루한 교수님들의 강의에 눌려 지친 두뇌에 날개를 달아 줄 수 있는 책이다.” - 트래비스 칼라닉, Scour and Red Swoosh 창립자, MIT TR100 멤버

6


“책은 사두기만 하는 책, 책꽂이에 잘 꽂아두는 책, 책상 위에 올려놓고 보는 책으로 나눌 수 있다. 하지만 O’Reilly와 Head First팀 덕분에 Head First 시리즈라는 새로운 부류가 등장할 수 있었다. 이 부류의 책 은 너덜너덜해질 때까지 어디든 가지고 다니면서 보는 책이다. 내 책상에 쌓인 책들 맨 위에 바로 『Head First SQL』이 올려져 있다. 리뷰용으로 받았던 PDF 파일마저도 여기저기 해지고 너덜너덜해질 지경이다.” - 빌 소이어, ATG 커리큘럼 관리자, 오라클

“놀라우리만치 명료하면서도 유머가 넘치고 재치가 번뜩이는 이 책 덕분에 프로그래머가 아닌 사람들조차 문제 해결에 대해 배울 수 있을 것만 같다.” - 코리 닥터로우, Boing Boing의 공동 편집자, 『Down and Out in the Magic Kingdom』과 『Someone Comes to Town, Someone Leaves Town』의 저자

“어제 이 책을 받아서 바로 읽기 시작했는데, 도저히 중간에 멈출 수가 없었다. 정말 쿨한 책이다. 재미있으 면서도 근본적인 내용부터 충실하게 다루고 있다. 정말 인상적이다.” - 에릭 감마, IBM Distinguished Engineer, 『Design Patterns』의 공저자

“지금까지 읽어본 소프트웨어 디자인 관련 책 중 가장 재미있고 멋진 책” - 아론 라버지, VP Technology, ESPN.com

“길고 지루한 시행착오를 통해 배우던 내용을 이제 깔끔하고 재미있는 책 한 권으로 배울 수 있는 날이 오 고야 말았다.” - 마이크 데이비슨, Newsvine, Inc. CEO

“우아한 디자인을 소개하면서도 각각의 개념을 실용성과 위트를 곁들여서 소개해 주는 책” - 켄 골드스타인, 디즈니 온라인 부사장

“보통 디자인 패턴에 관한 책이나 글을 읽을 때는 내용에 집중하기 위해 몸부림을 쳐야 했지만 이 책은 그렇 지 않다. 이상하게 들릴지 모르지만 이 책은 디자인 패턴을 정말 재미있게 배울 수 있는 책이다. 다른 디자 인 패턴 책들을 고상한 고전음악에 비유한다면 이 책은 신나는 댄스음악에 비유할 수 있을 것 같다.” - 에릭 울러

“정말 사랑스러운 책이다. 심지어 아내 앞에서 이 책에 키스한 일도 있었다.” - 새티시 쿠마르

7


저자들 우리 책을 구입해 주셔서 감사합니다. 정말 즐거운 마음으로 책을 만들었어요. 독자 여러분도 마찬가지로 이 책을 즐길 수 있길 바라요.

앤드류 이 사진과 고와누스 운하 사진은 니샤 손드가 찍어줬어요..

모두 C#을 즐거운 마음으로 배웠으면 해요.

제니

앤드류 스텔만은 뉴요커로 자라긴 했지만 미니애폴리스, 제네바에서 살았고 피츠버그에서 꽤 오래 지냈습니다. 카 네기 멜론 대학교 전산학부를 다니는 동안 피츠버그라는 동네를 알게 되었고, 나중에 제니와 함께 컨설팅 사업을 시작하고 오라일리에서 책을 내기 시작하면서 다시 피츠 버그로 이사왔습니다. 대학을 졸업하고 앤드류가 처음 얻은 직장은 EMI 음반사의 프로그래 머 자리였습니다. 그가 라구아디아 공연예술 고등학교에서 첼로와 재즈 베이스 기타를 전공했던 것을 감안하면 제법 그럴듯한 직장이었습니다. 앤드류와 제니가 처음으로 같이 일했던 곳은 회계 소프트웨어 회사였는 데, 거기에서 앤드류는 프로그래머팀을 맡고 있었습니다. 몇 년 동안 앤드류는 큰 규모의 실시간 백 앤드 시스템을 설계하는 메이 저 투자 은행의 부사장으로 있었습니다. 그는 세계적인 소프트웨어팀을 관리하고 회사와 학교, 기관을 위해 컨설팅을 했습니다. 마이크로소프 트, 국립경제연구실, MIT가 여기에 포함됩니다. 그때 끝내주는 프로그 래머들과 일할 수 있었고, 그 과정에서 많은 것을 배웠습니다. 책을 쓰지 않는 동안에는 별로 쓸데없는(하지만 재미있는) 소프트웨어

제니퍼 그린은 대학교에서는 철학을 전공했지만 철학 전공자답 게 전공과 관련된 직장을 구하지는 못했습니다. 다행히도 소프 트웨어 테스팅에 능통한 덕에 온라인 서비스 업체에서 테스팅 을 시작하면서 프로젝트 관리에 대해 배울 수 있었습니다. 1998년에 뉴욕으로 이사해서 회계 소프트웨어 테스트 업무를 맡았습니다. 그 후로는 미디어와 회계 회사에서 소프트웨어 개 발자, 테스터, PM들을 관리했습니다. 세계 방방곡곡을 돌면서 여러 소프트웨어 팀과 함께 일하면서 갖가지 재미있는 프로젝트를 진행했습니다. 여행을 좋아하고, 발리우드 영화를 즐겨 보며, 가끔씩 만화책 을 보기도 하고, PS3 게임을 하며 큰 시베리안종의 고양이 샤 샤와 시간을 보냅니다.

를 만들기도 하고, 음악과 비디오 게임도 하고, 태극권과 합기도 연습도 하고, 포메라니언종 강아지하고 놀곤 한답니다.

만들고 소프트웨어 엔지니어링에 관한 글을 쓰고 있습니다. 제니와 앤드류는 1998년에 처음 만난 이후로 함께 소프트웨어를 ement』, 2009년에는 『Beautiful Times』가 오라일리에서 2005년에는 그들의 첫 책인 『Applied Software Project Manag 출간된 『Head First PMP』였습니다. 출간되었습니다. Head First 시리즈의 첫 번째 책은 2007년에 는 과학자들을 위한 소프트웨어 프로젝트를 구축하기 위해 2003년에 베트남전 참전자들의 제초제에 대한 노출을 연구하 책을 쓰는 일뿐만 아니라 회사를 컨설팅하고 소프트웨어 Stellman & Green 컨설팅을 설립했습니다. 소프트웨어를 만들고 서 발표를 합니다. 엔지니어링, 아키텍처, 프로젝트 관리와 관련된 학회나 회의에 Building Better Software(더 좋은 소프트웨어를 만드는 법) 가는 http://www.stellman-greene.com에 가면 그들이 만들어 . , 트위터 @AndrewStellman와 @JennyGreene에 팔로우해 주세요 블로그를 볼 수 있습니다. 앤드류와 제니의 소식을 듣고 싶으면

8


역자 서문 마이크로소프트가 변하고 있습니다. 예전에는 오로지 윈도우의, 윈도우에 의 한, 윈도우를 위한 폐쇄적인 정책을 펼쳤다면, 윈도우뿐만이 아니라 다양한 환경에서 마이크로소프트 제품을 사용할 수 있도록 개방적인 정책을 펼치고 있습니다. 2014년 11월 12-13일 뉴욕에서 열린 Connect( ) 개발자 컨퍼런스 에서 마이크로소프트가 개발하고 있는 많은 기술들을 설명했습니다. 그리고 이 책에서 다루는 통합 개발 환경인 Visual Studio에 대한 많은 변화들도 있었습니다. 물론 C#과 .NET을 공부하는 것도 중요하지만, 자신이 사용하고 있는 개발 도구의 변화를 잘 주시해야 합니 다. 독자 여러분과 함께 마이크로소프트의 행보를 계속 지켜봐야 할 것 같습니다. 『Head First C#』은 딱딱하지 않게 내용을 설명하면서도, 중요한 개념들(객체 지향 프로그래밍, 예 외 처리, 직렬화, LINQ, 이벤트, 비동기 프로그래밍 등)을 놓치지 않고 있습니다. 그리고 친절한 스크린 캡처들과 많은 연습 문제는 여러분의 실력을 향상시켜 줄 것입니다. 이 책에서 사용한 용어들은 C# MSDN 혹은 인터넷에 검색했을 때, 많이 쓰이는 단어로 사용했습니다. 원 서는 본래 Visual Studio 2012로 되어 있는데 Visual Studio 2012에서 2013으로 버전이 업그레이드되면 서 달라진 부분이 있습니다. 이러한 예제 코드 부분 을 고치고, Visual Studio 2013 Express for Windows와 Desktop에서 테스트했습니다. 이 책의 윈도우 스토어 앱은 윈도우 8 이상의 버전에서만 동작합니다. 하지만 윈도우 8 이전 버전을 사용 하는 독자들을 위해서 WPF(Windows Presentation Foundation) PDF 파일도 제공하고 있습니 다. 조금 더 자세한 사항은 책을 읽다 보면 자연스럽게 알게 됩니다. 자, 그럼 이제 C#과 .NET의 세계로 빠져들 준비가 되셨나요? 이 책이 깔끔하게 나올 수 있도록 편집해 주신 강은희 편집자님께 감사의 말을 전하고 싶습니다. 그리고 모두 이름을 열거할 수 없지만, 항상 삶에 큰 자극이 되어 준 멘토님들, 친구들, 회사 동 료 분들에게도 감사의 말을 전하고 싶습니다. 바쁘다는 핑계로 자주 집에 찾아가지 못해 엄마, 동 생에게 미안하고, 사랑한다는 말을 전하고 싶습니다. 마지막으로 하늘에 계신 아빠에게 이 책을 선물하고 싶습니다.

2015년 2월 최길우 역자 소개 Software Maestro 3기 연수 과정 중 약 1년 동안 수면실에서 미래를 고민하다가, 지금은 어느 한 회사에서 신입사원으로서 미생의 삶을 살아가고 있습니다. 아직도 무엇을 해야 할지 끊임없이 고민하고 있습니다. 내일부터 피아노와 기타를 쳐야지 하면서, 몇 년째 악기들을 곁에만 두고 있습니다.

9


목차(요약)

서문

1  C# 시작하기 : 멋진 뭔가를 빠르게 만들어 봅시다! 2  모두 다 코드에 불과하나니… : 뒤에 숨어 있는 그 무엇

45 97

3  객체를 지향하라! : 제대로 된 코드 만들기

145

4  유형과 참조 : 10시… 당신의 데이터는 어디에 있습니까?

185

C# 실습 1 : 경주 시뮬레이션

231

5  캡슐화 : 비밀스러운 것은… private으로…

241

6  상속 : 객체의 가계도

281

7  인터페이스와 추상 클래스 : 약속 잘 지키는 클래스 만들기

337

8  열거형과 컬렉션 : 데이터 왕창 저장하기

395

9  파일 읽고 쓰기 : 마지막 바이트를 저장하라!

C# 실습 2 : 퀘스트

453 509

10  XAML로 윈도우 스토어 앱 디자인하기 : 앱을 다음 레벨로…

531

11  데이터 컨트랙트 직렬화 : 실례합니다, 잠시만요!

579

12  예외 처리 : 나중에는 불길 잡기가 힘들어요

613

13  캡틴 어메이징 : 객체의 최후

655

14  쿼리와 LINQ : 데이터 처리하기

693

15  이벤트와 대리자 : 코드가 은밀히 처리하는 것

745

16  MVVM 패턴으로 앱 설계하기 : 좋은 앱의 내부, 외부 구조

789

10

33

C# 실습 3 : 인베이더(Invaders)

851

17  보너스 프로젝트 : 윈도우 폰 앱 만들기

875

부록 1  남은 것들 : 이 책에 넣고자 했던 11가지 내용

889


목차

목차(진짜)

서문 C#에 빠져봅시다.

여러분은 뭔가를 배우기 위해서 이 책을 보고 있을 것입니다. 하지만 여

러분의 머리에서는 배운 내용을 잘 받아들이려고 하지 않습니다. 아마 ‘어떤 야생 동물을 주의해야 한다거나 왜 안전 장비를 잘 갖추고 수상스키를 타야 하는 걸까? 같은 더 중요한 내용을 채워 넣어 야 하니까 자리를 좀 남겨 둬야 돼’라고 생각하고 있을지 모르죠. 이제 여러분의 두뇌를 속여서 C# 은 목숨이 달린 중요한 사안이라고 생각하게 만들어 봅시다. 누구를 위한 책일까요?

34

지금쯤 여러분은 이런 생각을 하고 있겠죠?

35

초인지: 생각하는 것에 대해 생각하는 것

37

이 책에서는 이렇게 했습니다

38

두뇌를 정복하는 방법

39

이 책의 학습을 위해 필요한 것

40

마지막으로 알아 둬야 할 몇 가지

41

테크니컬 리뷰팀

42

감사의 글

43

11


목차

1

C# 시작하기 멋진 뭔가를 빠르게 만들어 봅시다! 멋진 앱을 정말 빨리 만들고 싶습니까? C#을 쓰면 강력한 프로그래밍 언어와 훌륭한 도구를 자유자재로 활용할 수 있습니다. 그리고 비주 얼 스튜디오 IDE를 이용하면 버튼이 제대로 작동하게 만들려고 복잡한 코드를 가지고 오랫동안 씨 름할 필요도 없죠. 게다가 버튼에 대한 적은 양의 코드로 멋진 소프트웨어를 만들 수 있습니다. 뭔 가 끌리는 느낌이 드나요? 그러면 다음 페이지로 넘어가서 프로그래밍을 시작해 봅시다.

이렇게 생긴 외계인을 피하세요

안 돼! 외계인이 사람들에게 레이저 빔을 쏘고 있어.

?! 12

C#을 배워야 하는 이유

46

C#과 비주얼 스튜디오 IDE가 있으면 여러모로 쉬워집니다

47

비주얼 스튜디오에서 해야 할 일

48

비주얼 스튜디오가 대신해 주는 일

48

외계인 침입!

52

당신만이 지구를 구할 수 있습니다

53

빌드할 것들

54

빈 응용 프로그램으로 시작하기

56

그리드 설정하기

62

그리드에 컨트롤 추가하기

64

속성값으로 컨트롤이 변하는 모습을 봅시다

66

컨트롤로 게임 동작하게 하기

68

게임 만들 준비가 됐습니다

73

다음에 해야 할 것

74

메서드 추가하기

75

메서드에 코드 채워 넣기

76

메서드를 끝내고 프로그램을 실행해 봅시다

78

지금까지 한 일

80

타이머 추가하기

82

시작 버튼 동작하게 하기

84

진행 상황을 볼까요?

85

플레이어가 컨트롤을 조정하는 코드를 작성해 봅시다

86

사람과 적이 부딪히면 게임이 끝납니다

88

이제 게임을 할 수 있습니다

89

적을 외계인처럼...

90

깜빡이는 화면과 타일 추가하기

91

앱 배포하기

92

사이드 로딩을 위한 원격 디버거 사용하기

93

원격 디버깅 시작하기

94


목차

2

모두 다 코드에 불과하나니... 뒤에 숨어 있는 그 무엇 우리는 그냥 IDE 사용자가 아니라 프로그래머입니다. IDE만 가지고도 꽤나 많은 일을 할 수 있습니다. 하지만 거기에는 한계가 있습니다. 물론 응용 프로그램을 만들다 보면 반복적인 작업을 많이 해야 하긴 합니다. 그런 일을 하다 보면 IDE에서 제공하는 기능이 정말 많이 도움이 된 다는 것을 알 수 있죠. 하지만 IDE를 가지고 작업하는 것은 시작에 불과합니다. 프로그램에서 할 수 있는 일은 IDE 에서 하는 일에 비하면 무궁무진합니다. 그리고 그런 일을 하려면 C# 코드를 작성해야 합니다. 일단 코딩에 대해 어느 정도 감을 잡고 나면 프로그램으로 못할 일이 없다니까요. 이런 일을 할 때 …

새로운 프로그램을 만들 때는 항상 별도의 네임스페이스 를 만들어서 그 코드를 .NET 프레임 워크 클래스, 윈도우 스토어 API와 구분 지을 수 있게 합니다.

램의 한 클래스에는 우리가 만드는 프로그 일부분이 담겨 있습니다(아주 간단한 만들 수 프로그램은 한 클래스만 가지고도 있긴 합니다).

한 클래스에는 하나 이상의 메서드가 들어갑니다. 메서드는 언제나 클래스 안에서만 살아갑니다. 그리고 메서드는 - 우리가 이미 살펴본 것처럼 - 선언문으로 이뤄지죠.

98

IDE에서는 이런 일을 합니다

99

프로그램은 어디에서 오는가

100

IDE가 코딩을 도와주네요

102

프로그램의 해부학

104

같은 네임스페이스 안에 두 클래스가 있을 수도 있습니다

109

데이터는 변수로…

110

C#의 연산자

112

변수 값의 추이를 지켜보려면 디버거를 사용하세요

113

같은 일을 계속 반복해 주는 반복문

115

결정을 내릴 때는 if/else 선언문으로

116

기초부터 만들기

117

버튼 동작하게 하기

119

조건문을 만들고 그 조건이 맞는지 확인합니다

120

윈도우 데스크톱 앱, 쉽게 만들 수 있어요

131

다시 만들어 볼까요?

132

어디에서 시작할까요?

136

프로그램의 진입점을 바꿀 수 있습니다

138

IDE에서 뭔가를 바꾸면 코드도 바뀝니다

140

네임스페이스 클래스 메서드 1 선언문

메서드 2 선언문

13


목차

3

객체를 지향하라! 제대로 된 코드 만들기 모든 프로그램은 어떤 문제를 해결하기 위해 만들어집니다. 프로그램을 만들 때는 항상 그 프로그램으로 어떤 문제를 해결하는 것인지부터 생각하는 습관을 기르는 것이 좋 습니다. 그런 관점에서 볼 때 객체는 정말 유용합니다. 그 객체를 통해서 문제를 해결하면 코드 구조를 구축하는 데 도움이 되고, 결과적으로 코드를 작성하는 방법에 얽매이기보다는 우리가 해결해야 할 문제를 고민하는 데 더 많은 시간을 투자할 수 있으니까요. 객체를 올바르게 활용하면 더 직관적으로 작성할 수 있는 코드, 더 쉽게 이해하고 수정할 수 있는 코드를 만들어 낼 수 있습니다. 마이크의 문제 해결 방법

navigator1

Navigator

w ne

SetDestination() ModifyRouteToAvoid() ModifyRouteToInclude() GetRoute() GetTimeToDestination() TotalDistance()

() or at ig v Na

Nav igator 객체

new Navi gato r()

ne w

Na vi ga to r( )

navigator2

Nav igator 객체

navigator3

Nav igator 객체

청사진을 만들 때 집 내부 구조물의 배치도를 그려 넣듯이 클래스를 선언할 때 메서드를 정의합니다.

청사진 하나로 똑 같은 집을 여러 채 지을 수 있는 것처럼 클래스 하나로 객체를 여러 개 만들 수 있습니다.

14

146

마이크의 내비게이션 시스템에서는 이 문제를 어떻게 생각하고 있을까요?

147

마이크의 Navigator 클래스에는 경로를 설정하고 변경하는 메서드가 있습니다

148

지금까지 배운 걸 활용해서 간단한 프로그램을 만들어 봅시다

149

방금 만든 프로그램은 무슨 일을 할까요?

150

마이크, 새로운 아이디어를 떠올리다

151

객체를 쓰면 이 문제를 해결할 수 있습니다

152

클래스를 이용해 객체를 만들 수 있습니다

153

클래스에서 생성한 객체를 그 클래스의 인스턴스(instance)라고 부릅니다

154

객체를 이용한 더 나은 해결책

155

인스턴스에서는 필드로 모든 것을 저장합니다

160

인스턴스를 만들어 봅시다!

161

메모리와 객체

162

프로그램에서는 무슨 일이…?

163

클래스와 메서드 이름을 활용하면 직관적인 코드를 만들 수 있습니다.

164

직관적인 클래스 구조

166

클래스 다이어그램을 써서 클래스를 제대로 만듭시다

168

두 친구를 위한 클래스를 만들어 봅시다

172

프로젝트를 만들어 봅시다

173

폼을 만들어 봅시다

174

객체를 더 쉽게 초기화하는 방법

177

직관적인 클래스를 만드는 방법

178


목차

4

유형과 참조 10시… 당신의 데이터는 어디에 있습니까? 자료형, 데이터베이스, 전화번호부… 전부 ‘중요하다’는 공통점이 있습니다. 데이터가 없이는 어떤 프로그램도 쓸모가 없습니다. 사용자로부터 정보를 받고, 그 정보를 활용해 새로운 정보를 찾아내거나 만들어 내서 다시 사용자에게 돌려 줘야 하니까요. 사실 프로그래밍 과정에서 하는 일은 대부분 어떤 식으로든 데이터로 작업하는 것이라고 할 수 있습니다. 이 장에서는 C#의 자료형(data type)에 대해 속속들이 알 아보겠습니다. 프로그램에서 데이터를 다루는 방법을 자세하게 알아보고, 객체에 대한 비밀스러운 이야기까지 살 펴봅시다(떠도는 소문에 의하면 실은 객체도 데이터라고 합니다). 데이터의 유형에 따라 저장할 수 있는 데이터의 종류가 결정됩니다

186

변수는 테이크-아웃용 컵과 같습니다

188

2킬로그램짜리 가방에 10킬로그램 분량의 데이터를 담으면?

189

값이 별 문제가 되지 않는다고 해서 아무 변수에나 넣을 수는 없습니다

190

너무 큰 값을 형변환하면 C#에서 자동으로 값을 조절합니다

191

일부 형변환은 C#에서 자동으로 해 줍니다

192

메서드를 호출할 때는 인수와 매개변수의 유형이 딱 맞아야 합니다

193

마일리지 계산기 디버깅하기

197

연산자와 =의 만남

198

객체에서도 변수를 사용합니다!

199

참조변수로 객체 참조하기

200

참조는 객체에 대한 레이블과 마찬가지입니다

201

더 이상 참조가 없으면 객체는 가비지 컬렉션(쓰레기 수집)됩니다

202

참조변수가 여러 개 있을 때 생길 수 있는 문제점

204

참조변수가 두 개 있다는 것은 객체의 데이터를 두 가지 경로로 바꿀 수 있다는 Dog fido;

lucky

Dog lucky = new Dog();

1번 Dog 객체

fido = new Dog();

lucky = null;

lucky

1번 D 체 og 객

휘릭!

fido

2번 Dog 객체

것을 뜻합니다

209

특별 케이스: 배열

210

배열에 참조변수를 저장할 수 있습니다

211

슬라피 조의 샌드위치 하우스에 오신 것을 환영합니다!

212

객체는 참조변수를 통해서 이야기합니다

214

어떤 객체도 가 보지 못한 길

215

문자입력 게임 만들기

220

다른 객체들처럼 컨트롤도 객체입니다

224

fido

2번 D 객체 og

15


C# 실습1 경주 시뮬레이션 조, 밥, 앨은 경견장에 가는 걸 매우 좋아합니다. 하지만, 매번 갈 때마다 돈을 잃어서 애 로가 많습니다. 그래서 돈을 걸기 전에 어떤 개가 이길지를 알아낼 수 있는 시뮬레이터 를 만들어 달라고 부탁하는군요. 그리고 프로그램을 잘 만들어 주면 수익금도 나눠 주겠 다고 하네요.

16

요구사항: 경주 시뮬레이터를 만들어 주세요

232

실습 과제 완성!!!

240


목차

5

캡슐화 비밀스러운 것은… private으로… 좀 더 은밀한 것을 원하시나요? 때때로 객체에서도 은밀한 것이 필요할 수 있습니다. 일기장이나 은행 거래내역서 같은 걸 안전하고 비밀스럽게 보 관하는 것과 마찬가지로 훌륭한 객체라면 다른 친구들이 마음대로 자기 내부를 휘젓고 다니지 못하게 할 수 있어 야 할 겁니다. 이 장에서는 캡슐화의 위력에 대해 알아볼 겁니다. 객체의 데이터를 남들로부터 숨기고, 그 데이터에 안전하게 접근하게 해 주는 메서드를 추가하는 방법도 배우게 됩니다.

cia

kg

Agent

b A g en t

mi

이벤트 플래너 캐슬린

242

견적 계산기에서 해야 할 일

243

캐슬린을 위한 프로그램 만들기

244

캐슬린, 프로그램을 테스트해 보다

250

각 옵션은 개별적으로 계산해야 합니다

252

객체를 잘못 사용하는 경우

254

캡슐화란 클래스에 있는 어떤 데이터를 은밀하게 숨기는 걸 뜻합니다

255

클래스에 있는 메서드와 필드에 대한 접근을 제어하고 싶다면 캡슐화 기법을 활용합시다 256 하지만 RealName 필드가 정말 안전할까요?

257

private 필드나 메서드는 클래스 내부에서만 접근할 수 있습니다

258

클래스 캡슐화에 관한 몇 가지 팁

265

캡슐화로 데이터를 소중하게!

266

속성을 쓰면 한결 더 쉽게 캡슐화할 수 있습니다

267

Farmer 클래스를 테스트하는 응용 프로그램을 만들어 봅시다

268

자동 속성으로 클래스를 완성해 봅시다

269

FeedMultiplier를 바꾸려면?

270

생성자를 이용한 private 필드 초기화

271

5A gent

파티 참가자 수 (1인당 25달러)

헬씨 옵션?

주스 및 탄산음료 (1인당 5달러, 총비용 5% 할인)

주스 및 탄산음 료(1인당 15달 러 + 기본 장식 비 50달러)

팬시 데코레이션

아니오

주류 제공 (1인당 20달러)

아니오

주류 제공(1인당 7달러 50센트 + 기본 장식비 30 달러)

17


목차

6

상속 객체의 가계도 부모님을 닮고 싶다는 생각을 해 본 적 있지 않나요? 혹시 여러분이 만들고자 하는 객체와 거의 똑같은 일을 해 주는 객체를 본 적이 있나요? 어떤 객체를 보고 ‘조금 만 고치면 딱 내가 필요로 하는 객체를 만들 수 있겠다’하는 생각이 들어본 적 있나요? C# 언어에서 가장 강력 한 개념이자, 가장 강력한 테크닉인 상속(inheritance)이 만들어진 배경에는 그런 생각이 담겨 있습니다. 이번 장 을 공부하고 나면 어떤 객체의 서브 클래스를 만들어서 필요한 행동은 그대로 받아오면서 유연성을 살려 고쳐야 할 게 있으면 고쳐서 쓰는 방법을 터득하게 될 겁니다. 중복된 코드를 피하면서 실제 세계와 더욱 유사한 모형을 만들고 더 관리하기 쉬운 코드를 만들 수 있게 될 거예요.

Canine

Eat() Sleep()

Dog

Wolf

MakeNoise()

18

MakeNoise()

캐슬린은 생일 파티도 준비해 준답니다

282

BirthdayParty 클래스를 만듭시다

283

파티 플래너 2.0 버전을 만들어 봅시다

284

혹시... 참가자 수가 12명이 넘어가면 100달러의 추가 비용을 받게 하는 것도 가능할까요?

291

클래스에서 상속을 활용하면 코드를 한 번만 작성해도 됩니다

292

우선 일반적인 부분부터 클래스 모형을 구축한 다음 더 구체적인 부분을 만듭니다

293

동물원 시뮬레이터를 만든다면?

294

서브 클래스에서 코드가 중복되는 것을 피하려고 상속을 사용합니다

295

동물마다 서로 다른 소리를 냅니다

296

동물 분류 방법

297

클래스 계층구조를 만듭시다

298

모든 서브 클래스에서는 베이스 클래스를 확장합니다

299

베이스 클래스로부터 상속받을 때는 콜론을 씁니다

300

상속을 사용하면 서브 클래스에 베이스 클래스의 필드, 속성, 메서드가 추가되는데…

303

서브 클래스에서는 메서드를 오버라이드해서 상속받은 메서드를 고칠 수 있습니다

304

베이스 클래스를 사용할 수 있는 곳이라면 어디든 서브 클래스를 대신 써도 됩니다

305

서브 클래스는 슈퍼 클래스에 있는 메서드를 숨길 수 있습니다

312

동작을 상속받으려면 override와 virtual 키워드를 사용하세요

314

서브 클래스에서는 base 키워드로 베이스 클래스에 접근할 수 있습니다

316

베이스 클래스에 생성자가 있으면 서브 클래스에도 생성자를 만들어야 합니다

317

이제 캐슬린의 프로그램을 완성해 봅시다!

318

벌집 관리 시스템을 만들어 봅시다

323

기본 시스템을 구축합시다

324

상속을 써서 벌 관리 시스템을 확장해 봅시다

331


7

목차

인터페이스와 추상 클래스 약속 잘 지키는 클래스 만들기 백 번 말하는 것보다는 한 번 실천하는 것이 중요합니다. 때때로 객체가 어떤 클래스를 상속받는지보다는 어떤 일을 할 수 있는지를 기준으로 묶어 줘야 하는 경우가 있습니다. 그런 경우에 쓰이는 것이 바로 인터페이스(interface)입니다. 어떤 클래스든 같은 인터페이스를 구 현하면 같은 일을 할 수 있죠. 하지만 강력한 힘을 갖게 되면 그만큼 책임져야 할 것도 많아지는 법이죠. 어떤 클래스든 특정 인터페이스를 구현한다면 반드시 모든 의무를 이행해야 합니다. 그렇지 않으면 컴파일러가 가 만 두지 않을 거예요.

상속 추상화 캡슐화 다형성 Location

339

인터페이스란 클래스에 어떤 메서드와 속성을 반드시 구현해야 한다고 알려 주는 역할을 합니다 340 인터페이스를 정의할 때는 interface 키워드를…

Room

Outside

Decoration

341

이제 꿀도 따고 벌집도 지킬 줄 아는 NectarStinger 인스턴스를 만들 수 있습니다

342

인터페이스를 구현하는 클래스에는 인터페이스에 있는 모든 메서드가 들어가야만 합니다

343

인터페이스 연습

344

인터페이스로 인스턴스를 만들 순 없지만, 인터페이스를 참조하는 건 가능합니다

346

인터페이스 참조변수와 객체 참조변수

347

어떤 클래스가 특정 인터페이스를 구현하는지 알아내고 싶다면 ‘is’를 사용하면 됩니다

348

인터페이스의 상속

349

꿀을 먹지도 않고 일할 수 있는 RoboBee 4000 등장!!

350

알려줄 수 있습니다

Description()

앞마당 (Front Yard)

338

is 연산자로 무엇을 구현하는지 알 수 있고, as 연산자로 어떻게 간주해야 할지

Name Exits

거실 (Living Room)

벌집 문제로 돌아가 봅시다 상속을 통해 여러 유형의 벌에 대해 서로 다른 클래스를 만들 수 있습니다

Hot

식당 (DiningRoom) 부엌(Kitchen) 뒷마당 (Back Yard)

351

커피메이커도 가전제품이에요

352

업캐스팅과 객체, 인터페이스

353

다운캐스팅으로 가전제품을 커피메이커로 돌려놓기

354

업캐스팅, 다운캐스팅과 인터페이스

355

public, private 말고 다른 것도 있어요

359

접근 제한자와 영역

360

접근 제한자 돌아보기

361

인스턴스를 만들면 안 되는 클래스

363

추상 클래스는 클래스인가 아니면 인터페이스인가?

364

인스턴스를 만들면 안 되는 클래스도 있어요

366

추상 클래스에는 몸통이 없어요

367

다형성이란 한 객체가 여러 모양을 가질 수 있다는 것을 뜻합니다

375

정원(Garden)

19


목차

8

열거형과 컬렉션 데이터 왕창 저장하기 엎친 데 덮친 격 실생활에서는 데이터를 조금씩 찔끔찔끔 처리하는 일이 별로 없습니다. 보통 데이터가 한꺼번에 왕창 몰려옵니다. 따라서 다량의 데이터를 정리하기 위한 뭔가가 필요하고, 컬렉션(collection)이 바로 그런 경우에 쓸 수 있는 도구 입니다. 컬렉션으로 프로그램에서 사용할 데이터를 저장하고 정렬하고 관리할 수 있습니다. 데이터를 관리하는 부 분은 컬렉션에 맡겨버리고 우리는 데이터로 일을 처리하는 부분에 더 많은 시간을 할애할 수 있지요. 데이터 카테고리를 저장할 때 문자열이 만능은 아닙니다

휘릭!

20

396

열거형을 이용하면 쓸 수 있는 값을 열거할 수 있습니다

397

enum을 쓰면 숫자를 이름으로 표현할 수 있습니다

398

카드 한 벌을 만들기 위한 방법은?

401

까칠한 배열

402

List는 뭐든 간편하게 저장할 수 있어요

403

리스트는 배열보다 유연성이 좋습니다

404

리스트는 크기가 동적으로 바뀝니다

407

List 객체에는 어떤 유형이든 저장할 수 있어요

408

컬렉션 이니셜라이저는 객체 이니셜라이저와 비슷합니다

412

오리 리스트를 만들다

413

리스트는 사용하기 쉽지만 정렬하기는 까다로울 수 있습니다

414

IComparable<Duck>은 리스트에서 오리를 정렬하는 데 도움을 줍니다

415

IComparer로 리스트에 정렬 방법을 알려 주는 방식

416

IComparer 객체 인스턴스를 생성합시다

417

IComparer로 더 복잡하게 비교할 수도 있어요

418

ToString() 메서드를 오버라이드해서 객체 자신을 설명하도록 만들어 봅시다

421

Ducks와 Cards가 자신을 출력하도록 foreach문을 수정해 봅시다

422

foreach문을 작성할 때, IEnumerable<T>를 사용합니다

423

IEnumerable을 사용해서 리스트 전체를 업캐스팅할 수 있습니다

424

여러분 자신만의 오버로드된 메서드를 만들 수 있습니다

425

키와 값을 저장할 때는 딕셔너리를 쓰면 됩니다

431

딕셔너리에서 제공하는 기능

432

딕셔너리를 사용하는 프로그램을 만들어 봅시다

433

기타 컬렉션 유형

445

큐는 FIFO, 즉 선입선출 방식입니다

446

스택은 LIFO, 즉 후입선출 방식입니다

447


9

파일 읽고 쓰기 마지막 바이트는 남겨 두세요 데이터를 지속적으로 남겨 둬야 될 때도 있습니다. 지금까지 여러분이 작성한 모든 프로그램은 단명했습니다. 프로그램이 일단 실행된 후 곧바로 죽었죠. 하지만 이것만으로는 뭔가 부족합니다. 특히, 중요한 정보를 다룰 땐 더욱 그렇죠. 작업 한 내용을 저장할 수 있어야 합니다. 이 장에서는 데이터를 파일에 쓰는 방법과 다시 파일에서 그 데이터를 어떤 식으로 읽어 내는지 배우게 될 것입니다. 이를 위해 .NET 스트림 클래스의 내용과 2진법, 16진법의 정체를 살펴보겠습니다.

F

ileS tream 객

목차

69 1 17 114 101 107 9 7 33

Fi

leS tream 객체

데이터를 읽고 쓰기 위해 C#은 스트림을 사용합니다 각양각색 스트림 FileStream은 바이트 형태로 파일을 작성합니다 간단한 3가지 단계만 거치면 파일에 텍스트를 쓸 수 있습니다 사기꾼이 또 다른 음모를 꾸미고 있군요 두 개의 객체로 읽고 쓰기 데이터는 한 개 이상의 스트림을 거쳐갈 수 있습니다 표준 대화상자를 보여 주려면 내장 객체를 사용하세요 대화상자를 띄우는 ShowDialog() 대화상자는 또 다른 WinForms 컨트롤의 하나일 뿐입니다 대화상자 역시 객체입니다 디렉터리와 파일에 대한 작업을 하려면 내장 File과 Directory 클래스를 사용하세요 파일을 열고 저장하려면 OpenFileDialog와 SaveFileDialog를 사용하세요 IDisposal은 객체들이 제대로 배치되었는지를 확인합니다 using문을 사용해서 파일시스템 에러를 방지합시다 직장에서의 갈등 일반적으로 파일을 쓸 때 많은 결정을 해야 합니다 올바른 선택을 하려면 switch문을 사용하세요 switch문을 사용해서 파일로부터 카드를 읽거나 써 봅시다 파일에서 카드를 읽는 오버로드된 Deck() 생성자를 추가하세요 객체가 직렬화되면 무슨 일이 일어날까요? 객체의 상태란 정확히 무엇을 말하는 걸까요? 뭐가 저장되어야 한다는 것일까요? 객체가 직렬화될 때 객체의 모든 요소 역시 직렬화됩니다 직렬화를 하면 한 번에 객체 전체를 읽거나 쓸 수 있습니다 클래스가 직렬화되기 원한다면 [Serializable] 특성을 명시하세요 카드를 직렬화 및 역직렬화해 봅시다 .NET은 텍스트를 유니코드로 자동 변환합니다 C#은 바이트 배열에서 데이터를 이리저리 옮길 수 있습니다 이진 데이터를 쓰려면 BinaryWriter를 사용하세요 다시 데이터를 읽어오려면 BinaryReader를 사용하세요 수동으로 직접 직렬화된 파일을 읽고 쓸 수도 있습니다 차이가 나는 부분을 찾아 해당 정보를 이용해 변경하세요 이진 파일로 작업하는 것은 까다로울 수 있습니다 헥스 덤프 프로그램을 만들려면 파일 스트림을 사용하세요 StreamReader와 StreamWriter는 이상 없이 제대로 동작할 거예요 스트림에서 바이트를 읽으려면 Stream.Read()를 사용하세요.

454 455 456 457 458 461 462 465 465 466 467 468 471 473 474 475 480 481 482 483 485 486 487 488 489 490 493 494 495 496 497 498 499 500 501 502

21


C# 실습2 퀘스트 주인공이 한 레벨씩 올라가면서 무시무시한 적들을 물리치는 퀘스트를 수행하는 어드벤 처 게임을 만들어야 합니다. 이 게임은 주인공과 적이 서로 한 턴씩 움직이는 턴 기반 시 스템으로 만들겠습니다. 주인공은 한 턴에서 이동이나 공격 둘 중 하나만 할 수 있지만 적 은 한 턴에 이동과 공격을 동시에 할 수 있습니다. 플레이어가 죽거나 7레벨에 있는 모든 적을 죽이면 게임이 끝납니다.

22

스펙: 어드벤처 게임 만들기

510

좀 더 재미있게 만들어 보세요!

530


목차

그리드는 20픽셀 단위의 사각형 으로 구성 되어 있습니다.

앱을 다음 레벨로… 우리는 앱 개발의 새로운 세계에 들어갈 준비가 되었습니다. 윈폼을 사용해서 윈도우 데스크톱 앱을 만드는 것은 C#의 중요한 개념을 배우는 데 좋은 방법입니다 만 윈도우 스토어 앱에서는 조금 더 많은 것을 할 수 있습니다. 이번 장에서는 XAML을 이용하여 윈도 우 스토어 앱을 디자인하고, 모든 장치에 맞게 페이지를 작성하는 방법과 데이터 바인딩을 이용해 데 이터를 페이지에 통합하는 과정을 배워 봅니다. 비주얼 스튜디오에서 XAML 코드로 만들어진 객체들 을 탐험하며 XAML 페이지에 대한 신비를 파헤쳐 봅시다.

각 단위는 5픽셀 하위단위로 쪼개져 있습니다.

브라이언은 윈도우 8을 사용합니다

532

윈폼은 IDE에서 준비된 객체 그래프를 사용합니다

538

객체 그래프를 탐험해 볼까요?

541

윈도우 스토어 앱은 XAML로 UI 객체를 만듭니다

542

고피시 폼을 윈도우 스토어 앱 페이지로 새롭게 단장해 봅시다

544

페이지 레이아웃과 컨트롤

546

페이지의 크기에 맞게 행과 열이 조절됩니다

548

그리드 시스템을 이용한 앱 페이지 레이아웃

550

데이터 바인딩으로 XAML 페이지를 클래스로 연결해 봅시다

556

XAML 컨트롤은 텍스트 외 많은 것을 담을 수 있습니다

558

데이터 바인딩으로 슬라피 조의 향상된 메뉴판을 만들어 봅시다

560

정적 리소스로 XAML의 객체를 선언해 봅시다

566

데이터 템플릿으로 객체를 표현하기

568

INotifyPropertyChanged는 바인딩된 객체를 갱신해 줍니다

570

GeneratedDate 속성이 바뀔 때 알림을 받아서 MenuMaker를 수정해 봅시다

571

Binding ItemsSource="{Binding}"

e bs ervableColl

O

Lis tBox 객체

ctio n 객체

10

XAML로 윈도우 스토어 앱 디자인하기

23


목차

11

24

데이터 컨트랙트 직렬화 실례합니다, 잠시만요! 아무도 기다리는 것을 원하지 않습니다. 그것이 꼭 사용자만은 아닙니다. 컴퓨터는 한 번에 많은 일을 처리합니다. 그러나 한 번에 많은 일을 처리하다 보면 하나의 일을 끝내는 데 대기시간이 길어질 수 있습니다. 이 장에서는 비동기 메서드로 앱이 즉각 반응하도록 유지하는 방 법을 배웁니다. 그리고 내장파일 피커, 메시지 대화상자, 대기시간을 줄여 주는 비동기 파일 입출력에 대해서도 배우게 될 것입니다. 마지막으로 데이터 컨트랙트 직렬화를 배우면 여러분은 완벽한 모던 앱 을 만들 수 있습니다. 브라이언의 파일에 문제가 생겼어요

580

반응적인 await

582

FileIO 클래스로 파읽을 읽고 써 봅시다

584

간단한 텍스트 편집기 만들기

586

데이터 컨트랙트는 객체 데이터의 추상화된 정의입니다

591

async 메서드로 파일을 찾아서 열어보기

592

KnownFolder는 자주 사용하는 폴더에 접근하는 데 도움을 줍니다

594

객체 그래프를 XML로 직렬화하기

595

Guy 객체를 XML로 만들어서 로컬 폴더에 보내 주세요

596

Guy Serializer의 시범운행

600

한 async 메서드로부터 다른 async 메서드 호출하기

601

새로운 변명 관리 앱을 만들어 봅시다

602

페이지와 Excuse, ExcuseManager로 나눠 봅시다

603

변명 관리 앱의 메인 페이지를 만들어 봅시다

604

메인 페이지에 앱 바 추가하기

605

ExcuseManager 클래스 만들기

606

페이지의 코드-비하인드 추가하기

608


목차

12

예외 처리 나중에는 불길 잡기가 힘들어요 프로그래머는 소방수가 아닙니다. 헤드 퍼스트 책과 수많은 기술 매뉴얼을 들고 허리가 휠 정도로 일해서 여러분은 드디어 마스터 프로 그래머로서 업계의 정상에 우뚝 서게 되었습니다. 하지만 작성했던 프로그램들이 충돌하거나 예상대 로 동작하지 않아서 여전히 코드를 뒤적이고 있을 것입니다. 이상한 버그를 수정하는 여러분을 도와 줄 수 있는 것은 아무것도 없습니다. 그러나 예외 처리를 이용하면 부딪치게 될 수많은 문제를 처리 하는 코드를 작성할 수 있습니다. 심지어 그러한 문제들에 반응해서 모든 것이 정상적으로 동작하도 록 유지할 수 있습니다. 브라이언은 변명 관리 프로그램을 들고 다니려고 합니다

618

브라이언의 코드도 예상치 못한 방식으로 동작했군요

620

와, 이 프로그램은 정말 안정적이야!

모든 예외 객체는 Exception에서 상속받습니다

622

프로그램을 더 강력하게

디버거를 사용해서 예외를 추적하고 방지해 보세요

623

디버거를 사용해서 변명 관리 프로그램의 문제를 살펴봅시다

624

어휴, 코드에 여전히 문제가 있네요

627

! public class Data { public void Process(Input i) { try { if (i.IsBad()) { explode(); } catch { HandleIt(); } } }

예외 처리가 된 사용자

클래스

안 돼! 무슨 일이 일어난거야? 객

614

프로그램이 예외를 발생시키면 .NET은 Exception 객체를 생성합니다

int[] anArray = {3, 4, 1, 11}; int aValue = anArray[15];

E

xce

try와 catch로 예외를 처리합시다

629

위험한 메서드 호출

630

디버거를 사용해서 try/catch 흐름을 따라가 보죠

632

언제나 실행되는 코드를 작성하려면 finally 블록을 사용하세요

634

문제점에 대한 정보를 얻으려면 Exception 객체를 사용하세요

639

다양한 유형의 예외를 처리하려면 여러 개의 catch 블록을 사용하세요

640

한 클래스가 예외를 던지면 다른 클래스에 있는 메서드에서 그 예외를 잡아낼 수 있습니다

641

꿀벌은 OutOfHoney 예외가 필요합니다

642

많은 문제를 피하는 간단한 방법: using문을 사용하세요

645

예외 회피: 자기 자신을 삭제하려면 IDisposable을 구현하세요

646

역사상 최악의 catch 블록: 주석

648

일시적인 해결책도 당분간은 쓸모가 있습니다

649

예외 처리를 위한 몇 가지 간단한 팁

650

ption

25


목차

13

CAPTAIN AMAZING 캡틴 어메이징

THE DEATH OF THE OBJECT 객체의 최후

26

뭔가를 할 수 있는 여러분의 마지막 기회… 객체 소멸자

662

정확히 언제 소멸자가 실행되는 걸까요?

663

Dispose()는 using을 사용하고 소멸자는 가비지 컬렉션을 사용합니다

664

소멸자는 안정성을 기대할 수 없습니다

666

Dispose()에서 직렬화하는 객체를 만들어 봅시다

667

구조체는 객체와 비슷합니다…

671

값은 복사되고, 참조는 할당됩니다

672

구조체는 값 유형이고 객체는 참조 유형입니다

673

무슨 일이 일어났는지 여기에 나와 있습니다

674

스택 vs 힙: 메모리 탐구

675

하나 이상의 값을 반환하는 메서드를 작성하려면 out 매개변수를 사용하세요

678

ref 제한자를 사용한 참조에 의한 전달

679

선택적 매개변수를 사용해서 기본 값을 설정하세요

680

존재하지 않는 값이 필요할 때는 nullable 유형을 사용하세요

681

Nullable 유형은 프로그램을 튼튼하게 만드는 데 도와 줍니다

682

회복 중인 캡틴 어메이징

685

확장 메서드는 기존 클래스에 새로운 기능을 추가합니다

686

기본 유형 확장하기: string

688


목차

14

쿼리와 LINQ 데이터 처리하기 데이터 중심의 세계에 살고 있습니다. 어떻게 하면 더 나은 세상에서 살 수 있을까요? 지난 며칠 혹은 몇 주 동안 우리가 만들었던 프로그램들은 데이터를 처리하지는 않았습니다. 이 장에서 다루는 것은 전부 데이터에 관련된 것입니다. 여기에서 필요한 것이 바로 LINQ입니다. LINQ는 간단하면 서도 직관적인 방식으로 데이터를 질의할 뿐만 아니라 다른 데이터 소스에 있는 데이터들을 그룹 짓고 합 칠 수 있게 합니다. 여러분의 데이터를 관리 보관소에 맡기기만 하면, 윈도우 스토어 앱은 데이터를 처리 하여 사용자가 쉽게 데이터를 다룰 수 있게 해 줍니다. 심지어 데이터의 세부사항을 볼 수 있게 해 주죠.

지미는 캡틴 어메이징의 슈퍼 팬입니다

694

그런데 그의 책이 넘치네요

695

LINQ는 다양한 소스에서 데이터를 추출해 낼 수 있어요

696

.NET 컬렉션은 이미 LINQ를 사용할 준비를 마쳤어요

697

LINQ를 사용하면 쿼리를 쉽게 작성할 수 있어요

698

LINQ는 간단한데, 쿼리는 복잡해요

699

쿼리 해부

700

지미는 도움이 필요합니다

702

지미의 앱을 만들어 봅시다

704

new 키워드를 사용해서 익명 유형을 만들어 봅시다

707

LINQ는 다재다능합니다

710

지미의 앱에 새 쿼리를 추가해 봅시다

712

LINQ 자석 연습문제

715

LINQ 자석 연습문제 정답

716

LINQ는 쿼리 결과를 묶어서 보여 줄 수 있습니다

717

값을 그룹으로 묶어봅시다

718

두 개의 컬렉션을 하나의 시퀀스로 합치려면 조인을 사용하세요

721

꽤 많은 돈을 절약한 지미

722

데이터를 탐색하기 위한 시맨틱 줌 사용하기

728

지미의 앱에 시맨틱 줌 추가하기

730

지미가 해냈습니다

735

데이터 탐색을 위한 분할 응용 프로그램(Split App) 템플릿

736

27


목차

15

이벤트와 대리자 코드가 은밀히 처리하는 것 객체들이 자기 자신에 대해 생각하기 시작했습니다. 객체들이 하는 일들을 계속 제어할 수는 없습니다. 가끔씩은 날벼락 같은 일이 일어나죠. 이럴 때 여러 분은 객체들이 발생하는 사건에 대해 반응할 수 있을 정도로 똑똑해지길 원합니다. 이벤트란 바로 이런 것이며, 그 이상도 이하도 아닙니다. 하나의 객체가 이벤트를 발행하면 다른 객체들은 그 이벤트를 구독 하고 함께 일하는 모든 사람들은 계속 자기 할 일을 하죠. 정말 대단한 점은 같은 이벤트에 반응하는 객 체들이 너무나 많다는 점인데, 이런 경우에는 콜백(callback)을 사용하면 매우 편리합니다. 객체가 스스로 생각할 수 있다면 멋지지 않겠어요?

746

이벤트가 발생할 때 객체는 귀를 쫑긋 세우고 있습니다

747

한 객체에서 이벤트가 발생하면 다른 객체는 그 이벤트를 경청합니다

748

그러고 나서 다른 객체들이 이벤트를 처리합니다

749

점(.)으로 연결하기

750

IDE는 이벤트 핸들러를 자동으로 생성해 줍니다

754

제네릭 EventHandler를 사용하면 여러분 자신의 이벤트 유형을 정의할 수 있습니다 760 윈폼은 여러 가지 이벤트를 사용합니다

~

Ba

llE

Um

c

ire

p

r 객체 28

개 vent 매

Fan

Pit

he

변수

BallInPlay 이벤트

객체

객체

761

하나의 이벤트와 여러 개의 핸들러

762

이벤트와 프로세스 수명 관리

764

지미의 앱에 프로세스 수명 관리를 추가하기

765

XAML 컨트롤은 라우트된 이벤트를 사용합니다

768

라우트된 이벤트를 살펴봅시다

769

이벤트 송신자와 수신자 연결하기

774

대리자는 실제 메서드 대신 일해 줍니다

775

행동에 나선 대리자

776

한 객체는 한 이벤트를 구독할 수 있습니다

779

구독자를 통제하기 위해서 콜백을 사용해 봅시다

780

콜백은 단지 대리자를 사용하는 또 다른 패턴입니다

782

MessageDialog로 콜백을 사용할 수 있습니다

784

대리자를 이용하여 윈도우 참 설정 사용하기

786


목차

16

MVVM 패턴으로 앱 설계하기 좋은 앱의 내부, 외부 구조 앱이 가꾸어야 하는 것은 꼭 외면만이 아닙니다. 설계를 생각할 때 무엇이 떠오르나요? 큰 빌딩을 설계하는 것? 아름답게 배치된 페이지? 미적으로 즐 거움을 주면서 내부가 잘 설계된 제품들을 떠올리나요? 이러한 요소들이 여러분의 앱에 적용되어야 합니다. 이번 장에서는 MVVM(Model-View-ViewModel) 패턴과 결합도가 느슨하고 잘 설계된 앱 을 만드는 방법에 대해 배워 봅니다. 또한 애니메이션과 시각적인 디자인을 위한 컨트롤 템플릿을 배 우게 됩니다. 데이터 바인딩을 쉽게 해 주는 컨버터와 탄탄히 다져진 C# 기초를 토대로 여러분이 원하 는 어떤 앱이라도 만들 수 있습니다.

VIEWEL MOD

헤드 퍼스트 농구 협회는 앱이 필요합니다

790

브라이언과 지미의 충돌

791

바인딩이나 데이터 작업을 위한 설계를 한다고요?

792

MVVM은 바인딩과 데이터를 디자인해 줍니다

793

MVVM 패턴으로 농구선발명단 앱을 만들어 봅시다

794

사용자 정의 컨트롤

797

심판은 스톱워치가 필요합니다

805

MVVM 패턴을 사용할 때, 앱의 상태를 고려해야 합니다

806

스톱워치 모델 만들기

807

이벤트는 상태변화를 알려 줍니다

808

스톱워치 뷰 만들기

809

스톱워치 뷰모델 추가하기

810

스톱워치 앱 완성하기

812

변환기는 바인딩을 이용해서 자동으로 값을 변환해 줍니다

814

변환기는 다양한 유형으로 작업할 수 있습니다

816

스타일은 컨트롤 유형의 외형을 바꿔줍니다

818

시각적 상태 변화에 따른 컨트롤의 반응

822

DoubleAnimation을 이용하여 두 값 표현하기

823

객체 애니메이션으로 객체 값 표현하기

824

같은 뷰모델을 이용하여 아날로그 스톱워치를 만들어 봅시다

825

UI 컨트롤도 인스턴스화할 수 있습니다

830

간단한 애니메이션 만들기

832

이미지 애니메이션을 위한 사용자 정의 컨트롤 만들기

833

벌이 날아다닙니다

834

TemsPanelTemplate을 이용하여 캔버스에 컨트롤을 바인딩해 봅시다

837

축하합니다(아직 끝난 건 아니에요)!

850

29


C# 실습3 인베이더(Invaders) 이번 실험실은 지난 몇 장에서 습득한 지식을 활용해 여러분이 작성하게 될 프로그램에 대 한 지침을 제공합니다.

30

비디오 게임의 산 증인

852

아직 할 일이 더 남아 있습니다…

873


목차

17

보너스 프로젝트 윈도우 폰 앱 만들기 이미 여러분은 윈도우 폰 앱을 만들 준비가 되었습니다. 클래스, 객체, XAML, 캡슐화, 상속, 다형성, LINQ, MVVM… 여러분은 윈도우 스토어 앱과 데스크톱 앱 을 만드는 데 필요한 기술들을 배웠습니다. 여러분이 배운 기술로 윈도우 폰 앱을 만들 수 있다는 사실 을 알고 계셨나요? 거짓이 아닙니다! 이번 보너스 프로젝트에서는 윈도우 폰을 위한 게임을 만들어 봅 니다. 윈도우 폰이 없으시다고요? 걱정하지 마세요. 여러분은 윈도우 폰 에뮬레이터로 게임을 실행할 수 있습니다. 자 그럼 시작해 볼까요!

벌들의 침입!

876

시작하기 전에…

877

31


목차

부록 I

남은 것들 이 책에 넣고자 했던 11가지 내용 재미있는 것은 이제부터 시작됩니다! 지금까지 C#을 이용해서 강력한 소프트웨어를 만들기 위한 수많은 도구들을 소개하고 학습했지만, 이 책 한 권만으로 C#에 대한 모든 도구와 기술을 다룰 수는 없습니다. 이 책을 쓰면서 도대체 어떤 내용을 포함하고 어떤 내용을 제외해야 하는지 상당한 시간을 고민했습니다. 이 장에서는 이 책에서 언급하지 않은 내용 일부를 소개하고 있는데, 자세히 다루지는 않았지만 정말 중요하고 유용한 내용이며, 조금이 라도 도움이 되었으면 하는 바람입니다. #1. 윈도우 스토어에는 엄청나게 많은 것이 있습니다

32

890

#2 C# 기초학습

892

#3 네임스페이스와 어셈블리

898

#4. BackgroundWorker를 사용해서 반응적인 윈폼을 만들어 봅시다.

902

#5. Type 클래스와 GetType()

905

#6. IEquatable, Equals(), 동일한 것들에 대해서

906

#7. yield return으로 열거형 객체 생성하기

909

#8. 리펙터링

912

#9 익명 유형, 익명 메서드, 람다 표현식

914

#10 LINQ to XML (LINQ로 XML 데이터 조회하기)

916

#11 Windows Presentation Foundation

918


이 책의 활용 방법 서문 세상에 이런 C# 책이 있다니 믿을 수가 없군요!

’하는 을 왜 이런 식으로 만들었을까? 여기에서는 ‘C# 프로그래밍 서적 습니다. 독자들의 궁금증을 해소해 보겠

33


이 책을 사용하는 방법

누구를 위한 책일까요? 다음의 질문 모두에 “예”라고 대답할 수 있다면… 1

C#을 배우고자 하십니까?

2

책을 읽는 것에 그치지 않고 뭔가를 직접 해 봄으로써 배우길 원하십니까?

3

지루하고 학구적인 강의보다는 파티에서의 즐거운 대화를 선호하십니까?

그렇다면 이 책은 바로 당신을 위한 책입니다.

그러면 어떤 독자들에게 이 책이 맞지 않을까요? 다음의 질문 중 하나라도 “예”라고 대답할 수 있다면…

1

수많은 코드를 보면 혼란스럽고 머리가 지끈거리는 증상이 있나요?

2

레퍼런스 책을 원하는 전문적인 C++ 혹은 자바 개발자입니까?

3

뭔가 색다른 것을 시도하는 것이 두렵습니까? 톡톡 튀는 옷을 입느 니 차라리 누더기 옷을 걸치고 다니는 편이 낫다고 생각하십니까? C# 개념을 의인화해 놓은 책은 제대로 된 기술서가 될 수 없다고 생 각하십니까?

다른 프로그래밍 언어를 알고 있나요? 지금 바로 C#을 실무에서 쓰고 싶다고요? 이미 C# 개발 경험이 있지만, XAML과 MVVM(Model-ViewViewModel)과 윈도우 앱 스토어 개발을 조금 더 배우고 싶나요? 많은 양의 코드를 작성하며 연습하고 싶나요? 그렇다면 이 책을 보면 됩니다. 당신처럼 많은 사람이 이러한 이유로 이 책을 선택했습니다.

프로그래밍 경험이 없는 사람에게 이 책을 추천합니다. 호기심과 흥미만 있으면 돼요! 프로그래밍 경험이 없는 수많은 초보자가 이미 『Head First C#』 을 보며 C#을 배웠습니다. 여러분도 할 수 있습니다!

그렇다면 이 책은 당신에게는 적합하지 않습니다.

주목

C#을 학습하기 위해서 윈도우 8이 꼭 필요하진 않습니다.

이 책에서는 .NET과 C#의 최신 기술을 담았습니다. 여기에 있는 많은 프로젝트는 마이크로소프트의 최신 버전인(이 책의 출판 시점에서) 윈도우 8을 기반으로 하고 있습니다. 그러나 저희는 윈도우 8 이 전 버전에서도 동작할 수 있도록 많은 노력을 기울였습니다. 여러분은 웹 사이트에 가서 바뀐 프로젝트의 PDF를 내려받으면 됩니다. 우리는 반복되는 페이지양을 최소화하기 위해 최선을 다했습니다. PDF 1 장에서는 대체한 내용이 많습니다. 그러므로 첫 번째 프로젝트를 위해 책을 건너뛸 필요가 없습니다. 2장에서는 다섯 페이지가 다릅니다. 3장부터 10장까지는 모든 버전의 윈도우를 사용할 수 있습니다. 34

서문

많은 독자들이 윈도우 7, 윈도우 2003 혹은 다른 버전의 윈도우를 사용하고 있습니다. 따라서 여러분이 어떤 버전의 윈도우에서든 사용할 수 있도록 정보를 제공할 겁니다(PDF 링크는 1장에 있습니다).


서문

지금쯤 여러분은 이런 생각을 하고 있겠죠? “어떻게 이런 걸 제대로 된 C# 책이라고 할 수 있지?” “이런 그림은 왜 집어넣었을까?” “정말 이런 식으로 뭔가를 배울 수 있을까?”

여러분의 두뇌는 이런 식으로 동작합니다

여러분의 두뇌는 이 런 것을 중요하다 고 여긴답 니다.

여러분의 머리는 항상 새로운 것을 갈망합니다. 항상 뭔가 특이한 것을 기 다리고 찾고 있지요. 원래 두뇌란 그런 것이랍니다. 그리고 이런 특징은 생존을 위해 반드시 필요합니다. 그렇다면 일상적이고 흔하디 흔한, 너무나도 평범한 것을 접할 때는 어떤 일이 일어날까요? 두뇌에서는 정말 해야 하는 일(즉, 정말 중요한 것을 기 억하는 일)을 방해하는 것을 모두 거부하려고 합니다. 지루한 것을 굳이 기 억하려고 하지 않지요. 결국 흔해 빠진, 별로 중요할 것 같지 않은 내용은 ‘중요하지 않은 것을 차단해 버리는’ 필터에서 걸러지고 맙니다. 그러면 두뇌는 무엇이 중요한지 어떻게 판단할까요? 어느 날 등산을 갔는 데 호랑이가 앞에 나타났다고 가정해 봅시다. 여러분의 머릿속에서는 무 슨 일이 일어날까요? 뉴런이 갑자기 폭발하면서 감정이 북받치게 됩니다. 화학 물질이 쭉쭉 솟 아나지요. 그래서 여러분의 두뇌에서는 다음과 같은 것을 깨닫게 됩니다. 이건 정말 중요한 거야! 잊어버리면 안 돼!

런 두뇌는 이 여러분의 가치가 할 것을 기억 답니다. 긴 없다고 여

휴, 이 지루하고 따분한 책도 700페이지만 더 보면 되겠군.

하지만 집이나 도서관에 있다고 상상해 봅시다. 안전하고 따뜻하며 호랑 이가 나타날 리가 없습니다. 거기에서 공부하고 시험을 준비하거나 직장 상사가 일주일 혹은 길어도 열흘 안에 모두 마스터하라고 하는 기술적인 문제를 공부하는 경우를 생각해 보세요. 한 가지 문제가 있습니다. 여러분의 두뇌는 명백히 중요하지 않은 내용을 저장하느라 중요한 내용을 저장할 자리가 모자라게 되는 것을 싫어합니 다. 호랑이나 화재의 위험, 파티에서 찍은 사진을 페이스북(Facebook)에 올려 놓지 않아야 하는 이유 같이 중요한 것을 저장하려면 쓸데없는 내용 은 무시하는 것이 낫지요. 그리고 두뇌에게 “여보게, 이 책이 아무리 지루하고 별 감흥이 느껴지지 않아도 이 내용은 정말 기억해야 한단 말이야”라고 말하는 것이 결코 쉽 지는 않습니다. 지금 여기예요 �

35


이 책을 사용하는 방법

고 우리는 헤드 퍼스트 독자를 학생 이라

간주하겠습니다.

야 되겠죠. 여러분의 머 이해하고 잊어버리지 말아 것을 어떤 로 첫째 요? 해야 할까 연구 결과에 뭔가를 배우려면 무엇을 학습 심리학 분야의 최근 . 인지과학, 신경생물학, 니다 아닙 기는 이야 는 돌아가도록 하려면 다음 리에 지식을 밀어 넣자 고 합니다. 머리가 쌩쌩하게 하다 부족 는 으로 트만 텍스 의하면 종이 위에 적혀 있는 . 니다 과 같이 하는 것이 좋습

헤드 퍼스트 학습 원리

기억하기도 좋고 학 을 사용하는 것이 훨씬 더 그림 다는 것보 있는 만 향 시각화하자. 단어 에 의하면 최대 89%까지 니다(기억 및 전이 분야 연구 안이 그림 . 습 효과를 향상시킬 수 있습 니다 좋습 데도 더 을 사용하는 것이 이해하는 상된다고 합니다). 또한 그림 어진 위치에 집어넣는 경 동떨 과 그림 면 그림 아래, 또는 올라간다 나 근처에 단어를 집어넣으 할 가능성이 두 배 이상 된 문제를 성공적으로 해결 관련 과 내용 그 비해 우에

고 합니다.

형식적인 말투로 설명 에 의하면 내용을 딱딱하고

의 연구 나은 점수 의 문체를 사용하자. 최근 트에서 40% 정도까지 더 좀 더 개인적이고 대화 형식 로 설명하면 학습 후 테스

대화를 나누는 듯한 문체 하는 경우에 비해 개인적인 주는 식으로 평이한 용어 하지 말고 이야기를 들려 하려 를 강의 다. 합니 고 를 받을 수 있다 디너 파티와 강의 중 좋지 않습니다. 재미있는 별로 는 말투 한 심각 너무 를 사용해 보세요. 쏠릴까요? 에서 어떤 것에 관심이 더 않으면 머릿속에서 그 뉴런을 활발하게 사용하지 즉, 자. 만들 록 있도 수 하고 새로운 지 더 깊이 생각할 문제를 풀고 결과를 유추 않습니다. 항상 독자에게 그리고 그렇 다. 리 특별한 일이 일어나지 합니 넣을 수 있어야 , 흥미, 호기심, 사기를 불어 두뇌를 모 양쪽 식을 만들어낼 수 있는 동기 고 연습문제, 질문, 그리 을 고취시킬 수 있을 만한 의식 도전 뭔가 면 하려 게 제공해야 합니다. 감각을 활용할 수 있는 일을 두 써야 하는 활동, 여러 한페 ‘아, 이거 꼭 봐야 하는데, . 아마도 거의 모든 사람들이 하자 록 있 있도 재미 수 것, 일 기울 않은 언제나 일상적이지 독자가 계속해서 주의를 것입니다. 사람의 두뇌는 있을 이 경험 반 본 해 것이 는 생각 고 기술적인 내용을 배우 이지만 봐도 졸려 죽겠네’라 기울이게 됩니다. 새롭고 를 주의 것에 있 못한 수 치 들일 것, 예상 는 훨씬 더 빠르게 받아 고 특이한 것, 눈길을 끄는 만 않다면 여러분의 두뇌 하지 지루 . 니다 아닙 드시 지루해야 되는 것은 을 것입니다.

하는지에 따 내용이 얼마나 감성을 자극

. 뭔가를 기억하는 능력은 그 독자들의 감성을 자극하라 매우 쉽게 기억할 수 있 관심을 가지고 있는 것은

이 좋아하는 것, 많은 해서 한 소년과 강아 라 크게 달라집니다. 자신 할 수 있습니다. 뭐 그렇다고 기억 하게 수월 면 있으 나 남들 습니다. 뭔가를 느낄 수 아닙니다. 퍼즐을 풀어내거 같은 것을 알아보려는 것은 사연 한 뭉클 되었 가슴 알게 의 사이 하게 지 는 모르는 것을 더 정확 것을 알았을 때, 다른 친구 하는 을 생각 감정 다고 같은 어렵 이 모두 아니면 ‘내가 해냈어!’와 심, 재미, ‘오, 이럴 수가!’, 호기 움, 놀라 되는 게 을 때 느끼 다. 에 크게 도움이 된다고 합니 느낄 수 있다면 배우는 과정

36

서문


서문

초인지: 생각하는 것에 대해 생각하는 것 정말 배우고 싶다면, 더 빨리 그리고 자세하게 배우고 싶다면 자신이 어떤 식으로 주 의를 기울이는지에 대해 주의를 기울일 필요가 있습니다. 생각하는 방법에 대해 생각 해 보고, 학습하는 방법에 대해 배워야 합니다. 대부분의 사람들은 학창시절에 초인지(Metacognition) 또는 학습 이론 등에 대해 배 운 적이 없을 것입니다. 그냥 배워야 했을 뿐, 배우는 방법은 배우지 못했을 것입니다.

어떻게 하면 내 머릿속에서 이 내용을 중요하다고 생각하게 만들 수 있을까?

일단 이 책을 읽고 있는 독자라면 C#을 이용해 프로그램을 만드는 방법을 배우고 싶 어서 읽고 있는 것이겠죠? 그리고 가능하면 빠른 시간 안에 배우고 싶을 것입니다. 이 책을 볼 때, 그리고 어떤 형태로든지 공부를 할 때 최대한 많은 것을 얻어내려면 두 뇌를 자유자재로 쓸 수 있어야 합니다. 자신의 두뇌를 그 내용에만 집중해야 합니다. 그렇게 하려면 여러분의 두뇌에서 새로 배우는 내용을 아주 중요한 것, 생존에 필수적인 것이라고 느끼게 만들어야 합니다. 즉, 호랑이만큼이 나 중요하다고 느끼게 만들어야 합니다. 그렇지 않으면 새로운 내용을 받아들이지 않으려고 하는 두뇌와 끊임없이 씨름할 수밖에 없습니다.

어떻게 하면 두뇌에서 이 내용을 중요하다고 생각하게 만들 수 있을까? 느리고 지루한 방법도 있고 빠르고 효율적인 방법도 있습니다. 느린 방법은 반복에 의지하는 것입니다. 같은 내용을 계속 반복해서 주입 하면 아무리 재미없는 내용이라도 배우고 기억할 수 있습니다. 충분 히 여러 번 반복하다 보면 ‘사실 별로 중요한 것 같진 않지만 똑같은 걸 계속 반복해서 보고 있으니 일단 기억은 해 주자’라는 생각이 들겠죠. 빠른 방법은 두뇌 활동, 그중에서도 서로 다른 유형의 두뇌 활동을 증가시킬 수 있는 방 법을 활용하는 것입니다. 앞 페이지에 있는 내용은 모두 이렇게 두뇌 활동을 증가시키기 위한 것이며, 학습 과정에 도움이 된다고 밝혀진 방법입니다. 예를 들어 어떤 단어를 설 명하는 그림 안에 그 단어를 넣어 두면 (그림 밑에서 그림을 설명하거나 본문에서 설명하 는 경우에 비해) 그 단어와 그림 사이의 관계를 이해하기 위해 두뇌가 활발하게 움직이 면서 더 많은 뉴런이 활성화됩니다. 더 많은 뉴런이 활성화되면 뇌에서 그 내용을 집중 해서 살펴볼 가치가 있는 것이라고 인식할 가능성이 높이지고, 결과적으로 기억할 수 있 는 확률도 높아지겠죠. 대화하는 듯한 문체가 더 나은 이유는, 보통 대화를 할 때 상대방이 하는 말을 들으면서 그것을 이해하고 내용을 따라잡기 위해 노력하기 때문입니다. 그리고 더 중요한 것은 그 런 대화가 책과 독자 사이의 대화인 경우에도 우리의 뇌에서는 별로 다르게 느끼지 않는 다는 점입니다. 하지만 문체가 딱딱하고 재미없으면 수백 명의 학생이 대형 강의실에 앉 아서 건성으로 수업을 들을 때와 마찬가지로 학습 효과가 떨어진다고 합니다. 하지만 그림과 대화형 문체가 전부는 아닙니다. 지금 여기예요 �

37


이 책을 사용하는 방법

이 책에서는 이렇게 했습니다 이 책에는 그림이 많습니다. 여러분의 두뇌는 문자 위주의 텍스트보다는 시각적인 쪽에 더 민감하게 반응하기 때문이지요. 두뇌에서 받아들이는 정도를 생각해 보면 그림 한 장이 수 천 개의 단어보다 낫습니다. 백문이 불여일견이라는 말이 정말 딱 맞습니다. 그리고 텍스트 와 그림을 함께 사용할 때 텍스트를 그림에 포함시켰습니다. 텍스트를 그림 밑에 설명하는 식으로 적어놓거나 다른 곳에 있는 텍스트에 적어놓기보다는 그림 안에 넣었을 때 더 교육 효과가 좋기 때문이죠.

청사진을 만들 때 집 내부 구조물의 배치도를 그려 넣듯이 클래스를 선언할 때 메서드를 정의합니다.

청사진 하나로 똑같은 집을 여러 채 지을 수 있는 것처럼 클래스 하나로 객체를 여러 개 만들 수 있습니다.

이 책에서는 같은 내용을 서로 다른 방법으로, 서로 다른 매체를 통해서 여러 감각을 거쳐서 전달하여 설명한 내용이 머리에 더 쏙쏙 잘 들어갈 수 있도록 했습니다. 여러 번 반복하면 그 만큼 효과가 좋아지니까요. 개념과 그림을 예상하기 힘든 방식으로 활용했습니다. 여러분의 두뇌는 새로운 것을 더 잘 받아들이 기 때문입니다. 그리고 그림과 개념을 통해 감성을 자극할 수 있도록 했습니다. 두뇌에서 어떤 감흥 을 불러일으킬 만한 것을 더 빠르게 받아들이기 때문이지요. 독자가 뭔가를 느낄 수 있다면 그만큼 머 릿속에 오래 남습니다. 그 감정이 사소한 유머, 놀라움, 홍미거리 같은 것에 불과할지라도 말이죠. 이 책에서는 개인적인 대화를 하는 듯한 문체를 사용했습니다. 여러분의 두뇌는 앉아서 강의 를 듣는다고 느낄 때보다는 상대방과 대화를 한다고 느낄 때 더 집중을 잘하기 때문이지요. 책을 읽을 때도 마찬가지입니다. 이 책에는 수십 가지의 연습문제가 있습니다. 어떤 것에 대한 내용을 읽을 때보다는 실제로 어떤 일을 할 때 더 잘 배울 수 있고 더 잘 기억할 수 있기 때문입니다. 그리고 문제의 난이도 는 조금 어려운 느낌이 드는 정도로, 하지만 어느 정도 노력하면 풀 수 있을 정도로 맞추었습 니다. 대부분의 독자들이 좋아할 만한 정도의 난이도로 맞추었으니 꼭 풀어보시기 바랍니다. 그리고 여러 가지 학습 유형을 섞어서 사용했습니다. 단계별로 공부하는 쪽을 선호하는 독자 들도 있지만, 큰 그림을 먼저 파악하는 것을 좋아하는 독자들도 있고, 코드 예제만 보면 된다 고 생각하는 독자들도 있기 때문입니다. 하지만 어느 것을 더 좋아하든 같은 내용을 여러 방 법으로 표현하는 방식은 모든 독자들에게 도움이 될 것입니다. 독자들의 양쪽 뇌를 모두 사용할 수 있는 내용을 포함시켰습니다. 두뇌의 더 많은 부분을 사 용할수록 더 많은 것을 배우고 기억할 수 있으며, 더 오랫동안 집중할 수 있기 때문이지요. 한 쪽 두뇌를 사용하고 있을 때는 나머지 한쪽 두뇌가 쉴 수 있기 때문에 더 오랜 시간 동안 공 부할 때도 높은 효율을 유지할 수 있습니다. 두 가지 이상의 관점을 보여 주는 이야기와 연습문제를 포함시켰습니다. 자신이 직접 어떤 것 을 평가하거나 판단을 하면 더 깊이 이해할 수 있기 때문이지요. 독자 여러분의 도전 의식을 고취시킬 수 있을만한 연습문제와 뚜렷한 정답이 없는 질문을 포 함시켰습니다. 여러분의 두뇌는 실제로 뭔가를 할 때 더 많은 것을 배우고 더 잘 기억할 수 있기 때문이지요(체육관에서 운동하는 사람들을 쳐다보기만 하는 것으로는 운동이 될 턱이 없죠? 공부하는 것도 똑같습니다). 하지만 항상 열심히 할 가치가 있는 것만 열심히 할 수 있 도록 노력했습니다. 너무 이해하기 힘든 예제를 붙잡고 낑낑대거나 어려운 전문 용어만 잔뜩 들어 있는 짤막한 문장을 해석하느라 머리가 아픈 일은 없도록 했습니다. 이 책에서는 여러 명의 사람들이 등장합니다. 이야기나 예제, 그림 등에 말이지요. 사람들은 사물보다는 사람에게 더 많은 관심을 가지게 된다고 합니다.

38

서문

핵심정리 난롯가 담소


서문

두뇌를 정복하는 방법 이제 남은 것은 여러분의 몫입니다. 여기에 나와 있는 팁에서부터 시작해 보세요. 자 신의 두뇌에서 어떤 반응을 보이는지 살펴보고 어떤 것이 적절하고 어떤 것이 부적절 한지 알아 봅시다. 항상 새로운 것을 시도해 보세요. 잘라서 냉장고 문에 붙여 놓으세요.

1

천천히 하세요. 더 많이 이해할수록 외울 내용은 줄어들게 마련입니다.

6

소리 내어 읽을 때는 두뇌에서 눈으로 읽기만 할 때와 는 다른 부분이 활성화됩니다. 뭔가를 이해하려고 하 거나 나중에 더 잘 기억하고 싶다면 크게 소리를 내어 말해 보세요. 다른 사람한테 설명하면 더 좋습니다. 더 바르게 배울 수 있는 데다가 책을 읽는 동안에는 몰랐 던 것도 새삼 알게 될 수 있기 때문입니다.

그냥 무작정 읽지 맙시다. 잠깐씩 쉬면서 생각을 해 봅 시다. 책에 있는 질문을 보고 바로 정답으로 넘어가면 안 됩니다. 누군가 다른 사람이 정말로 질문을 하고 있 다고 생각해 보세요. 더 깊이, 신중하게 생각할수록 더 잘 배우고 기억할 수 있습니다. 7 2

연습문제를 꼭 풀어봅시다. 간단하게 메모를 하는 것도 좋습니다.

8 반드시 모두 읽어보세요. 그냥 참고 자료로 수록한 것 이 아니라 이 책의 핵심 내용의 일부분입니다. 4

잠자리에 들기 직전에 마지막으로 이 책을 읽어 보세요.

학습 과정의 일부(특히 장기 기억으로의 전이 과정)는 책을 놓은 후에 일어납니다. 여러분의 두뇌에서 어떤 처리 과정을 처리하는 데에는 시간이 필요하기 때문 이죠. 그런 처리 작업 중간에 다른 것이 끼어들면 새로 배운 것을 잊어버릴 가능성이 높아집니다. 5

물을 마십시다. 될 수 있으면 많이 마시는 것이 좋습니다.

머리가 잘 돌아가려면 물이 많이 필요합니다. 수분이 부족하면(목이 마르다는 느낌이 들면 수분이 부족한 것입니다) 인지기능이 저하됩니다.

자신의 뇌의 반응에 귀를 기울여 봅시다.

여러분의 두뇌가 너무 힘들어하고 있지는 않은지 관심 을 가져봅시다. 대강 훑어보고 있거나 방금 읽은 것을 바로 잊어버린다는 느낌이 들면 잠시 쉬는 것이 좋습 니다. 일단 어느 정도 공부를 하고 나면 무조건 파고든 다고 해서 더 빨리 배울 수 있는 것이 아닙니다. 오히 려 공부하는 데 방해가 될 수도 있습니다.

연습문제는 독자들을 위해 수록한 것입니다. 그냥 답만 보고 넘어가면 다른 사람이 대신 운동을 해 주는 것을 구경하는 것 과 마찬가지입니다. 반드시 직접 필기도구를 들고 문제를 해 결해 봅시다. 실제로 배우는 과정에서 몸을 움직이는 것이 배 우는 데 도움이 된다고 합니다. 3 “바보 같은 질문이란 없습니다” 부분을 반드시 읽어 보세요.

새로 배운 것을 소리 내어 말해 봅시다.

뭔가를 느껴봅시다!

여러분의 두뇌가 지금 공부하는 것이 중요하다고 느낄 수 있어야 합니다. 책 속에 나와 있는 이야기에 몰입해 보세요. 그리고 책에 나와 있는 사진에 직접 제목을 붙 여 보세요. 아무것도 느끼지 않는 것보다는 썰렁한 농 담을 보고 비웃기라도 하는 쪽이 낫습니다. 9 일단 코딩을 많이 해 보세요. 프로그램을 배우는 방법은 딱 한 가지뿐입니다. 바로 많은 코드를 작성하는 것이며, 이 책 전체를 통해 여러 분이 하게 될 것들입니다. 코딩에 능숙해지는 지름길 은 연습밖에 없습니다. 건너뛰지 말고 모든 연습문제 를 꼭 풀어보세요. 문제를 해결하면서 많은 것을 배울 수 있습니다. 문제를 풀다가 막힐 때 정답을 보는 것 에 주저하지 마세요(사소한 문제로 막힐 가능성이 큽 니다)! 하지만 정답을 보기 전에 문제를 풀려고 노력 해야 합니다. 이렇게 하면 다음 장으로 넘어가기 전에 확실히 이해할 수 있을 거예요. 지금 여기예요 �

39


이 책을 사용하는 방법

이 책의 학습을 위해 필요한 것

이 책은 Visual Studio 2013 Express 에디션에서 테스트했습니다(원서 는 Visual Studio 2012 Express로 되어 있습니다. 화면이 조금 다를 수 있지만, 실습하는 데 문제가 없습니다). 향후 최신 버전이 나올 거지만, 마이 크로소프트는 보통 이전 버전을 다운로드할 수 있게 만들어 놓습니다.

이 책은 Visual Studio Express 2013 for Windows와 Visual Studio Express 2013 for Windows Desktop을 사용해 작성했습 니다(두 버전 모두 설치하세요). 이 책에 나오는 모든 화면도 Visual Studio Express 2013이므로 이 버전을 사용하세요. Visual Studio 2013 Professional, Premium, Ultimate 혹은 Test Professional 에디션을 사용해도 됩니다. 그러나 이 책의 내용과 약간 의 차이가 있을 수 있습니다(하지만 연습문제를 코딩하는 데 문제가 되지는 않습니다).

Visual Studio 2013 Express 에디션

¥

Visual Studio Express 2013 for Windows는 마이크로소프트의 웹 페이지에서 무료로 다운로드할 수 있습니다. 다른 에디션과 이전 버전들도 여기에서 다운로드할 수 있습니다. http://www.visualstudio.com/downloads/download-visual-studio-vs

“지금 설치”를 클릭해서 비주얼 스튜디오를 다운로드하세요.

30일 안에 Visual Studio 에 Microsoft 계정으로 로그인하면 여러 컴퓨터에서 설정을 동기화하고 제품을 등록할 수 있습니다.

꼭 윈도우 8이 필요한 것은 아닙니다. 윈도우 7, 윈도우 2003 혹은 다른 이전 버전의 윈도우 사용자들도 이 책을 볼 수 있습니다. 이에 해당한다면, 세심하게 신경 써서 만든 윈도우 스토어 프로젝트의 대체 버전인 무료 PDF를 받으세요. 여러분이 해야 할 것은 다음과 같습니다.

¥

이 책의 웹 사이트에서 WPF 파일을 다운로드하세요(http://www.hanbit.co.kr/exam/2165). PDF 1장에서는 대부분이 바뀌었고, 2 장에서는 다섯 페이지가 다릅니다.

¥

3장에서 9장 사이에 나오는 두 개의 실습은 윈도우 8로 하지 않아도 됩니다. 이 실습들은 Visual Studio 2010(심지어는 2008)에서도 동작합니다. 그러나 이 책의 화면과는 다를 것입니다.

¥

그리고 나머지 부분은, PDF의 WPF(Windows Presentation Foundation)를 이용해서 윈도우 스토어 앱(윈도우 8이 필요합니다) 대신 데스크톱 앱으로 중요한 C#의 개념을 배우게 됩니다. 첫 장부터 시작하거나, ‘부록: 남은 것들(이 책에 넣고자 했던 11가지 내용)’을 읽고 시작하셔도 무방합니다!

40

서문


서문

마지막으로 알아 둬야 할 몇 가지

하기 쉽게 어려운 개념을 이해 어요. 이 책은 레퍼런스용 책이 아니라 학습서입니다. 그래서 내용 설명에 방해될 만한 부분은 최대한 생 그림을 많이 넣었 략했습니다. 그리고 이 책은 앞에서 배운 내용을 알아야만 뒷부분의 내용을 이해할 수 있는 형태로 만들었으므로 적어도 처음 읽을 때는 맨 앞부터 순서대로 읽어야 합니다.

연습문제는 꼭 풀어봐야 합니다. 연습문제, 퍼즐, 독자들이 직접 풀어보라고 해 놓은 부분들은 그냥 장식품이 아닙니다. 엄연히 이 책의 핵심 요소입니다. 암기하는 데 도움을 주기 위한 것도 있고, 이해하는 데 도움을 주기 위한 것 도 있고, 배운 내용을 응용하는 데 도움을 주기 위한 것도 있습니다. 연습문제는 절대로 건너뛰지 맙시다. 수영장 퍼즐을 꼭 풀어볼 필요는 없지만 용어나 단어들을 다른 관점에서 생각해 볼 만한

 cia

Agent

mi5 gent A

좋은 기회라고 생각하고 풀어보세요.

중복되어 있는 내용들은 일부러 그렇게 해 놓은 것이며, 중요합니다. 헤드 퍼스트 시리즈가 다른 책들과 가장 크게 다른 점은, 여러분이 제대로 알고 넘어가도록 만들 었다는 데 있습니다. 이 책을 다 읽었을 때 배운 것을 최대한 많이 기억할 수 있어야 합니다. 레퍼 런스 서적들은 독자들이 확실히 기억하는 것을 주된 목표로 만들어진 책이 아닙니다. 하지만 헤 드 퍼스트 시리즈는 학습을 위한 책이기 때문에 같은 개념이 여러 번 반복적으로 등장하는 것을

‘연필을 깎으며’ 문제를 모두 풀어봐야 합니다.

볼 수 있을 것입니다.

모든 연습문제는 꼭 풀어보세요. 이 책을 읽는 여러분이 C#을 사용해서 프로그램을 작성하고 싶어한다는 가정하에 이 책을 만들었 습니다. 여러분이 구더기가 무서워 장도 못 담글 것이라 생각하지 않습니다. 모든 연습문제를 풀 어봄으로써 자신의 실력이 한층 발전한 것을 발견하게 될 것입니다. 특히 ‘직접 해 봅시다!’라고 표 시한 부분에서는 차근차근 한 단계씩 밟아가면서 특정 문제를 해결하도록 구성했습니다. 또한 운 동화 로고가 있는 연습문제에는 여러분이 해결해야 할 문제와 정답을 배치했습니다. 먼저 문제를 풀기 위해 노력한다면 정답을 보는 것을 창피하게 생각할 필요는 없습니다. 이 책의 코드 예제들은 http://www.hanbit.co.kr/exam/2165 웹 사이트에서 내려받을 수 있습 니다.

‘브레인 파워’ 연습문제는 정답이 없습니다.

운동화 로고가 있는 연습문제는 정말 중요합니다! 정말 C#을 배우고 싶 다면 건너뛰지 마세요.

고 수영장 퍼즐을 꼭 풀어보라 적인 논리 강요하진 않겠지만, 함정에 빠지지 않으려면 풀어보는 게 좋을 거예요.

어떤 문제에는 아예 정답이라는 게 있을 수 없고, 어떤 문제에서는 문제 자체에서 독자들이 내린 결론이 과연 맞을지, 어떤 상황에서 맞는지를 결정해야 할 수도 있습니다. 브레인 파워 연습문제 중에는 올바른 방향을 알려줄 만한 힌트가 들어 있는 것도 있습니다. 여러분의 머리를 적극적으 로 활용하세요!

지금 여기예요 �

41


테크니컬 리뷰팀

테크니컬 리뷰팀

크리스 버로스

리사 켈너 레베카 둔-크렌

그 외 : 조 알바하리, 제이 힐야드, 아얌 싱, 테어도르, 피터 리치, 빌 미텔스키, 엔디 파커, 웨인 브래드니, 데이브 머독, 브리짓 줄리 랜더스, 닉 팔디노, 데이비드 스터링. 그리고 앨런 올렛 T. 그레이엄 독자와 책의 잘못된 부분을 알려준 많은 독자들에게 감사합니다!!

조니 할리프

데이빗 스털링

이 책을 검토하신 분들 책의 완성도를 높여 준 뛰어난 테크니컬 리뷰어 덕분에 여러분이 읽고 있는 이 책은 오류가 거의 없습니다. 이 분들께 감사 드립니다. 아주 뛰어난 검증 팀이 없었더라면 커다란 오류를 담은 채로 책을 출간했을 거예요. 먼저 이 책을 좀 더 읽기 쉽게 도와주신 리사 켈너에게 깊은 감사를 드립니다. 그녀가 도와준 것이 벌써 아홉 번째예요. 고 마워요 리사! 그리고 수많은 조언을 해 주신 크리스 버로스, 레베카 둔-크렌, 데이빗 스털링에게도 특별히 감사를 드립니 다. 그리고 첫 번째 에디션을 검토해 준 조 알바하리와, 존 스킷에게 감사를 드립니다. 두 번째 에디션을 검토해 준 닉 팔 라디노에게도 감사를 드립니다. 크리스 버로스는 마이크로소프트의 C# 컴파일러팀 개발자로, C# 4.0의 언어적 특성에 대한 설계와 구현을 담당했다. 레베카 둔-크랜은 세마포어 솔루션(빅토리아, 캐나다에서 .NET 응용 프로그램을 전문으로 하는 커스터마이징 소프트웨 어 회사)의 창립 파트너이다. 그녀는 남편인 토비아스와 자녀인 소피아와 세바스티안 그리고 고양이, 세 마리의 닭과 함께 빅토리아에 살고 있다. 데이빗 스털링은 3년이 넘게 비주얼 C# 컴파일러팀에서 일하고 있다. 조니 할리프는 웹 스타트업인 Mural.ly 수석 아키텍트이자 공동 창업자이다. Mural.ly는 사용자들이 벽화(?)를 만들 수 있 도록 도와준다(하나의 큰 공간에 다양한 컨텐츠를 쉽고 유연하게 수집하는 환경 제공 - http://murally.com). 조니는 클 라우드와 높은 확장성 솔루션의 전문가이다. 그는 열정적인 러너(runner)이고 스포츠 펜이다. 42

서문


서문

감사의 글 편집자에게 … 이 책의 편집자인 코트니 내쉬에게 감사드립니다.

코트니 내쉬

오라일리팀 그 밖에도 많은 오라일리 팀원들께 감사드립니다. 특히 꼼꼼하게 교정을 봐준 멜 라니 야브로우, 트라우만-제이그, 레이첼 모나한에게 감사드립니다. 자진해서 시간을 내주고 이 책이 나오는 순간에 유일하게 온전한 정신으로 도움을 준 론 빌도우에게 감사드립니다. 언제나 사랑하는 메리 트레슬러, 당신과 일하게 될 날 을 손꼽아 기다릴게요. 앤디 오럼, 마이크 핸드릭슨, 로리 페트리키, 팀 오라일 리 그리고 샌더스 클라인 펠트에게 감사드립니다. 출판업계에서 최고로 명성이 높은 팀의 마르세 헤논, 사라 페이튼에게도 감사드립니다.

지금 여기예요 �

43



1 C# 시작하기

멋진 뭔가를 빠르게 만들어 봅시다! 길고 험난한 여정을 위한 준비가 되었어!

멋진 앱을 정말 빨리 만들고 싶습니까? C#을 쓰면 강력한 프로그래밍 언어와 훌륭한 도구를 자유자재로 활용할 수 있습니다. 그리고 비주얼 스튜디오 IDE를 이용하면 버튼이 제대로 작동하게 만들려고 복잡한 코드를 가지고 오랫동안 씨름할 필요도 없죠. 게다가 버튼에 대한 적은 양의 코드로 멋진 소프트웨어를 만들 수 있습니다. 뭔가 끌리는 느낌이 드나요? 그러면 다음 페이지로 넘어가서 프로그래밍을 시작해 봅시다.

새로운 장입니다    45


C#을 쓰면 편리합니다

C#을 배워야 하는 이유 C#과 비주얼 스튜디오 IDE를 이용하면 코드를 쉽고 빠르게 작성할 수 있습니다. C#에서 IDE는 여러분의 가장 좋은 친구이자 든든한 동반자입니다.

IDE에서는 이런 걸 자동으로 해 준답니다 프로그램을 만들기 시작하거나 폼에 버튼 하나라도 추가하려면 매번 반복적인 코드를 왕창 작성해야만 합니다. ic; using System; llections.Gener using System.Co ndows.Forms; using System.Wi gram Pro ew_ A_N namespace { Program static class { lication. /// <summary> entry point for the app /// The main > ary /// </summ [STAThread] Main() static void (); (false); { bleVisualStyles enderingDefault Application.Ena CompatibleTextR )); Application.Set m1( For w (ne Application.Run }

}

IDE(비주얼 스튜디오 통합 개발 환경) 는 C#을 사용하는 데 매우 중요합니다. 코드를 편집하고, 파일을 관리하고, 앱을 윈도우 스토어에 배포하는 것을 도와주는 프로그램이죠.

private void Ini tializeComponen { t() this.button1 = new System.Windo this.SuspendLay ws.Forms.Button out (); (); // // button1 // this.button1.Lo this.button1.Na cation = new System.Drawi ng.Point(105, this.button1.Si me = “button1”; 56); this.button1.Ta ze = new System.Drawing. Size(75, 23); this.button1.Te bIndex = 0; xt = “button1”; this.button1.Us this.button1.Cl eVisualStyleBackColor = true; ick += new Sys // tem.EventHandle r(this.button1_ // Form1 Click); // this.AutoScaleD this.AutoScaleM imensions = new System.Dr this.ClientSize ode = System.Windows.For awing.SizeF(8F, 16F); ms.AutoScaleMod this.Controls.A = new System.Drawing.Siz e(292, 267); e.Font; this.Name = “Fo dd(this.button1); this.Text = “Fo rm1”; rm1 ”; this.ResumeLayo ut(false); }

}

폼에 버튼을 그리는 데만 해도 이렇게 많은 코드가 필요합니 다. 폼에 시각적인 요소를 몇 개만 더 추가해도 코드는 열 배도 넘게 불어나고 말죠.

비주얼 스튜디오와 C#의 장점 C#과 같이 윈도우 프로그래밍용에 특화된 언어와 비주얼 스 튜디오 IDE를 활용하면 번거로운 부분은 여러분이 할 필요 가 없어집니다.

비주 체 얼객

.NET 프레임워크 솔루션

워크, 비주얼 C#, .NET 프레임 프로그래밍 스튜디오 IDE에는 차지하는 작업의 대다수를 리하는 구조가 지루한 코드를 처 다. 내장되어 있습니 데이터 접근

46    Chapter 1

이렇게 폼 나는 응용 프로그램을 훨씬 짧은 시간 안에 만들 수 있 죠.


C# 시작하기

C#과 비주얼 스튜디오 IDE가 있으면 여러모로 쉬워집니다 C#과 비주얼 스튜디오를 사용하면 별로 힘들지 않게 멋진 기 능을 활용할 수 있습니다. IDE는 다음과 같은 역할을 합니다.

1

응   용 프로그램을 빠르게 만들 수 있습니다. C#을 사용하면 간단하게 프로그램을 만들 수 있습니다. 언어 자체가 강력하면서도 배우기 쉬울 뿐만 아니라 비주얼 스튜디오 IDE에 서 꽤 많은 일을 자동으로 처리해 줍니다. 귀찮은 코딩 작업은 IDE에 맡기고 코드로 무 엇을 할 것인지에 대해서만 더 집중할 수 있죠.

2

예   쁜 사용자 인터페이스를 디자인할 수 있습니다. 비주얼 스튜디오에 있는 비주얼 디자 이너는 시중에 나와 있는 디자인 툴 중에서 사용하기에 가장 쉬운 편입니다. 워낙 많은 일을 대신 처리하므로 C# 응용 프로그램 개발에서 가장 만족스러운 것 중 하나가 바로 사용자 인터페이스를 쉽게 만들 수 있다는 점입니다. GUI를 새로 만드는 데 몇 시간씩 투자하지 않아도 프로페셔널한 프로그램을 만들 수 있습니다.

3

예쁘고 멋진 프로그램을 만들 수 있습니다. 사용자 인터페이스를 위한 비주얼 마크업 언어인 XAML, C#과 함께한다면, 예쁘고 멋진 프로그램을 만들 수 있습니다. 효과적인 도구를 사용해서 정말 멋지게 동작하는 소프트웨어를 만들 수 있습니다. 진짜 문제를 해결하는 데 전념할 수 있습니다. IDE에서 많은 일을 대신해 주지만 C#으로 무엇을 만드는지는 여전히 여러분이 정할 문제입니다. IDE는 여러분이 만들 프로그램과 여러분이 할 일, 그리고 여러분의 고객에게만 전념하도록 도와주는 훌륭한 도우미입니다. 다음과 같은 귀찮은 일들은 IDE가 알아서 처리해 줍니다.

★★ 프로젝트 관리 ★★ 프로젝트 코드를 편집하기 좋게 하기

5

4

★★ 프로젝트의 그래픽스, 오디오, 아이콘 및 기타 리소스 관리 ★★ 데이터베이스 관리 및 작업 처리 옛날 같으면 단조로운 프로그래밍 작업에 허비했을 시간에 멋진 앱을 만들고, 공유할 수 있습니다.

정확한 뜻은 잠시 후에 알 수 있을 겁니다.

apps

지금 여기예요 4   47


al Studio 이 옵션이 보이지 않는다면 여러분은 Visu 을 이용하고 Express 2013 for Windows Desktop 버전 ess 2013 Expr dio Stu al 있는 것입니다. 종료한 후 Visu for Windows를 실행해 주세요.

시작해 봅시다

비주얼 스튜디오에서 해야 할 일

이제 윈도우 8에서 비주얼 스튜디오를 실행할 차례입니다. 시작 페이지(Start page)는 그냥 건너뛰고 파일(File)메뉴에서 새 프로젝트(New Project)를 선택하세요. 선택해야 할 프로젝트 유형이 있습니다. Visual C# > 스토어 앱 > Windows 응용 프로그램 > 빈 응용 프로그램(Windows)을 선택하세요. IDE는 윈도우 폴더인 Documents > Visual Studio 2013의 프로젝트 폴더에 응용 프로그램이 생성되어 있을 것입니다(“위치”에서 경로를 바꿀 수 있어요).

왼쪽 그림과 다른 화 면이 나올 수도 있 습니다. Visual Studio Express

2013 for Windows에서는 새로운 프로 젝트를 시작할 때 왼쪽과 같은 화면이 나타납니다. Professional 혹은 Team Foundation 에디션을 사용한다면 조금 다른 화면이 나올 수도 있지만 어차피 똑같은 방식으로 작동하니까 걱정할 필 요는 없습니다.

비주얼 스튜디오가 대신해 주는 일 새 프로젝트를 생성해서 저장하면 IDE에서는 MainPage.xaml, MainPage.Xaml. cs, App.xaml.cs가 포함된 많은 파일을 생성합니다. 이 파일들은 솔루션 탐색기 (Solution Explorer)창에 추가되고, 기본적으로 Documents/Visual Studio 2013/ Projects/App1/App1 폴더에 저장됩니다.

메인 페이지의 사용자 인터페이스를 정의하는 XAML코드가 들어갑니다.

을 해야 할 행동들 메인 페이지가 . 드가 들어갑니다 통제하는 C# 코

MainPage.xaml.cs MainPage.xaml

48    Chapter 1

비주얼 스튜디오에서 이 세 파일을 자동적으로 만들어 줍니다. 다른 파일도 마찬가지로요! 솔루션 탐색기(Solution Explorer) 창에서 볼 수 있습니다.

프로젝트를 만들자마자 파일(File) 메뉴의 모두 저장(Save All)을 선택해 프로젝트를 저장하세요. 그러면 모든 프로젝트 파일이 저장됩니다. 그냥 저장(Save)만 선택하면 지금 작업 중인 파일만 저장됩니다.

앱이 실행(혹은 재실 행)될 때 동작하는 C# 코드가 들어갑니다.

App.xaml.cs


C# 시작하기

몇 단계를 거치면 여러분은 아래에 있는 그림을 볼 수 있을 것입니다. 첫째, 보기(View) 메뉴 > 도구 상자(Toolbox) 와 오류 목록(Error List) 창을 선택하세요. 다음은 도구(Tool) > 옵션(Option) 메뉴에서 색 테마를 광원(밝게)으로 하면 됩니다. 이미 알고 있는 내용을 바탕으로 대부분의 창과 파일의 역할을 파악할 수 있어야 합니다. IDE에서 그 부분이 무슨 역할을 하는지 빈칸에 적어 보세요. 몇 가지는 저희가 미리 적어 놨습니다. 빈칸을 채우며 무슨 일을 하는지 추측해 보세요.

너무 작아서 안 보이죠? 자세히 볼 수 있도록 아래쪽에 확대해 놨습니다.

이 툴 바에는 현재 IDE에서 사용할 수 있는 버튼들이 있군요.

디자이너로 컨트롤을 끌어서 사용자 인터페이스를 쉽게 편집할 수 있게 해 줍니다.

도구 상자 혹은 오류 목록이 보이지 않으면 보기 메뉴에서 선택하세요. 48페이지의 화면은 어

두운 테마입니다.

여기서는 밝은 색 테마를 사용했어요. 밝은 화면이 책에서 더 잘 보이거든요. 밝게 바꾸고 싶으면 도구 > 옵션의 환경의 시각적 효과에서 “광원”을 선택하세요(어 두운 색이 편하면 그냥 두셔도 돼요).

지금 여기예요 4   49


IDE를 파악해 봅시다

비주얼 스튜디오 C# IDE의 각 부분에 대한 설명을 저희가 채워 봤습니다. 여러분이

이 툴 바에는 현재 ID E 에서 사용할 수 있는 버튼들이 있군요.

적은 것과 조금 다를 수 있겠지만, IDE에 나오는 창과 섹션의 역할 및 용도에 대해서는 충분히 파악됐으리라 믿습니다.

디자이너로 컨트롤을 끌어서 사용자 인터페이스를 쉽게 편집할 수 있게 해 줍니다.

이것은 도구 상자입니다. 여러분이 끌어서 페이지에 넣을 수 있는 많은 컨트롤이 있습니다.

에 오류가 오류 목록 창은 코드 . 있을 때 보여 줍니다 서 어떤 이 창은 앱을 진단해 알려 오류가 있는지 정보를 줍니다.

도구 상자 혹은 오류 목록이 보이지 않으면, 보기 메뉴에서 선택하세요.

분이 이 창에서는 여러 을 성 속 현재 선택한 보여 줍니다.

이 압정 아이콘이 보이세요? 클릭하면 이 창을 숨길 수 있습니다. 기본적으로 도구 상자 창에는 자동 숨김 기능이

새 프로젝트를 추가할 때, ID E에서 XAML과 C# 파일을 생성합 니 다. 프로젝트에 관 련된 모든 파일 은 솔루션 탐색기 에서 볼 수 있 습니다.

50    Chapter 1

활성화되어 있죠.

IDE에서 솔루 션 탐색기를 써서 파일 사이 를 오갈 수 있습니다.


C# 시작하기

바보 같은 질문이란 없습니다

Q:

Q :C#과 XAML로 같이 뭔가 한다고 했는데,

A:

A:XAML(“제멀”로 발음)은 마크업 언어

이렇게 IDE에서 코드를 전부 만들어 주 니 IDE 사용법만 배우면 C#은 끝인가요?

아닙니다. IDE는 일부 코드를 자동으로 생성해 주는 일은 잘하지만 딱 거기까지입니 다. 일단 처음에 항상 만들어야 하는 코드를 만들어 주는 일, 폼에 있는 컨트롤의 속성을 자동으로 변경해 주는 일 같은 건 아주 잘하 죠. 그런데 프로그래밍에서 정말 중요한 부 분(프로그램에서 무엇을 해야 하는지 알아내 고 그런 일을 할 수 있게 만드는 부분)은 어떤 IDE라도 사람 대신 해 줄 수 없습니다. 비주 얼 스튜디오 IDE가 시중에 출시된 개발 환경 가운데 가장 훌륭한 편에 속하긴 하지만 실제 로 작업을 수행하는 코드를 만드는 일은 IDE 가 아닌 여러분이 해야 합니다.

Q:

IDE에서 원치 않는 코드를 만들면 어떻 게 하죠?

A:바꾸면 됩니다. IDE는 사용자가 끌어다

놓거나 추가한 요소가 가장 널리 쓰이는 방식 에 맞춰 코드를 생성하게 설정되어 있습니다. IDE에서 자동으로 해 주는 것(코드 생성 및 파일 추가)은 모두 파일을 직접 편집한다거나 하는 식의 수동으로, 또는 IDE에서 사용하기 쉬운 인터페이스를 통해서 바꿀 수 있습니다.

Q :Visual Studio Express 에디션을 다운로 드해서 설치해도 괜찮은가요? 이 책에 나온 내 용을 전부 할 수 있으려면 돈을 주고 다른 버전 을 구입해야 하는 것 아닌가요?

A:

이 책에 나온 내용 중에 비주얼 스튜디 오 무료 버전(마이크로소프트 웹 사이트에서 다운로드할 수 있는 버전)으로 할 수 없는 것 은 전혀 없습니다. Express를 다른 버전과 비 교했을 때, C#으로 프로그램을 만들고 완벽하 게 작동하는 응용 프로그램을 만드는 것 자체

XAML이 뭐예요? 어떻게 C#과 결합하나요?

로, 이 언어를 이용해 윈도우 스토어 앱 전 체 페이지 디자인을 위한 사용자 인터페이스 를 만들 수 있습니다. XAML은 XML 기반입 니다(이 책 뒤에서 다룰 것입니다). 여러분이 HTML로 무언가 시작한다면, <로 시작합니 다. 여기에 XAML 태그로 회색 타원을 그릴 수 있는 예제가 있습니다.

<Ellipse Fill="Gray" Height="100" Width="75" /> Ellipse와 함께 오는 <는 태그 시작을 의미합 니다. 위의 Ellipse는 세 가지 속성이 있습니 다. 회색으로 채우고, 높이와 너비를 설정했 습니다. 태그의 끝을 의미하는 />가 있지만, 다른 XAML 태그도 있습니다. /> 대신 >로 바 꾸면 컨테이너 태그가 됩니다. 그리고 다른 추가 태그를 넣은 뒤 </Ellipse> 이런 형식으 로 태그를 닫습니다. 여러분은 이 책을 통해 XAML의 동작법과 XAML의 다른 태그를 배 우게 될 것입니다.

Q:

지금 IDE를 띄워놨는데 책에 나온 화면 과 다르네요. 없는 창도 있고 이상한 위치에 있 는 것도 있어요. 왜 이렇죠?

A:

비주얼 스튜디오에서는 응용 프로그램 제작을 시작하는 데 적당히 활용할 수 있는 코드를 자동 생성해 줍니다. 하지만 응용 프로그램에서 진짜 해야 할 일을 하게 만드는 것은 개발자에게 달려 있습니다.

창(Windows) 메뉴의 창 레이아웃 다 시 설정(Reset Window Layout) 명령을 선 택하면 IDE가 기본 레이아웃으로 되돌아갑니 다. 그러면 앞에 나온 화면과 같은 화면을 볼 수 있습니다.

에는 전혀 지장을 주지 않습니다.

지금 여기예요 4   51


인류를 구해 주세요

외계인 침입! 놀라운 일이 발생했습니다. 나쁜 외계인들이 지구 전체를 공격해왔습니다. 비도덕적이고 입에 담을 수 없는 식인 실험을 위해 인간들을 납치하고 있습니다. 외계인이 공격하는 것을 보고만 있을 순 없죠!

음… 맛있겠군!

안 돼! 외계인이 사람들에게 레이저 빔을 쏘고 있어.

?!

52    Chapter 1


C# 시작하기

당신만이 지구를 구할 수 있습니다 인류의 마지막 희망은 당신의 어깨에 달려 있습니다. 지구의 사람들에게는 외계인의 위협에서 탈출할 수 있는 멋진 C# 앱이 필요합니다. 도전할 준비가 됐나요?

사악한 외계인이 화면에 가득 차 있습니다. 사람을 여기에 끌어다 놓으면 게임이 끝납니다.

아래에 있는 타이머의 시간이 다 가기 전에 사람을 목표 지점으로 끌어다 놓으세요.

너무 빨리 끌면 그 사람을 잃을 수도 있어요.

인류의 가장 큰 과학적인 업적은 인류를 보호하기 위한 다이아몬드 모양의 포탈을 발명한 것이다. 인간들을 목표 지점인 포탈로 안전하게 피신시켜 인류를 구하는 것은 당신의 손에 달렸다. 지금 여기예요 4   53


우리의 목표는 여기에 있어요

시작하기 전에 커피 한잔 어떠세요? 여러분은 IDE로 정말 멋진 프로젝트를 만들 겁니다.

빌드할 것들

이번 장이 끝날 때쯤 여러분은 IDE에 능숙해질 것입니다. 코드를 작성하기 위한 좋은 첫 걸음입니다.

여러분은 그래픽 사용자 인터페이스를 가진 응용 프로그램, 게임을 동작하게 하는 객체, 실행 가능한 파일이 필요합니다. 많은 일을 해야 할 것 같지만, 이번 장에서 이 모든 걸 끝낼 수 있습니다. 이번 장을 통해 여러분은 페이지를 디자인하고 C# 코드를 추가하면서 IDE에 능숙해질 거예요.

앱은 컨트롤 을 사용해서 플레이어들 이 게임을 플 레이할 수 있게 해 줍니다.

각적인 위에 많은 시 니다. 메인 페이지 들 앱을 만 겁 며 리 올 을 컨트롤

XAML 메인 페이지와 컨테이너

윈도우 UI 컨트롤

gle

사람을 끌어 사각형의 목표 지점에 놓는 컨트롤과 카운트다운을 하는 타이머를 보여 주는 데 사용합니다.

sBar

pag e

Rectan

Main

Progres

54    Chapter 1

gle

메인 페이지를 꾸밀 그리드를 사용하여 부분에 은 그리드의 중심 것입니다. 게임 화면 합니다. 용 사 해 캔버스를 위치합니다. 이를 위

St

플레이어가 구하는 각각의 사람들은(타원과 사각형으로 그려짐) StackPanel을 이용해서 그립니다.

Rectan s Ellip

e

Grid

ack Panel

s

va Can

타이머는 플레이어의 게임 시간이 다 되었는지 프로그래스 바의 속성을 확인합니다.

인류 구하기(Save the Humans)는 풀-스크린 윈도우 스토어 앱이기 때문에 빌드 후에 실행하려면 윈도우 8이 있어야 합니다. 그렇지만 WPF만 있다면 윈도우 8 없이도 빌드할 수 있습니다. 이 책에 나오는 많은 다른 프로젝트도 무료로 제공하는 “WPF Learners Guide PDF”를 내려받아 WPF 사용법을 익히면 데스크톱 앱으로 빌드할 수 있습니다.


여러분은 두 가지 다른 코드를 작성할 것입니다. 첫 번째, 정말 유연한 디자인 언어인 XAML(Extensible Application Markup

윈도우 8이 없다고요? 걱정하지 마세요.

Language)을 이용해서 사용자 인터페이스를

1, 2장과 이 책의 후반부에서는 많은 프로젝트가

디자인합니다. 다음 C# 코드를 추가해서 게임을

Visual Studio 2013 for Windows로 빌드되어 있

실제로 동작하게 합니다. 책의 후반부에서는

습니다. 그러나 아직도 많은 독자들이 윈도우 8 환 경을 갖추고 있지 않습니다. 다행히도 이 책의 윈도우 스토어 앱은 이

XAML에 관해 많은 것을 배우게 될 거예요.

전 운영체제와 호환을 가능하게 해 주는 WPF(Windows Presentation Foundation)로 빌드할 수 있습니다. 여러분은 http://www.hanbit.

컨트롤을 조작하고 게임이 동작하도록 C# 코드 를 작성할 거예요.

co.kr/exam/2165에 가서 무료 다운로드한 후 세부 사항을 확인하세 요. 이 책의 부록, 남은 것들 #11에 넘어가 세부 사항을 확인할 수도 있 습니다.

배포 패키지

C# 코드

.png .exe

t Target

틱(Tick) 이벤트 핸들러

imer

imer

여러분은 니다. 좋은 첫

C# 시작하기

사무실이나 집 컴퓨터의 운영체제가 오래된 버전의 윈도우 2003일 수도 있습니다. 이 PDF와 함께한다 면 이 책에 있는 프로젝트를 실행할 수 있습니다.

t Enemy

틱 이벤트 핸들러

Start button

Splash screen

.xml 프로그램 파일

App manifest

플레이어의 게임이 끝나면 알려 주는 타이머와 적(외계인) 을 위한 타이머를 추가합니다.

클릭 이벤트 핸들러

메서드 StartGame() AddEnemy() AnimateEnemy() EndTheGame()

앱을 만들고 난 후 여러분은 앱을 패키징해서 윈 도우 스토어 (앱을 배포하고 팔 수 있는 마이크로소프트 온 라인 마켓 플레이스)에 업로드 할수 있습니다.

지금 여기예요 4   55


처음부터 시작하기

빈 응용 프로그램으로 시작하기 모든 앱은 새 프로젝트로 시작합니다. 파일(File) 메뉴에서 새 프로젝트(New Project)를 선택하세요. 창에서 Visual C# > 스토어 앱 > Windows 응용 프로그램을 누른 뒤 빈 응용 프로그램(Windows)을 선택하세요. 이름에 Save the Humans를 입력하고 확인 버튼을 누르시면 됩니다.

1

파일 이름이 .cs로 끝나지 않는다면 여러분은 실수로 JavaScript, Visual Basic 혹은 Visual C++로 프로젝트를 생성했을 것입니다. 이 창을 닫고 Visual C#을 선택해서 다시 실행하세요. 프로젝트 이름인 Save the Humans 를 사용하고 싶으면 이전에 실수로 만든 프로젝트를 지우면 됩니다.

프   로젝트가 생성되면 디자이너 창이 보입니다. 솔루션 탐색기(Solution Explorer)에 있는 MainPage.xaml을 더블클릭합니다. 디자이너의 왼쪽 코너에 있는 줌 드롭-다운을 찾아 모두 맞춤(Fit All)을 선택해서 화면을 축소합니다.

디자이너는 작업하고 있는 미리 보기 페이지를 제공합니다. 빈 페이지의 기본 검은색 배경화면으로 되어 있군요.

그리드 라인 표시를 위해 세 개의 버튼을 사용합니다. 스넵핑을 켜면 각 컨트롤의 위치를 맞출 수 있습니다. 그리드 라인에 스넵핑을 켜면 그리드의 격자 선에 맞게 정렬할 수 있습니다.

56    Chapter 1


현재 위치 XAML 메인 페이지와 컨테이너

C# 시작하기

배포 패키지

C# 코드

윈도우 UI 컨트롤

.png mer

.exe

gle

mer

ti Target

Enemy

틱(Tick) 이벤트 핸들러

Bar

pag e

n Recta

Main

ti

틱 이벤트 핸들러

Program file App manifest

tton

ss Progre

Splash screen

.xml

s

va Can

tac kPanel

u Start b

클릭 이벤트 핸들러

S

methods

gle

Grid n Recta

StartGame() AddEnemy()

e

s Ellip

디자이너 아랫부분은 XAML 코드입니다. 디자이너의 “빈” 페이지는 빈 게 아닙니다(XAML 그리드 코드 부분이 포함되어 있습니다). 그리드는 HTML 페이지 혹은 워드 문서의 테이블과 비슷합니다. XAML을 이용하여 페이지를 다양한 크기로 늘리거나 줄여볼 거예요.

그리드를 위한 XAML 코드는 IDE가 생성해 줍니다. 이 부분을 잘 살펴보세요. 행과 열을 추가할 거예요

이렇게 컨트롤을 포함하는 그리드 태그를 열고 닫는 거군요. 행과 열, 컨트롤을 그리드에 추가할 때 태그를 열고 닫는 사이에 코드를 추가하면 됩니다.

WPF를 배우고 싶나요?

이 프로젝트는 ①부터 ⑤까지의 과정이 있습니다. 다음 페이지로 넘겨 주세요.

대부분의 윈도우 스토어 앱은 WPF(Windows Presentation Foundation)은 윈 도우 7과 이전 운영체제를 호환되게 해 줍니다)로 빌드할 수 있습니다. 무료로 제공되는 『Head First C#』의 WPF Guide PDF를 다운로드하세요. http://www. hanbit.co.kr/exam/2165(자세한 정보는 부록 ‘남은 것들 #11’에 있습니다)

지금 여기예요 4   57


시작해 봅시다 2

제목이 필요합니다. 공백도 필요하구요. 여러분은 XAML을 이용해 이것을 손으 로 코딩할 수 있습니다. 하지만 정상적인 윈도우 스토어 앱처럼 보이게 하는 더 쉬 운 방법이 있습니다. 솔루션 탐색기로 가서

. 을 찾습니다. 마우스 오른쪽 클릭을

하고 MainPage.xaml을 삭제합니다.

다음 몇몇 페이지에서는 강력한 도구인 비주얼 스튜디오 IDE가 제공하는 많은 기능을 살펴보며 학습할 것입니다.이 책을 통해 IDE를 사용하며 C#을 탐험하게 됩니다. 이것은 정말 여러분의 뇌를 자극하는 효과적인 방법입니다.

윈도우 스토어 앱을 시작할 때, 여러분은 비주얼 스튜디오가 제공하는 템플릿으로 메인 페이지를 자주 바꾸게 될 겁니다.

솔루션 탐색기가 보이지 않는다면 보기 메뉴를 열어서 솔루션 탐색기를 클릭합니다. 창 메뉴에서 창 레이아웃 다시 설정(reset the IDE’s window layout)을 선택해도 됩니다.

프로젝트를 생성할 때 다른 이름을 사용했다면 여러분은 “Save the Humans” 대신 그 이름이 솔루션 탐색기에서 보일 것입니다. 3

이제 메인 페이지를 바꿀 때가 왔습니다. 프로젝트 탐색기로 가서 를 선택하고 마우스 오른쪽을 클릭합니다(솔루션 탐색 기에서 두 번째 항목을 선택해야 합니다). 그리고 추가(Add) > 새 항목(New Item...) 메뉴를 선택합니다.

58    Chapter 1


C# 시작하기 IDE는 프로젝트를 위한 새 항목 창을 띄울 것입니다. 기본 페이지(Basic Page)를 선택하고 이름에 MainPage.xaml을 입력하세요. 그리고 추가(Add) 버튼을 클릭합니다.

기본 페이지(Basic Page)를 선택해서 프로젝트에 기본 페이지 템플릿이 적용된 새로운 페이지를 만듭니다.

이름을 MainPage.xaml로 하셔야 합니다. 왜냐하면 여러분은 같은 이름의 파일을 지웠으니까요.

MainPage.xaml을 기본 페이지 항목으로 바꿀 때, IDE는 추가 파일을 요구합니다. 솔루션을 다시 빌드해서 모든 것을 새롭게 업데이트하면 디자이너에서 페이지가 정상적으로 보입니다.

IDE는 없는 파일을 추가하라고 하는데, Yes를 선택해서 추가해 줍시다. 디자이너의 로딩이 끝날 때까지 기다립니다. 마크업이 유효하지 않다거나 프로젝트의 디자인을 수정하라는 오류가 뜰 것입니다. IDE의 빌드(Build) 메뉴 > 솔루션 다시 빌드(Rebuild Solution)를 선택해서 IDE 디자이너를 업데이트합니다. 그러면 정상적으로 작동합니다. 이제 추가된 MainPage.xaml 파일을 살펴봅시다. 디자이너에서 스크롤을 내려 이 XAML 코드를 찾습니다. 이 코드는 그리 드에 대한 기본 코드입니다.

겁니다. IDE를 이용해 그리드를 수정할

전체 그리드에서 분류된 그리드 <Grid> </Grid> 태그를 주목하세요. 여기에 앱 이름을 표시하는 페이지 헤더가 있습니다. 이 그리드는 컨트롤을 추가할 수 있는 루트 그리드 안에 포함되어 있습니다.

여러분의 페이지는 디자이너에 표시됩니다. 그렇지 않다면 솔루션 탐색기에 있는 MainPage.xaml을 더블-클릭하세요.

지금 여기예요 4   59


한 걸음, 한 걸음 4

빈 페이지의 템플릿에 제목 행을 포함한 2개의 행과 3개의 열을 가진 그리드 (빈 페이지의 템플릿에서 제목이 있는 행을 포함)를 만들어 봅시다. 플레이 영 역이 포함된 중간 부분에 큰 공간이 있습니다. 테두리에서 선과 삼각형이 보일 때 행과 열을 조정해 봅시다.

만약 여러분의 페이지의 경계 면에서 140과 1* 이 보이지 않는다면, 바깥쪽 부분을 클릭하세요.

오렌지 색 삼각형과 선이 나타날 때 그리드 테두리를 조정하면 됩니다.

그리고 여기를 클릭해서 그리드 안에 아래쪽 행을 만드세요.

앱은 그리드의 행과 열을 이용하여 자동으로 레이아웃을 화면에 맞게 조정합니다.

윈도우 스토어 앱은 태블릿, 노트북, 큰 모니터 등 어떤 화면에서도 가로나 세로에 맞게 보여야 합니다.

행이 추가되면 선은 파란색으로 변하고, 테두리에서 행 높이의 숫자가 보입니다. 중간 행의 높이(1*)는 *에 있는 숫자보다 크게 바뀝니다.

바보 같은 질문이란 없습니다

Q :그리드에 많은 행과 열이 있는데, 회색 선은 뭐죠? Q : 잠시만요. 전 C#을 배우고 싶은데, 왜 XAML을 배우는 데 시간을 투자해야 하나요? A:회색 선은 비주얼 스튜디오가 여러분이 컨트롤을 페이지 에 맞게 잘 배치할 수 있도록 도와주는 역할을 합니다. 이 회색 A:윈도우 스토어 앱을 만들 때, 대부분 XAML로 디자인된 선을 버튼으로 켜고 끌 수 있습니다. 비주얼 스튜디오 밖에 서 앱을 실행할 때는 디자이너에서 이 선들을 볼 수 없습니다. 그리고 여러분이 클릭해서 새로운 행을 추가할 때, XAML 코드 가 실제로 변경됩니다. 컴파일하고 실행할 때 추가된 내용이 적 용될 것입니다.

60    Chapter 1

사용자 인터페이스로 시작합니다. 또한 비주얼 스튜디오는 사 용자 인터페이스를 쉽게 만들어 주는 멋진 XAML 편집기가 있 습니다. 이 책의 전반에 걸쳐 다양한 유형의 프로그램(XAML을 사용하지 않는 데스크톱 응용 프로그램과 콘솔 응용 프로그램) 을 만들면서 여러분이 C#을 조금 더 깊이 이해할 수 있도록 도 와 줍니다.


C# 시작하기 5

페이지의 위쪽 테두리를 이전 페이지에서 했던 것처럼 해 봅시다. 이번에는 왼편과 오른편에 각각 선을 넣어서 두 열을 만들어 봅시다. 행의 높이와 열의 너비는 신경 쓰지 마세요. 여러분이 어디에 클릭하느냐에 따라 크기가 다릅니다. 다음 페이지에서 고칠 거예요.

행의 높이와 열의 너비가 다르다고 걱정하지 마세요. 다음 페이지에서 고칠 거예요.

작업이 완료되면, XAML 윈도우 창으로 가서 이전 페이지와 같은 간격의 그리드를 만들어 봅시다. 열 너비와 행 높이가 페이지의 상단과 측면에 있는 숫자와 일치합니다.

이것이 5번 과정의 왼쪽 열의 너비입니다. 이 너비는 디자이너에서 보이는 너비와 일치합니다. IDE에서 이 XAML 코드를 생성해 줍니다.

이제 그리드의 행과 열을 추가했습니다. XAML 그리드는 다른 컨트롤을 담을 수 있는 컨테이너 컨트롤입니다. 그리드는 셀로 정의된 행과 열로 구성되어 있습니다. 각각의 셀은 버튼, 텍스트, 도형을 나타내는 다른 XAML 컨트롤을 담을 수 있습니다. 그리드는 페이지를 쉽게 꾸며 줍니다. 화 면의 크기에 맞춰 행과 열을 다시 조정할 수 있죠.

인간들이 뭔가 준비하고 있어. 상황이 별로 좋지 못 한 것 같군. 지금 여기예요 4   61


크기를 설정하기

그리드 설정하기 앱은 다양한 기기에서 작동되어야 합니다. 그리드는 이런 일을 유연하게 해 주는 좋은 도구입니다. 그리드는 행과 열을 특정 Pixel의 높이에 맞게 설정할 수 있습니다. 그리고 Star(*)를 이용해서, 화면의 크기나 위치에 상관없이 서로 다른 페이지의 적정 크기를 유지할 수 있습니다.

1

이 숫자를 바꾸면 그리드와 XAML 코드가 수정됩니다.

왼쪽 열의 너비를 설정합니다. 드롭-다운 메뉴가 나타날 때까지 첫 번째 열 위의 번호를 가리키세요. Pixel을 선택해서 Star(*)를 자물쇠 표시로 변경합니다. 그리고 숫 자를 클릭한 다음 160을 입력하세요. 열의 숫자는 아래와 같아야 합 니다.

2

오른쪽 열과 아래쪽 행에도 위와 같이 합니다. 오른쪽 열과 아래쪽 행에도 160을 입력하고 Pixel을 선택하세요.

행과 열을 Pixel로 설정하면 너비와 높이가 고정되도록 설정합니다. Star(*)로 설정하게 되면 그리드의 나머지 부분에 맞게 행과 열이 확대되거나 축소될 수 있습니다. 디자이너에서 너비와 높이 속성을 XAML로 알맞게 변경해 보세요. 만약 너비와 높이의 속성을 제거한다면, 그것은 1*로 설정하는 것과 같습니다. 62    Chapter 1

꾸미는 데 능숙하지 않아도 괜찮아요. 앞으로 디자인하는 것에 대해서 많이 이야기할 거예요. 지금부터 는 게임 만드는 과정을 살펴봅니다. 이 책의 마지막 부분에서 여러분은 모든 것을 정확하게 이해할 수 있 을 거예요.


C# 시작하기 3

가운데 열과 행을 기본 크기인 1*로 만듭시다(이미 설정되어 있지 않은 경우).

XAML과 C#은 대소문자를

중간에 있는 열의 숫자를 클릭해서 1을 입력하세요. 드롭-다운을 사용하지

구별합니다! 예제 코드와

마세요(star로 놔두세요). 아래와 같은 그림을 볼 수 있습니다. 그런 다음

대문자, 소문자가 일치하는지

IDE가 자동으로 크기를 조정하지 않았는지, 다른 열을 한 번 확인해 보세요.

확인하세요.

만약 다른 열의 크기가 변경되었다면 다시 160으로 바꿔 줍니다.

1*을 입력할 때, IDE는 기본 너비에

맞게 열의 크기를 설정합니다. 다른 열도 그렇게 적용될 것입니다. 만약 그렇다면 160 픽셀로 다시 바꿔 주세요.

4

XAML 코드를 봅시다.

<!--

그리드의 코드 부분으로 갑니다. 그리고 XAML 윈도우 창에서 코드가 잘 만들어졌는지 확인해 봅시다.

This grid acts as a root panel for the page that defines two rows: * Row 0 contains the back button and page title

-->

꼭대기에 있는 <Grid> 태그는 그리드 전체를 의미합니다. 그 아래에 그리드의 일부들이 있죠.

* Row 1 contains the rest of the page layout

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> <Grid.ColumnDefinitions>

XAML에서 그리드의 열이 정의되는 부분입니다. 3개의 열과 3개의 행을 추가해서, 여기에 3개의 ColumnDefinition 태그와 RowDefinition 태그가 있습니다.

<ColumnDefinition Width="160"/> <ColumnDefinition/>

<ColumnDefinition Width="160"/>

</Grid.ColumnDefinitions>

<Grid.ChildrenTransitions> <TransitionCollection>

<EntranceThemeTransition/>

</TransitionCollection>

</Grid.ChildrenTransitions> <Grid.RowDefinitions>

<RowDefinition Height="140"/>

140 픽셀의 높이인 위쪽 행은 여러분이 추가

기본 페이지 템플릿의 부분입니다.

<RowDefinition/>

<RowDefinition Height="160"/>

</Grid.RowDefinitions>

행과 열의 드롭-다운을 설정해서 너비와 높이의 속성을 변경했었죠.

잠시 후, 그리드에 컨트롤을 추가할 것입니다. 행과 열을 정의한 후 여기에 컨트롤을 배치할 거예요. 지금 여기예요 4   63


컨트롤을 추가해 봅시다

그리드에 컨트롤 추가하기 버튼과 텍스트, 사진, 프로그래스 바, 슬라이더, 드롭-다운, 메뉴와 같은 것들을 컨트롤이라고 부릅니다. 이제 앱에 컨트롤을 추가할 때가 왔군요. 그리드의 행과 열로 이루어진 셀 안에 컨트롤을 추가해 봅시다. 1

도구 상자의

만약 IDE에서 도구 상자가 안 보이면, 보기(View) 메뉴로 가서 도구 상자를 열 수 있습니다. 자동으로 숨겨지지 않도록 고정 핀을 사용하세요.

(공용 XAML 컨트롤)로 컨트롤

들을 펼친 후,

을 제일 왼쪽 아래의 셀로 끌어 놓습니다.

디자이너 아래로 가서 IDE가 생성한 XAML 태그를 봅니다. 여러분이 컨트롤을 끌어 놓은 위치에 따라 여백 숫자가 다르게 보이고, 속성의 순서가 다를 수도 있습니다.

XAML 버튼 코드는 시작 태그와 같이 여기서부터 시작합니다.

2

이것이 속성입니다. 속성은 이름과 =, 값으로 이루어져 있습니다(이름=값).

을 그리드의 맨 오른쪽 아래의 셀에 끌어 놓습니다. XAML 코드는 아래와 같이 보일 거예요. 컨트롤이 어느 행과 열에 배치되어 있는지 어떻게 알 수 있을까요?

도구 상자에 있는 포인터를 클릭 하고 TextBlock을 선택해서 움직여 보세요. IDE에 있는 XAML 코드 의 여백 속성이 변경되는 것을 확인 해 보세요.

64    Chapter 1

XAML을 읽기 쉽게 하려고 들여쓰기를 했어요. 여러분도 직접 해 보세요!

만약 도구 상자가 보이지 않는다면, IDE의 위쪽 왼쪽 모퉁이에 있는 도구 상자의 글씨를 클릭하세요. 만약 여기에도 없다면 보기 (View) 메뉴에서 도구 상자(Toolbox)를 클릭하면, 도구 상자를 볼 수 있습니다.


C# 시작하기

3

다음, 도구 상자에 있는

(모든 XAML 컨트롤)을 펼칩니다. 맨 아래 중앙 셀에

를 끌어 놓습니다. 그리고

을 맨 아래 오른쪽 셀에 놓습니다

(우리가 이미 배치한 TextBlock 밑에 놓으면 됩니다). 그리고

를 중앙에 놓습니다.

이제 여러분의 페이지에 이렇게 컨트롤이 배치되어 있어야 합니다(아래 그림과 다르다고요? 걱정 하지 마세요. 같이 수정해 봅시다).

Canvas 컨트롤을 추가할 때 빈 상자처럼 보일 거예요. 조금 있다가 고쳐 봅시다.

두 번째 과정에서 추가한 TextBlock 컨트롤입니다. 같은 셀에 ContentControl도 추가했었죠.

첫 번째 과정에서 추가한 버튼이 여기 여러분이 추가한 있어요. ProgressBar입니다.

이게 뭘까요? ContentControl입니다!

4

중앙에 있는 Canvas 컨트롤을 선택합니다(선택이 안 되면 도구 상자의 포인터를 눌러서 선택해 보세요). XAML 창에는 아래와 같이 보입니다.

... Canvas 컨트롤에 대한 XAML 태그입니다. 이것은 <Canvas로 시작하고 />로 끝납니다. 그 사이에 Grid.Column=“1”과 Grid.Row=“1” 속성이 있습니다(Canvas를 가운데 열 과 행에 배치). XAML 창에 그리드를 클릭해서 다른 컨트롤을 선택해 보세요.

이 버튼을 눌러 보세요. 문서 개요(Document Outline) 창이 나타납니다. 어떻게 사용하는지 아시나요? 나중에 배워 봅시다.

도구 상자에서 컨트롤을 끌어 놓을 때, IDE는 자동으로 여러분이 끌어 놓은 위치의 XAML 코드를 생성합니다. 지금 여기예요 4   65


속성값을 넣어 봅시다

속성값으로 컨트롤이 변하는 모습을 봅시다

텍스트를 편집할 때 Esc키를 눌러 편집을 끝내면 됩니다. 컨트롤들도 이렇게 하면 됩니다.

비주얼 스튜디오 IDE는 컨트롤을 미세하게 조절할 수 있습니다. IDE의 속성 창은 컨트롤의 외형과 동작을 변경할 수 있습니다.

1

Button의 텍스트를 바꿔 봅시다. 여러분이 그리드로 끌어 놓은 Button 컨트롤을 오른쪽 클릭한 뒤, 메뉴에서 텍스트 편집(Edit Text)을 선택합니다. Start! 로 변경한 후 XAML의 Button 태그를 확인해 보세요.

...

Button 컨트롤에 텍스트를 입력할 때, XAML의 Content 속성이 업데이트됩니다.

속성 창의 이름 칸에 startButton을 입력합니다.

2

속성 창에서 Button을 수정합니다. IDE에서 Button을 선택하고 아래의 오른쪽 코너에 속성 창으로 갑니다. 컨트롤의 이름을 startButton으로 변경하고 셀의 중앙에 컨트롤을 배치해 봅시다. Button의 속성이 맞는지 확인하려면, 마 우스 오른쪽을 클릭해서 소스 보기(View Source)를 선택하면 됩 니다. XAML 창에서 <Button> 태그를 확인할 수 있습니다.

이 작은 네모난 상자는 속성이 설정되었는지 알려 줍니다. 색칠된 상자는 속성이 변경되었다는 뜻이고, 빈 상자는 기본 값으로 설정되어 있다는 것을 의미합니다. 오른쪽 메뉴를 이용해서 텍스트 편집을 눌러 Button의 텍스트를 변경했을 경우, IDE는 이 속성의 내용을 업데이트합니다.

공용과 레이아웃 섹션을 확장합니다.

2

HorizontalAlignment와 VerticalAlignment 속성의 와 (Center) 버튼으로 컨트롤을 셀의 중앙에 배치하세요. 페이지에 Button을 끌어 놓을 때 IDE는 Margin(여백) 속성 을 이용해서 셀의 정확한 위치에 놓습니다. 작은 네모 상자( ) 를 클릭하고, 메뉴에서 다시 설정(Reset)을 선택하면 Margin 이 0값으로 재설정됩니다. XAML 창으로 돌아가서 XAML 코드가 업데이트되었는지 확인해 보세요.

속성들이 조금 다르게 정렬되어 있어도 괜찮아요!

66    Chapter 1


C# 시작하기 XAML 메인 페이지와 컨테이너

C# 코드

윈도우 UI 컨트롤

배포 패키지 .png

mer

.exe

n Recta

imer

gle

ti Target

Enemy

sBar

틱(Tick) 이벤트 핸들러

Main

t

틱 이벤트 핸들러

Splash screen

u Start b

ack Panel

s

va Can

App manifest

Program file

tton

Progres

.xml

St

클릭 이벤트 핸들러

gle

Grid

methods StartGame() AddEnemy()

n Recta

s Ellip

e

3

지금 여기에 있어요!

pag e

이전 내용을 편집(Edit) > 실행 취소(Undo 혹은 Ctrl-z)로 돌릴 수 있습니다. 실행 취소를 몇 번 해 보면 취소한 만큼의 이전 내용으로 돌아갑니다. 여러분이 컨트롤을 잘못 선택했을 경우 편집 메뉴에 있는 몇몇 항목이 비활성화됩니다. 또한 Esc키를 눌러 컨트롤의 선택을 해제할 수 있습니다. 만약 StackPanel과 Grid 와 같은 컨테이너 안에 컨트롤이 선택되어 있다면, Esc키로 컨테이너를 선택할 수 있습니다. Esc키를 여러 번 쳐야 하는 경우도 있죠.  페이지 헤더의 텍스트를 바꿔 봅시다.

페이지의 헤더(“My Application”)에서 마우스 오른쪽 버튼을 클릭한 후 소스 보기를 클릭해서 XAML 코드의 텍스 트 블록으로 갑니다. Text 속성이 나올 때까지 XAML 창을 스크롤합니다.

잠깐만요! 텍스트가 “My Application”이 아니에요. 어디로 갔죠? 빈 페이지 템플릿은 페이지의 헤더 이름을 보여 주기 위한 AppName이라고 불리는 정적 리소스(static resource)를 사용합니다. XAML 코드 창에서 <Page.Resources> 부분이 나올 때까지 스크롤해서 이 코드를 확인하세요.

TextBlock과 ContentControl은 그리드 오른쪽 아래의 셀에 있습니다.

“My Application”을 다음과 같이 변경합니다.

이제 여러분의 페이지 상단에 이렇게 보일 거예요.

4

화살표 버튼에 대해서 걱정하지 마세요. 어떻게 사용하는지 14장에서 정적 리소스에 대해 배울 거예요.

TextBlock을 수정해서 텍스트와 스타일을 바꿔 봅시다. 마우스 오른쪽 버튼을 눌러 텍스트 편집을 이용해서 TextBlock을 Avoid These로 변경 합니다(텍스트 입력이 끝나면 Esc키를 눌러 편집을 끝냅니다). 그리고, 오른쪽 버튼을 눌러 스타일 편집(Edit Style) > 리소스 적용(Apply Resource) > SubheaderTextBlockSytle 을 선택해서 텍스트를 크게 만들어 봅시다.

5

StackPanel을 사용해서 TextBlock과 ContentControl을 묶어 봅시다.

마우스를 이동하면 StackPanel 주변에 상자가 보일 거예요.

셀에서 TextBlock을 위로 배치하고 ContentControl을 아래로 배치합니다. Shift키로 두 컨트롤을 선택한 후 마우스 오른쪽 버튼을 클릭한 후, 팝업 메뉴에서 그룹으로 묶기(Group Into) > StackPanel을 선택합니다. 이제 페이지에 새로운 StackPanel 컨트롤이 추가되었 습니다. 두 컨트롤을 클릭해서 StackPanel을 선택할 수 있습니다. StackPanel은 Grid, Canvas, 많은 부분이 비슷합니다. 우선 다른 컨트롤을 묶어 줍니다 (이것을 컨테이너라고 부릅니다). 그래서 컨테이너는 페이지에서 보이지 않죠. 여기에서는 셀에

StackPanel에 있는 TextBlock과 Content Grid의 셀을 대부분 채워 줍니다. StackPanel을 선택한 후, 마우스 오른쪽 버튼을 눌러 레이 Conrol에서 각각 오른쪽 아웃 > 모두 다시 설정을 클릭하면 속성들이 빠르게 다시 설정됩니다(셀의 수평과 수직의 레이아 버튼을 클릭해서 레이아웃을 웃이 Stretch로 정렬됩니다). 그리고 TextBlock과 ContentControl에 오른쪽 버튼을 클릭 다시 설정해 주세요.

서 윗부분의 TextBlock과 아랫부분의 ControlPanel을 묶은 후, StackPanel을 만들면서

해서 레이아웃을 모두 다시 설정해 줍니다. ContentControl을 설정할 때, 수평과 수직 정렬 을 이용해 컨트롤을 가운데로 배치합니다.

지금 여기예요 4   67


게임이 하고 싶군요

컨트롤로 게임 동작하게 하기 컨트롤은 제목과 캡션과 같이 보이는 것만 있는 게 아닙니다. 컨트롤은 게임이 동작할 수 있도록 중심 역할을 합니다. 컨트롤을 추가해서 플레이어들이 게임을 하게 해 봅시다. 여러분이 다음에 만들 것은 다음과 같습니다.

게임 배경에 그라데이션을 넣을 거예요.

1

아래쪽 행에서 뭔가 해 봅시다.

ProgressBar를 이만큼 늘릴 거예요.

ProgressBar를 수정해 봅시다. 그리드의 중앙 아랫부분의 셀에서 ProgressBar를 마우스 오른쪽 클릭합니다. 레이아웃 > 모두 다시 설정을 선택합니다. 그리고 속성 창의 레이아웃 섹션으로 가서 Height에 20을 입력합니다. XAML 창에서 레이아웃과 관련된 속성을 찾아서 Height이 추가되었는지 확인해 봅시다.

문서 개요

2

템플릿으로 적을 이렇게 만들어 봅시다.

보기(View) > 다른 창 (Other Windows) > 문서 개요(Document Outline) 에서 볼 수 있습니다.

Canvas 컨트롤을 게임 플레이를 할 수 있는 곳으로 바꿔 봅시다. 중앙에 Canvas 컨트롤 놓은 거 기억나시죠? 그런데 지금 찾기가 힘드네요. 도구 상자에 서 Canvas Control을 놓을 때, 잘 보이지 않습니다. 그러나, 쉽게 찾는 방법이 있습니다. XAML 창의 툴 팁 박스에서 문서 개요(Document Outline)라고 쓰인 니다. 그리고 버튼을 클릭해서

버튼을 클릭합

컨트롤을 선택합니다.

IDE의 오른쪽 부분에서 문서 개요를 클릭해서 열 수 있습니다.

Canvas 컨트롤을 선택했으면 속성 창의 이름 칸에 “playArea”를 입력합니다.

이름이 변경되면 문서 개요 창에 [Canvas] 대신 playArea라고 뜹니다.

Canvas 컨트롤에 이름을 붙인 후, 문서 개요 창을 닫으세요. 그리

왼쪽의 탭을 클릭해서 그라데이션의 시작 색을 선택하세요. 그리고 오른쪽 탭으로 그라데이션의 끝나는 색을 선택하세요.

고 속성 창에 있는

버튼(Stretch)을 눌러 수평과 수직으

로 정렬하고, Margin(여백)을 다시 설정합니다. 그리고 Width와 Height에 있는

버튼(Auto)을 각각 누릅니다. 그리고 Column에

0과 ColumnSpan(Column의 오른쪽)에 3을 입력합니다. 마지막으로, 속성 창의 브러시(Brush) 섹션에서 Canvas에 그라데이 션을 주기 위해

버튼(그라데이션 브러시)을 클릭합니다. 편집기 아

랫부분의 왼쪽과 오른쪽 탭을 클릭해서 그라데이션의 시작 색과 끝나 는 색을 선택하고 색상을 클릭하세요.

68    Chapter 1


C# 시작하기 3

적 템플릿을 생성해 봅시다. 게임 화면에서 같은 모양의 적군이 많이 움직여야 합니다. 다행히도, XAML에서 많은 컨트롤을 같은 적군 모양으로 만들어 주는 템플릿(Template)을 제공해 줍니다. 다음, 문서 개요(Document Outline) 창에서 [StackPanel]을 펼친 후, [ContentControl]에서 마우스 오른쪽 클릭 합니다. 그리고 템플릿 편집(Edit Template) > 빈 항목 만들기(Create Empty...) 메뉴를 선택합니다. EnemyTemplate으로 이름을 입력하고 확인을 누르면 XAML 창에 템플릿이 추가됩니다.

움직이는 적들은 여기서 보이지 않습니다. 적군이 표시되도록 컨트롤을 추가하고 크기를 설정하기 전까지 디자이너 창에는 어떤 템플릿도 표시되지 않습니다. 뭔가 잘못됐다고 걱정하지 마세요. 취소(Undo)하고 다시 하면 됩니다.

템플릿이 선택되지 않을 경우, 문서 개요 창에서 그리드를 선택하세요.

현재 새로 만든 템플릿이 선택되어 있습니다. 그런데 템플릿이 보이지 않네요. 다음 과정에서 템플릿을 보이게 합시다. 만 약 컨트롤 템플릿의 바깥 부분을 클릭했다면, 여러분은 문서 개요(Document Outline)를 열어서 다시 선택할 수 있습니 다. ContentControl을 오른쪽 클릭해서 템플릿 편집(Edit Template) > 현재 항목 편집(Edit Current)을 선택하면 됩니다. 4

적   템플릿을 편집해 봅시다. 빨간색 원을 템플릿에 추가해 봅시다. ★★ 도구 상자에 있는

디자이너에서 원형이 보일 때까지 아무 데나 클릭하지 마세요. 템플릿이 선택되는 것을 유지하려고 합니다.

를 더블-클릭해서 원을 추가하세요.

★★ Ellipse의 Height과 Width의 속성을 100으로 설정하세요. 그러면 셀에서 원이 보일 거예요. ★★ HorizontalAlignment, VerticalAlignment, Margin 속성의 옆에 작은 네모 상자를 눌 러, 다시 설정을 선택합니다. ★★ 속성 창의 브러시 섹션으로 가서 단색 브러시(Solid-color brush) 니다.

를 선택합

★★ 긴 색상 바 안의 표식을 윗부분으로 끌어서, 원형에 빨간색을 칠합니다. 그런 다 음 정사각형의 색상 선택 부분을 클릭해서 오른쪽 위의 코너로 마우스를 끌어 놓 습니다.

오른쪽 위의 모서리를 클릭해서, 이 색상을 선택하세요.

★★ ContentControl의 XAML 코드는 이제 이렇게 보일 겁니다.

XAML 윈도우 창을 스크롤해서 EnemyTemplate이 정의된 것을 확인해 보세요. AppName 리소스가 밑줄이 같아야 합니다. 5

문서 개요를 이용해 StackPanel과 TextBlock 컨트롤을 수정해 봅시다. 문서 개요로 돌아옵니다(문서 개요 창의 윗부분에

이 보이면

을 클릭해서

pageRoot로 돌아옵니다). StackPanel 컨트롤을 선택해서 수평과 수직이 중앙으로 정렬되어 있는지, 여백이 설정되었 는지 확인합니다. 마찬가지로 TextBlock도 확인합니다. 이제 페이지를 꾸미는 작업이 거의 끝났습니다! 마지막 단계를 향해 페이지를 넘겨주세요.

지금 여기예요 4   69


여러분이 만든 페이지를 점검해 봅시다 6

C   anvas에 사람을 추가해 봅시다. 사람을 추가하기 위한 두 가지 옵션이 있습니다. 첫 번째는 다음 세 단계를 따라 하면 됩니다. 두 번째는 조금 더 빠 른 방법인데 XAML 코드에 4줄만 추가하면 됩니다. 여러분이 선택하세요! Ellipse 컨트롤을 Canvas에 추가하기 위해서 셀 중앙의 Canvas 컨트롤을 선택한 후, 도구 상자의 모든 XAML 컨트 롤 섹션에서 Ellipse를 더블-클릭합니다. Canvas 컨트롤을 다시 선택해서 Rectangle을 더블-클릭합니다. Rectangle은 Ellipse의 바로 위에 추가될 것입니다. Rectangle을 Ellipse 아래로 끌어 놓습니다. Shift 키를 누른 채 Ellipse를 클릭한 후, 두 컨트롤 모두 선택되게 합니다. 선택한 부분에서 오른쪽 버튼을 눌러 그룹 으로 묶기(Group Into) > StackPanel을 선택합니다. Ellipse를 선택해서 단색 브러시 속성을 이용해서 흰색으로 바꿉니 다. 그리고 Width와 Height 속성을 10으로 합니다. 다음 Rectangle을 선택해서 역시 흰색으로 바꾼 후 Width를 10, Height을 25로 합니다. 문서 개요 창에서 playArea에 있는 StackPanel을 선택하세요(속성 창에서 형식 StackPanel인지 확인하세요). Width와 Height에 있는

버튼(자동으로 설정)을 클릭하세요. 그리고 이름 칸에 human을 입력합니다. 여기에 생

성된 XAML 코드가 있습니다.

만약 XAML 창에 이 코드를 입력한다면 </Canvas> 태그 바로 위에 코드를 입력하세요. 이것은 Canvas 안에 사람이 있다는 것을 의미합니다.

문서 개요 창으로 돌아와 새로운 컨트롤이 어떻게 나타나는지 확인해 봅시다.

7

“Game Over” 텍스트를 추가합니다.

보이는 의 바깥 라인이 형 도 는 드 코 L 여러분의 XAM 다. 이 속성을 되어 있을 겁니 정 설 이 성 속 Stroke ? 고 제거할까요 어떻게 추가하

게임이 끝났을 때 게임이 끝났다는 메시지를 표시해야 합니다. TextBlock 컨트롤을 추가해서 글꼴을 설정하고 이름을 입력해 봅시다. ★★ Canvas를 선택하고 도구 상자의 TextBlock을 끌어다 놓습니다. ★★ 속성 창의 TextBlock의 이름 칸에 GameOverText를 입력합니다. ★★ 속성 창의 텍스트 섹션을 펼친 후 글꼴을 Arial Black으로, 글꼴 크기를 100px로 하고 Bold와 기울임꼴을 선택합니다. ★★ TextBlock을 끌어서 Canvas의 중앙에 놓습니다. ★★ 그리고 텍스트에 Game Over를 입력합니다.

70    Chapter 1

Canvas에 컨트롤을 끌어 놓을 때 위와 왼쪽의 속성값은 끌어 놓은 위치 값으로 설정됩니다. 만약 위와 왼쪽의 속성값을 바꾸고 싶으면 컨트롤을 움직이면 됩니다.


C# 시작하기

8

사람을 끌어 넣을 타깃 포탈을 추가해 봅시다. Canvas에 마지막 컨트롤을 추가합니다. 플레이어가 사람을 포탈에 끌어 넣을 겁니다(Canvas가 어디에 있어 도 상관없습니다. 다음 문장부터 따라 하세요). Canvas 컨트롤을 선택해서 Rectangle 컨트롤을 위에 놓습니다. 속성 창의 브러시 섹션에서

버튼을 클릭

하여 그라데이션을 줍니다. 그리고 Height과 Width 속성을 50으로 합니다. Rectangle을 45도로 회전해서 다이아몬드 모양으로 바꿔 봅시다. 속성 창의 변형 섹션을 열어서

회전 버

튼을 눌러 Angle에 45를 입력합니다.

마지막으로 속성 창의 이름 칸에 target을 입력합니다.

축하합니다. 앱 메인 페이지를 완성했습니다.

지금 여기예요 4   71


컨트롤을 익혔습니다

지금까지 사용자 인터페이스를 만들어 보면서 컨트롤이 무슨 역할을 하는지에 대한 감각을 키웠습니다. 컨트롤의 속성이 무엇을 하는지, IDE의 속성 창 어디에 있는지 찾아서 연결해 보세요.

XAML 속성

Content

IDE의 속성 창 어디에서 찾을 수 있나요? 속성 창 꼭대기

무엇을 하죠? 컨트롤의 크기를 알 수 있습니다.

▹ 브러시 컨트롤의 각도를 설정할 수 있어요.

Height

▹ 모양 Rotation

▹ 공용

Fill

x:Name

C# 코드로 특정 컨트롤을 조작하기 위해 사용합니다.

컨트롤의 색상

▹ 레이아웃

▹ 변형

컨트롤 안에 보이는 텍스트를 바꿀 때 사용합니다.

해답은 81페이지에 있습니다.

힌트: 속성을 찾기 위해 윈도우 속성 창에 있는 검색 속성을 이용할 수 있습니다. 검색한 속성 중 일부는 모든 컨트롤의 속성에 존재하지 않습니다.

72    Chapter 1


C# 시작하기

게임 만들 준비가 됐습니다 이제 코딩을 할 수 있습니다. 여러분은 페이지의 기초가 되는 그리드를 설정하고, 컨트롤을 추가했습니다.

현재 위치 XAML 메인 페이지와 컨테이너

C# 코드

윈도우 UI 컨트롤

배포 패키지

imer

.png

imer

gle

틱(Tick) 이벤트 핸들러

sBar

pag e

Rectan

Main

.exe

Target t

틱 이벤트 핸들러

s

ckP anel gle

클릭 이벤트 핸들러

se

Rectan Ellip

첫 번째 단계에서 프로젝트를 생성하고 그리드를 설정했습니다.

App manifest

Start bu

Sta

Grid

Splash screen

Program file

tton

Progres a Canv

Enemy t

.xml

methods StartGame() AddEnemy() AnimateEnemy() EndTheGame()

그리고 페이지에 컨트롤을 추가했습니다. 다음 단계에서는 이들을 조작하기 위한 코드를 작성할 거예 요.

비주얼 스튜디오는 페이지를 꾸미기 위한 유용한 도구를 제공해 줍니다. XAML 코드를 자동으로 생성해 주죠. 그러나 이걸로 뭔가 하기에는 부족합니다. 이제 여러분이 나서야 할 차례입니다. 지금 여기예요 4   73


다음 단계로…

다음에 해야 할 것 이제부터 재미있는 부분입니다. 게임이 동작하는 코드를 추가하기 위한 세 가지 단계가 있습니다. 첫 번째 적군을 움직이게 한 다음 플레이어와 상호동작할 수 있도록 만듭니다. 마지막으로 게임을 조금 다듬어서 멋지게 만들어 봅시다.

먼저, 적을 움직여 봅시다…

첫 번째 할 일은 시작 버튼을 눌렀을 때 적들이 계속 화면을 가로질러 움직이게 하는 C# 코드를 작성하는 겁니다.

많은 프로그래머들이 코드를 조금씩 점진적으로 작성하며 프로젝트를 진행합니다. 다음 단계로 넘어가기 전에 요구사항을 확인합니다. 즉, 이 프로그램의 나머지 부분도 이런 방식으로 진행합니다. 여러분은 Canvas 컨트롤에 움직이는 적을 AddEnemy()의 메서드에 추가하는 코드를 작성할 겁니다. 페이지에 움직이는 적들을 채우는 것으로 시작해 봅시다. 게임의 나머지 부분을 만드는 데 도움이 될 겁니다.

… 그다음, 게임을 해 봅시다… 게임이 동작하려면 프로그래스 바가 카운트 다운되어야 합니다. 사람이 움직여서 적에 부딪치거나 정해진 시간이 다 되었을 때 게임을 종료해야 합니다.

템플릿을 사용해서 빨간색 원을 만듭니다. 템플릿을 수정해서 나쁜 외계인처럼 만들어 봅시다.

74    Chapter 1

… 마지막으로, 적을 외계인 모습으로 만들어 볼까요?


C# 시작하기

메서드 추가하기 이제 코딩할 때가 왔습니다. 먼저 메서드(method)를 추가해 봅시다. IDE가 생성해 준 코드로 쉽게 시작할 수 있습니다. 페이지를 편집할 때, 컨트롤을 더블-클릭하면 IDE는 코드를 자동으로 생성해 줍니다. 페이지 디자이너에서 Start 버튼을 더블-클릭합니다. 여러분은 플레이어가 Start 버튼을 클릭할 때 게임을 시작하는 코드를 추가할 것입니다. 다음 코드를 팝업 창에서 볼 수 있습니다.

Button 컨트롤을 더블-클릭할 때 IDE는 이 메서드를 생성합니다. 플레이어가 “Start!”를 클릭할 때 게임을 시작합니다.

필요한 메서드를 만들어 봅시다

또한 IDE는 이것을 XAML 에 추가합니다. 한 번 찾아보세요. 2장에서 이것이 무엇인지 알아 봅니다.

{ }중괄호 안을 클릭해서 괄호()와 세미콜론;을 포함하는 문장을 입력해 주세요.

빨간색 물결 모양의 선은 IDE가 여기에 문제가 있다는 것을 알려 주는 겁니다. 작은 파란색 상자는 IDE가 이 문제를 해결할 수 있다는 것을 의미합니다. 그냥 텍스트를 입력했는데 빨간색 물결 모양의 선이 왜 나올까요? 이것은 IDE가 뭔가 잘못되었다는 것을 알려 주는 것입니다. 물결 모양의 선을 클릭하면 오류를 고치는 데 도움을 주는 작은 파란색 상자가 나타납니다. 작은 파란색 상자 위에서 팝업되는 아이콘을 클릭합니다. 그러면 메서드 스텁을 생성하라는 박스를 볼 수 있습니다. 이것을 클릭하면 어떻게 될까요? 한 번 해 보세요!

‘Save_the_Humans.MainWindow’에 ‘AddEnemy’에 대한 메서드 스텁 생성(M)

바보 같은 질문이란 없습니다

Q :메서드가 뭐예요? Q :IDE가 메서드를 생성해 주나요? A:메서드는 코드 블록의 이름입니다. 2장에서 메서 A:네… 현재까지는요. 메서드는 프로그램의 한 부분 드에 대해서 조금 더 이야기해 봅시다.

을 만드는 기본 단위입니다. 여러분은 코딩을 하면서 많 은 메서드를 작성하고 메서드를 사용할 겁니다.

지금 여기예요 4   75


지적이고 센스있게

메서드에 코드 채워 넣기

이제 프로그램이 뭔가 해야 할 차례입니다. IDE가 메서드 스텁을 생성해서 Start 버튼의 메서드를 만들었습니다. 메서드에 코드를 입력해 봅시다.

여기에 있는 C# 코드와 정확하 게 일치해야 합니다. 오타로 실수하기 쉽습니다. C# 코 드를 입력할 때, 대소문자가 정확

하게 일치해야 합니다. 괄호와 콤마, 세미콜론을 잘 확인해 보세요. 하나라도 빠지면 프로그램은 동작하

1

IDE가 생성한 메서드 스텁의 내용을 지웁니다.

지 않습니다.

이것을 선택해서 지우세요. 12장에서 예외에 대한 것을 배울 겁니다. 2

코드를 추가합니다. Content를 메서드 몸체에 입력합니다. IDE는 키워드를 제안하는 인텔리센스 창을 띄 울 것입니다. 리스트에서 ContentControl을 선택하세요.

3

마지막으로 첫 번째 줄에서 이 코드를 추가하세요. new를 입력할 때 다른 인텔리센스 창이 나타납니다.

76    Chapter 1

이 라인은 새로운 ContentControl의 객체를 생성합니다. 3장에서 객체와 new 키워드를, 4장에서 enemy와 같은 참조변수를 배웁니다.


C# 시작하기 4

AddEnemy() 메서드를 채우기 전에 파일의 위쪽에 한 줄의 코드를 추가합니다. public sealed partial MainPage로 시작하는 줄을 찾아서 중괄호{ 이후의 내용을 입력합니다.

이것을 필드(Field)라고 부릅니다. 4장에서 조금 더 자세히 배워 봅니다.

5

아래 내용을 AddEnemy 메서드에 입력해 봅시다. 빨간색 물결의 밑줄이 보입니다. 여기에 메서드 스텁을 추가하면 AnimateEnemy()에 있는 밑줄은 사라집니다.

이 라인은 적 컨트롤 객체에 Children(자식) 이라고 불리는 컬렉션을 추가합니다. 8장에서 컬렉션에 대해 배워 봅니다.

PlayArea에 물결 모양의 밑줄이 보인다고요? XAML 편집기로 돌아가서 Canvas 컨트롤의 이름이 playArea로 되어 있는지 확인해 보세요.

XAML과 C#의 코드 위치를 바꾸고 싶다면 윈도우 위의 탭을 이용하세요.

6

작은 파란색 상자를 이용하여

버튼을 누르면 AnimateEnemy() 메서드 스텁이 생성됩니다. AddEnemy()에서

했던 것처럼 말이죠. 이번에는 enemy, p1, p2, p3라고 불리는 4개의 매개변수(Parameter)가 추가됩니다. 메서드 의 위쪽에 있는 3개의 매개변수를 수정해 봅시다. p1을 from으로, p2를 to, p3를 propertyToAnimate로 수정합 니다. 그리고 int 유형을 double로 수정합니다.

2장에서 메서드와 매개변수에 대해 배워 봅니다.

IDE에서 메서드 스텁을 “int” 유형으로 생성할 거예요. 이것을 “double”로 바꿔 주세요. 4장에서 유형에 대해 배워 봅니다.

다음 페이지에서 프로그램을 실행해 봅시다. 지금 여기예요 4   77


OK, 이 정도면 꽤 훌륭해요!

메서드를 끝내고 프로그램을 실행해 봅시다 여러분의 프로그램은 실행할 준비가 거의 다 되었습니다. 이제 남은 부분은 AnimateEnemy() 메서드를 끝내는 겁니다. 아직 안 된다고 좌절하지 마세요. 아마 콤마나 괄호 같은 것이 빠져 있을 수도 있어요. 빠져 있는 부분이나 오타를 조심하셔야 합니다! 1

아직 물결 모양의 빨간색 선이 보인다구요? IDE 는 그 문제가 뭔지 알고 있습니다. 아직 물결 모양의 빨간색 밑줄이 보인다면, 그 것은 코드의 일부분이 잘못 입력되었다는 것 을 의미합니다. 이 책은 수많은 사람의 테스트

파일의 윗부분에 using문을 추가해 주세요.

를 거쳤습니다. 잘못된 부분이 없는지 꼼꼼하

파일 맨 위쪽으로 이동합니다. IDE는 using으로 시작하는 몇 개의 라인들

게 확인했습니다. 그러므로 프로그램이 돌아가

게 하려면 이 책과 똑같이 입력하시면 됩니다. 을 생성해 줍니다. 아래의 리스트 밑에서 한 라인을 추가해 주세요. using Save_the_Humans.Common; using System; using System.Collections.Generic; C#에서 .NET using System.IO; using System.Linq; 라이브러리의 using System.Runtime.InteropServices.WindowsRuntime; 코드를 사용할 using Windows.Foundation; using Windows.Foundation.Collections; 수 있는 이러한 using Windows.UI.Xaml; 구문들은 using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls.Primitives; 2장에서 배워 이 줄을 조금 더 쉽게 작성할 using Windows.UI.Xaml.Data; 수 있습니다. 인텔리센스 봅니다. using Windows.UI.Xaml.Input; 창을 이용해서 코드를 입력해 봅시다. 마지막 부분에 using Windows.UI.Xaml.Media; 세미콜론을 입력하는 것을 잊지 using Windows.UI.Xaml.Navigation; 마세

요.

using Windows.UI.Xaml.Media.Animation; 2

적이 움직이는 애니메이션 코드를 추가해 봅시다.

이 using 구문은 .NET 프레임워 크에서 적들이 움직이는 애니메이션 코드를 사용할 수 있게 해 줍니다.

이전 페이지에서 AnimateEnemy() 메서드를 만들었습니다. 이제 코드를 추가 할 차례입니다. 적들이 화면을 가로지르며 움직이게 만들어 봅시다.

애니메이션에 대해서는 16장에서 배울 거예요.

3

4장에서 객체

이니셜라이저에 대해 배워 봅니다.

이 코드는 적이 playArea를 가로지르며 움직이게 해 줍니 다. 여러분이 숫자 4, 6을 수정하면 적들을 느리거나 빠르게 만들 수 있습니다.

코드를 살펴봅시다. 오류가 있으면 안 됩니다. 오류 목록 창이 비어 있어야 하죠. 오류 목록이 보인 다면 그 오류를 더블-클릭하세요. 커서가 오류가 발생한 부분으로 이동합니다.

78    Chapter 1

오류 목록 창을 볼 수 없다면 메뉴에서 보기(View) > 오류 목록 (Error List)을 선택하세요. 2 장에서 오류 창과 코드 디버깅에 대해 배워 봅니다.


C# 시작하기

IDE에서 창을 다시 설정하고 싶을 때, 창 (Window) 메뉴 > 창 레이아웃 다시 설정 4

(Reset Window Layout)을 하면 됩니다.

프로그램을 실행해 봅시다. IDE에서 버튼을 찾아 프로그램을 실행해 봅시다.

이 버튼을 누르면 프로그램이 시작합니다. 5

이제 프로그램이 실행됩니다! 처음에 큰 X 표시가 몇 초 동안 보일 것입니다. 그리고 여러분의 메인 페이지가 보일 겁니다. “Start!” 버튼 을 몇 번 클릭해 보세요. 클릭할 때마다 원 모양의 도형이 캔버스를 가로지르며 움직입니다.

했던 것처럼 훌륭하네요! 우리가 약속 만 더 작업을 오래 걸리진 않았죠? 조금 다. 해서 게임을 만들어 봅시

화면에 큰 X 표시가 잠깐 보입니다. 마지막 장에서 깜빡이는 화면을 다르게 만들어 봅시다.

적들이 움직이지 않거나 플레이 영역을 벗어난다면, 코드를 다시 확인해 보세요. 단어나 괄호가 빠져 있을 수도 있습니다.

6

프로그램을 멈춰 봅시다. Alt + Tab을 눌러 IDE로 돌아와서 도구 모음(Toolbar)에 있는

버튼의 위치에

버튼으로 바뀐 모두 중

단(break), 디버깅 중지(stop), 다시 시작(restart)을 확인하세요. 디버깅 중지를 눌러 프로그램을 멈춰 봅시다.

지금 여기예요 4   79


여기는 어디고, 뭘 해야 하죠?

지금까지 한 일 축하합니다! 여러분은 프로그램이 돌아갈 수 있게 만들었습니다. 아직은 게임을 완성하지 않았지만, 시작이 반이라는 말도 있잖아요. 잠시 뒤를 돌아보고 무엇을 했는지 살펴볼까요?

현재 위치 XAML 메인 페이지와 컨테이너

C# 코드

윈도우 UI 컨트롤

배포 패키지

imer

.png

틱(Tick) 이벤트 핸들러

sBar

pag e

imer

gle

Target t

Rectan

Main

.exe

틱 이벤트 핸들러

ckP anel

s

App manifest

클릭 이벤트 핸들러

methods gle

StartGame() AddEnemy() AnimateEnemy() EndTheGame()

se

Rectan Ellip

사용자 인터페이스 를 만들며 순탄하게 시작했었죠.

Program file

Start bu

Sta

Grid

.xml

tton

Progres a Canv

Enemy t

이 단계에서 C# 코드를 작성하며 동작하는 게임을 만듭니다.

제로 동작할 그러나 앱이 실 # 코드가 수 있게 하는 C . 필요했습니다

비주얼 스튜디오는 일부 코드를 자동으로 생성해 줍니다. 자동으로 생성한 코드만으로 아무것도 할 수가 없죠. 앱을 만들기 전에 뭘 해야 할지 생각하고, 코드를 작성해야 합니다. 80    Chapter 1

Splash screen


C# 시작하기 72페이지의 “나는 누구일까요?”의 연습문제 해답이 여기 있습니다. 앞으로 여러분에게 십자퍼즐과 연습문제에 대한 답을 제공합니다.

정답 지금까지 사용자 인터페이스를 만들어 보면서 컨트롤이 무슨 역할을 하는지에 대한 감각을 키웠습니다. 컨트롤의 속성이 무엇을 하는지, IDE의 속성 창 어디에 있는지 찾아서 연결해 보세요.

XAML 속성

IDE의 속성 창 어디에서 찾을 수 있나요?

Content

속성 창 꼭대기

Height

무엇을 하죠? 컨트롤의 크기를 알 수 있습니다.

▹ 브러시

▹ 모양

컨트롤의 각도를 설정할 수 있어요.

Rotation

▹ 공용 Fill

▹ 레이아웃

x:Name

▹ 변형

C# 코드로 특정 컨트롤을 조작하기 위해 사용합니다.

컨트롤의 색상

컨트롤 안에 보이는 텍스트를 바꿀 때 사용합니다.

rea”로 입력한 게 Canvas 컨트롤의 이름에 “playA 에 있습니다. 속성 기억나나요? XAML의 “x:Name” 할수 작성 쉽게 이것은 Canvas에서 C# 코드를 있도록 도와 줍니다.

지금 여기예요 4   81


틱틱틱

타이머 추가하기 게임을 동작하는 하나의 중요한 요소를 추가해 봅시다. 이 게임은 적이 계속 늘어나야 합니다. 그리고 플레이어가 사람을 목표 지점으로 이동시키는 중에 프로그래스 바가 천천히 채워져야 합니다. 타이머(Timers)로 이 두 문제를 해결해 봅시다. 여러분이 작성한 MainPage.Xaml.cs 파일에는 1

MainPage 클래스 코드가 포함되어 있습니다. 클래스에 대해서는 3장에서 배워 봅니다.

윗부분에 C# 코드를 몇 라인 더 추가해 봅시다.

파일에서 여러분이 추가한 Random 라인으로 올라갑니다. 아래 3줄을 추가해 주세요.

Random 아래 3줄을 추가하세요. 이것을 필드라 합니다. 4장에서 배워 봅시다. 2

타어머에 대한 메서드를 추가합니다. IDE가 생성한 이 코드를 찾아 보세요.

public MainPage() { this.InitializeComponent(); this.navigationHelper = new NavigationHelper(this); this.navigationHelper.LoadState += navigationHelper_LoadState; this.navigationHelper.SaveState += navigationHelper_SaveState; }

커서를 맨 마지막 줄의 세미콜론 바로 뒤에 놓은 뒤, 엔터키를 두 번 칩니다. 그리고 enemyTimer.를 입력합니다(점을 포함합니다). 점을 입력하는 순간, 인텔리센스 창이 나타날 것입니다. 여기서 Tick을 선택하고 아래와 같이 입력하세요. +=를 입력하면 아래의 팝업 상자가 뜹니다. (<TAB> 키를 눌러 삽입합니다.)

Tab키를 누르면 다른 상자가 나타날 것입니다.

<TAB> 키를 눌러 이 클래스에 ‘enemyTimer_Tick’ 처리기를 생성합니다.

Tab키를 한 번 더 누르면 IDE는 아래의 코드를 생성해 줍니다. void enemyTimer_Tick(object sender, object e) { throw new NotImplementedException(); }

82    Chapter 1

IDE는 이벤트 핸들러에 대한 메서드를 생성해 줍니다. 15장에서 이벤트 핸들러에 대해 배워 봅니다.

타이머의 “tick”은 시간 간격마다 메서드를 호출합니다. 첫 번째 타이머는 몇 초마다 적들을 추가합니다. 두 번째 타이머는 시간이 만료되면 게임을 종료합니다.


3

메서드를 작성할 때 괄호()를 넣습니다.

C# 시작하기

MainPage() 메서드를 마무리해 봅시다. 두 번째 타이머를 위한 Tick 이벤트 핸들러를 추가해 봅시다. 네 줄의 코드 를 추가해야 합니다. 여러분이 작성한 MainPage() 메서드에서 아래와 같

브레인 파워

이 IDE가 생성한 두 개의 메서드가 있습니다. public MainPage() { this.InitializeComponent(); this.navigationHelper = new NavigationHelper(this); this.navigationHelper.LoadState += navigationHelper_LoadState; this.navigationHelper.SaveState += navigationHelper_SaveState; enemyTimer.Tick += enemyTimer_Tick; enemyTimer.Interval = TimeSpan.FromSeconds(2); }

targetTimer.Tick += targetTimer_Tick; targetTimer.Interval = TimeSpan.FromSeconds(.1);

void targetTimer_Tick(object sender, object e) { throw new NotImplementedException(); } void enemyTimer_Tick(object sender, object e) { throw new NotImplementedException(); }

4

지금 바로 시작 버튼을 눌러 움직이는 적을 플레이 영역에 추가해 봅시다. 시작 버튼을 눌러 적을 추가하는 대신에 적을 자동으로 생성하려면 무엇이 필요할까요?

게임을 다 만들었을 때, 여기에 있는 숫자를 바꿔 봅시다. 게임이 어떻게 바뀔까요?

여러분이 Tab키를 눌러 이벤트 핸들러를 추가할 때마다 IDE는 여기에 코드를 생성합니다. 여러분은 타이머의 Tick마다 실행되는 코드로 수정 해야 합니다.

EndTheGame() 메서드를 추가합시다. targetTimer_Tick() 메서드로 가서, IDE가 생성해 준 코드를 지우고 아래의 코드를 추가합니다. 인텔리센스 창의 목록과 조금 다르네요.

progressBar를 입력할 때 계속해서 대문자 P로 바뀌나요? IDE가 코드에 소문자 p 의 progressBar가 없어서 이와 비슷한 컨트롤 유형을 찾아 주기 때문입니다.

XAML 코드가 있는 디자이너 탭이 닫혀 있다면, 솔루션 탐색기 창에 있는 MainPage. xaml을 더블-클릭하세요. 왜 progressBar에 오류가 날까요? 여러분이 컨트롤을 사용할 때, 이름이 없거나 오타가 발생할 경우 어떻 게 되는지 보여 주기 위해서 위의 코드를 입력했습니다. XAML 코드 창으로 가서(IDE의 다른 탭에 있는), 아래 줄에 추가한 ProgressBar 컨트롤을 찾아 보세요. 그리고 이름을 progressBar로 수정해 주세요. 다음, 코드 창으로 돌아가서 EndTheGame() 메서드 스텁을 생성합니다. 조금 전에 했던 AddEnemy()를 생성한 것처럼 말이죠. 여기에 메서드 코드가 있습니다.

이 메서드는 타이머를 gameOverText가 오류로 뜬다면, TextBlock의 이름 속성이 gameOverText 로 되어 있지 않다는 것을 의미합니다. 지금 돌아가서 바로 수정하세요.

멈추고, 시작 버튼을 다시 보이게 합니다. 그리고 게임을 종료하며 “GAME OVER” 텍스트를 플레이 영역에 보여 줍니다. 지금 여기예요 4   83


이제 얼마 남지 않았습니다

시작 버튼 동작하게 하기

코드 구울 준비

시작 버튼을 누르면 캔버스에 원이 나오게 만든 걸 기억하나요? 이제 진짜 게임이 시작되도록 고쳐 봅시다.

1

이 책에서는 여러분이 작성할 많은 코드를 제공합니다.

시작 버튼이 동작하도록 만들어 봅시다. 이미 추가한 시작 버튼을 누르면 적이 생성되는 코드를 찾습니다. 다음과 같

이 책의 마지막에서 이 코드가 무엇을 하게 되 는지 알게 될 겁니다. 지금처럼 아무 생각 없

이 수정하세요.

이 그냥 코드를 입력하면 됩니다. 현재 여러분이 해야 할 일은 코드를 정확하게

이 라인은 시작 버튼으로 적을 playArea 캔버스에 생성하는 대신 게임을 시작하게 합니다. 2

입력하고, 지시에 정확히 따르는 것입니다.   이렇게 코딩을 하면서 IDE에 익숙해질 수 있 습니다. 만약 진행이 잘 되지 않는다면 ⇒ MainPage.

StartGame() 메서드를 추가합니다. 메서드 스텁을 생성해서 StartGame() 메서드를 만드세요. IDE가 추가한

xaml과 MainPage.Xaml.cs 파일을 내려 받으 세요. 혹은 각각의 메서드에 XAML과 C#의 코

메서드 스텁에 다음과 같이 코드를 입력하세요.

드를 복사/붙여 넣기 하세요. 아래의 URL에

15장에서

IsHitTestVisible에 대해 배워 봅니다.

있습니다. http://www.hanbit.co.kr/exam/2165

포탈(target)의 Rectangle과 사람(human)의 StackPanel 컨트롤의 이름 설정을 했습니다. 컨트롤의 이름을 맞게 설정했는지 확인해 보세요.

3

EnemyTimer에 적을 추가합니다. IDE가 생성한 enemyTimer_Tick() 메서드를 찾아서 다음과 같이 수정 하세요.

코딩에 익숙해지면, 빠진 괄호나 세미콜론 등을 찾는 데 능숙해집니다.

이해할 수 없는 오류들이 오류 목록 창에 보입니까? 하나의 점이나 세미콜론이 잘못되었을 경우, 하나의 오류가 두 개, 세 개, 네 개 혹은 그 이상의 오류를 발생시킵니다. 모든 오타를 찾는 데 시간을 낭비하지 마세요! 아래의 웹 페이지로 가면 이 프로그램의 코드를 쉽게 찾아서 복사/붙여 넣기를 할 수 있습니다. 84    Chapter 1

http://www.hanbit.co.kr/exam/2165


C# 시작하기

진행 상황을 볼까요? 게임이 거의 완성되어 갑니다. 게임을 실행해서 어떻게 동작하는지 살펴봅시다.

“Start!” 버튼을 누를 때, 버튼이 사라지고 적군들이 나타나며 프로그래스 바가 채워지기 시작합니다.

프로그래스 바가 다 찼을 때, 게임이 끝나고 Game Over 텍스트가 표시됩니다.

타깃(포탈) 타이머가 천천히 채워지면서, 적군들은 2초마다 생성됩니다. 만약 타이머가 동작하지 않는다면, MainPage() 메서드에서 추가한 모든 코드를 확인해 보세요.

경고! 우리의 스파이가 인간들이 방어막을 구축하고 있다고 보고했다.

플레이 영역은 움직이는 적들로 천천히 채워지기 시작합니다.

브레인 파워 게임을 완성하기 위해서 어떤 일들이 남았을까요?

나머지 해야 할 일은 다음 페이지에 있습니다.

지금 여기예요 4   85


이벤트

플레이어가 컨트롤을 조정하는 코드를 작성해 봅시다

코드를 작성하기 전에 앱을 멈추고 IDE로 전환하세요.

플레이어가 사람을 포탈로 끌어야 합니다. 사람이 포탈에 닿을 때 적절한 반응을 해야 합니다. 이러한 코드를 작성해 봅시다. 4장에서 속성 1

XAML 디자이너로 가서 문서 개요 창의 human을 선택합니다(기억나시죠? Circle과 Rectangle로 이루어진 StackPanel입니다). 그리고 속성 창에서

버튼을 누르면

창에 있는 이벤트 헨들러를 배워 봅니다.

이벤트 핸들러가 보입니다. PointerPressed 행을 찾아 빈 상자에 더블-클릭하세요.

이 상자를 더블-클릭 하세요.

문서 개요에는 [Grid], playArea, 다른 라인들의 컨트롤이 축소되어 있습니다. human 컨트롤을 찾아 확장하면 됩니다.

이제 XAML 창에서 IDE가 StackPanel을 위해 무엇을 추가했는지 확인해 보세요.

메서드 스텁이 추가되었습니다. XAML 창에서 human_PointerPressed를 오른쪽 클릭합니다. “정의로 이동”을 선택해 C# 코드로 바로 넘어갑니다.

2

그리고 코드를 입력하세요.

속성 창에서 속성과 이벤트 핸들러가 있는 이 버튼을 이용하면 됩니다.

디자이너에서 StackPanel을 다시 클릭하면, 속성 창에서 새로운 이벤트 핸들러 메서드의 이름이 보입니다. 더 많은 이벤트 핸들러를 같은 방법으로 추가할 수 있습니다. 86    Chapter 1


이벤트 핸들러를 바르게 추가했는지 확인하세요! 이전엔 사람 컨트롤에 PointerPressed 이벤트 핸들러를 추가했습니다. 여기에서는 타깃에 PointerEntered 이벤트 핸들러를 추가합니다. 3

문서 개요 창에서 이름이 target으로 된 Rectangle을 선택합니다. 속성 창의 “선택한 요소의 이벤트 처리기(event handlers view)”에서 PointerEntered 이벤트 핸들러 를 추가합니다. 여기에 메서드 코드가 있습니다.

C# 시작하기

속성 창에서 이벤트 핸들러가 보인다면, 빈 이벤트 핸들러 상자에 더블-클릭하세요. IDE 가 메서드 스텁을 생성해 줍니다.

이벤트 핸들러와 속성을 보여 주는 속성 창에서 컨트롤 이름을 바꿀 수 있습니다. 4

이번에는 playArea Canvas 컨트롤에 두 개의 이벤트 핸들러를 추가합니다. 문서 개요의 오른쪽 [Grid]를 찾습니 다. 두 개가 있는데, 메인 페이지의 [Grid]가 아닌 자식 [Grid]를 선택한 후 이름을 grid로 수정합니다. 그리고 아래 와 같이 playArea에 이벤트 핸들러를 추가합니다.

괄호가 정말 많네요! 실수하지 않게 조심하세요.

두 개의 수직 바는 논리 연산을 의미합니다. 2장에서 배워 봅시다. 숫자 3보다 작거나 크게 해서, 감도를 높이거나 낮출 수 있습니다.

이벤트 핸들러에 코드를 똑바로 입력했는지 확인하세요. 두 내용이 바뀌면 안 됩니다. 지금 여기예요 4   87


모두 구할 수 없어요

사람과 적이 부딪히면 게임이 끝납니다 사람과 적이 부딪히면, 게임이 종료되어야 합니다. 코드를 추가해서 그렇게 만들어 봅시다. AddEnemy() 메서드로 가서 끝에 한 줄의 코드를 추가합니다. 인텔리센스 창을 이용해서 enemy.PointerEntered를 입력합니다.

AddEnemy() 메서드의 마지막 줄에 커서를 두고, 엔터키를 친 후 코드를 입력하세요. enemy를 입력하고 점(.) 을 누르면 인텔리센스 창이 뜹니다. 그리고 “Pointer”를 입력해 보세요. “Pointer…” 로 시작하는 목록으로 건너 뜁니다.

PointerEventHandler UIElement.PointerEntered 포인터가 이 요소의 적중 테스트 영역에 들어가면 발생합니다.

목록에서 PointerEntered를 선택하세요(잘못 선택해도 괜찮아요. 점(.)까지 다시 지우면 됩니다. 다시 점을 입력해서 인텔리센스 창을 띄우세요).

다음, 전에 했던 것처럼 이벤트 핸들러를 추가합니다. +=를 입력하고 Tab 키를 누르세요.

15장에서 이벤트 (<TAB> 키를 눌러 삽입합니다.)

다시 Tab 키를 눌러 이벤트 핸들러를 위한 스텁을 생성합니다. <TAB> 키를 눌러 이 클래스에 enemy_PointerEntered 처리기를 생성합니다.

이제 새로운 메서드가 생성되었습니다. 다음 코드를 입력하세요.

88    Chapter 1

핸들러가 어떻게 동작하는지 배워볼 거예요.


C# 시작하기

이제 게임을 할 수 있습니다 게임을 실행해 보세요. 이제 거의 끝났습니다. 시작 버튼을 누를 때, 플레이 영역에서 동그란 적이 나타납니다. 그리고 사람과 포탈이 놓여 있습니다. 프로그래스 바가 가득 차기 전에 사람을 타깃으로 옮겨야 합니다. 처음엔 쉽지만, 시간이 지날수록 적이 늘어나서 게임이 어려워집니다.

사람을 안전한 곳으로 대피시켜 주세요! 외계인들은 이리저리 움직이며 사람을 순찰합니다. 사람과 적이 부딪히는 순간 게임은 끝납니다. 외계인을 피해 인간을 잘 움직인다면, 적으로부터 일시적으로 안전합니다. human에 적용된 IsHitTestVisible 속성을 살펴보세요. IsHitTestVisible 속성이 true일 때, human은 PointerEntered 이벤트를 차단합니다. 사람 (human) 의 StackPanel 컨트롤은 적군과 포인터 사이 에 위치합니다.

시간이 가기 전에 사람을 피신시켜 주세요…

… 너무 빨리 끌면 사람을 잃을 수 있어요!

지금 여기예요 4   89


휘파람 부는 외계인

적을 외계인처럼…

속성 대신 이벤트가 보 인다고요?

빨간색 원은 뭔가 이상합니다. 템플릿을 사용해서 빨간색 원을 조금 더 멋지게 수정해 봅시다. 1

속성 창에 있는 토글 버 튼을 이용해서 여러분이

문서 개요에서 ContentControl 오른쪽 클릭 > 템플릿 편집 > 현재 항

선택한 컨트롤의 속성과 이벤트를 볼

목 편집을 선택합니다. XAML 창에서 템플릿을 볼 수 있습니다. El-

수 있습니다. 스패너와

lipse 태그에서 width를 75로, Fill을 Gray로 설정합니다. 그리고

번개 모양의 아이콘을

을 추가해서 바깥 테두리 선을 만듭니다. 그리고 수

클릭해 보세요.

평과 수직에서 다시 설정을 누릅니다. 코드는 다음과 같습니다(작업을 하 면서 실수로 추가된 속성들을 지워도 됩니다).

2

도구 상자에서 이미 만든 원 위에 또 다른 Ellipse를 추가합니다. Fill=”black”, width=25, height=35로 수정합니다. 그리고 정렬과 여백 설정을 다음과 같이 합니다.

마우스나 방향키를 이용해 Ellipse를 눈으로 이동시켜 눈알을 만들 수도 있습니다. 기존에 있는 Ellipse를 복사/붙여 넣기 해서 눈 위에 놓고, 조금만 수정하면 됩니다. 3

4

속성 창에서 변형 섹션의

(기울이기)를 선택하고 다음과 같이 합니다.

이미 만든 원 위에 Ellipse를 하나 더 추가합니다. Fill=“black”, width=25, height=35로 수정합니다. 그리고 정렬과 여백 설정을 다음과 같이 합니다.

그리고 기울이기를 추가합니다.

90    Chapter 1

이제 여러분의 적은 인간을 잡아 먹는 외계인처럼 생겼네요.


C# 시작하기

깜빡이는 화면과 타일 추가하기

깜빡이는 화면과 로고를 만들기 귀찮다고요?

게임을 실행할 때 큰 X자 표시가 나타납니다. 그리고 윈도우 시작 페이지로 돌아갈 때, 다시 타일이 나타납니다. 이것을 바꿔 봅시다.

여기에서 다운로드할 수 있습니다. http://www.hanbit.co.kr/exam/2165

솔루션 탐색기 창에서 폴더를 확장하면 4개의 파일이 보입니다. 각각의 파일을 더블-클릭한 뒤 그림판에서 편집하세요. 게임을 시작할 때 깜빡이는 화면은 SplashScreen.png 파일입니다. Logo.png와 SmallLogo. png 파일은 시작 화면에 표시됩니다. 그리고 StoreLogo.png 파일은 검색 화면(혹은 윈도우 스토어)에 표시됩니다.

몇몇의 비주얼 스튜디오의 에디션은 그림판 대신 그들만의 그래픽 편집기를 제공해 줍니다.

여기에 새롭게 만든 적 템플릿의 XAML 코드가 있습니다.

한 가지 더 해야 할 것은… 그냥 여러분이 만든 게임을 즐기세요! XAML 코드를 참고해서 사람과 포탈, 플레이 영역과 외계인을 창의적으로 바꿔 보세요.

그리고 복습하는 것을 잊지 마세요. 여러분은 임무를 훌륭하게 완수했습니다. 굿 잡!

지금 여기예요 4   91


현재 위치

모든 사람이 앱을 사용할 수 있습니다

XAML 메인 페이지와 컨테이너

ti

imer

n Recta

t Enemy

틱(Tick) 이벤트 핸들러

sBar

Main

틱 이벤트 핸들러

s

va Can

.xml

App manifest

tton

Progres

u Start b

St

클릭 이벤트 핸들러

Grid

gle

1

.exe

mer

gle

Target

methods StartGame() AddEnemy()

n Recta

s Ellip

e

앱을 배포하는 과정은 다음과 같습니다.

배포 패키지 .png

pag e

여러분이 만든 앱이 재미있네요! 이제 배포할 시간입니다! 앱을 윈도우 스토어에 배포한다면, 수백만의 잠재적인 사용자가 사용할 수 있습니다. IDE 는 윈도우 스토어에 앱을 배포하는 과정을 안내해 줍니다.

C# 코드

윈도우 UI 컨트롤

ack Panel

앱 배포하기

스토어(Store) > 개발자 계정 열기(Open Developer Account...)를 선택합니다.

2

앱 이름과 연령 등급, 설명을 입력 합니다. 그리고 비즈니스 모델 (무료, 유료, 광고 표시)을 선택합 니다.

3

문제를 확인하고 해결하기 위해 윈 도우 앱 인증 키트를 사용해서 앱을 테스트합니다.

4

스토어에 앱을 제출하세요! 앱이 등 록되면, 전 세계 수백만 명의 사람 이 앱을 찾아 다운로드할 수 있습 니다.

IDE의 스토어(Store) 메뉴에는 앱을 배포하기 위한 도구가 있습니다.

이 책에서는 MSDN(Microsoft Developer Network)을 통해 더 많은 정보를 찾는 방법을 보여 줍니다. 여러분의 지식을 넓히는 데 도움이 될 것입니다.

몇몇의 비주얼 스튜디오 에디션은 스토어 메뉴가 없는 대신, 프로젝트 메뉴 아래에 있습니다.

윈도우 스토어에서 앱을 배포하는 방법에 대해 여기서 자세히 알 수 있습니다. http://msdn.microsoft.com/ko-kr/library/windows/apps/jj657972.aspx

92    Chapter 1

Program file

Splash screen


C# 시작하기

사이드 로딩을 위한 원격 디버거 사용하기 윈도우 스토어로 앱을 배포하지 않고 원격 컴퓨터에서 앱을 실행할 수 있습니다. 윈도우 스토어를 거치지 않고, 앱 설치하는 것을 사이드 로딩(sideloading)이라고 하죠. 사이드 로딩을 할 수 있는 가장 쉬운 방법은 다른 컴퓨터에서 비주얼 스튜디오 원격 디버거(Visual Studio Remote Debugger)를 설치하는 것입니다.

이 책이 쓰이고 있는 시점에 여러분은“Visu al Studio 나 업데이트된 버전을 찾을 수도 있을 거예요. 2013용 원격 도구”를 찾을 수 있을 겁니다. 그러

원격 디버거로 앱 로딩을 하는 방법은 다음과 같습니다. ★★ 원격 컴퓨터가 윈도우 8인지 확인합니다.

★★ 마이크로소프트 다운로드 센터(http://www.microsoft.com/ko-kr/download/default.aspx)에 가서 “Visual Studio 2013 원 격 도구”를 검색합니다. ★★ 컴퓨터 아키텍처(x86, x64, ARM)를 선택해서 다운로드하고 원격 도구를 설치합니다. ★★ 시작 페이지에서 Remote Debugger를 실행합니다.

★★ 네트워크 설정을 바꾸고 싶다면 팝업 창에서 설정하면 됩니다(팝업 창이 뜰 것입니다). 실행할 때 Visual Studio 원격 디버깅 모니 터 창에서 볼 수 있습니다.

“MY-SURFACE”의 컴퓨터에서 실행하고 있습니다. 조금 있다가 사용할 수 있으니, 컴퓨터 이름을 잘 기억하세요. ★★ 원격 컴퓨터는 이제 비주얼 스튜디오 원격 디버깅 모니터에서 실행되고, 개발 컴퓨터에 있는 비주얼 스튜디오가 연결되길 기다리 고 있습니다.

네트워크 설정이 이상하다면 원격 디버거를 실행하는 데 문제가 있습니다. 다음 MSDN 페이지는 장치에서 원격 디버깅을 설정하는 데 도움을 줍니다. http://msdn.microsoft.com/ko-kr/library/vstudio/bt727f1t.aspx 원격 컴퓨터에서 앱을 실행하려면 뒤로 넘겨주세요!

지금 여기예요 4   93


이제 인류는 안전합니다

원격 디버깅 시작하기 원격 컴퓨터가 원격 디버깅 모니터를 실행하고 있다면, 여러분은 비주얼 스튜디오에서 원격으로 앱을 설치한 후 실행할 수 있습니다. 컴퓨터에 있는 앱이 자동으로 사이드 로딩됩니다. 그리고 여러분이 원하는 시간에 시작 페이지에서 한 번 더 실행됩니다.

1

디버깅 드롭-다운 메뉴에서 “원격 컴퓨터”를 선택하세요. 원격 컴퓨터로 프로그램을 실행하기 위해서 IDE의 디버깅 드롭-다운 버튼을 사용할 수 있습니다. 여러분의 프로그램을 실행할 때 사용했던

버튼에서 이렇게 생긴 모양의 (

)드

롭-다운을 클릭한 뒤, 원격 컴퓨터를 선택합니다.

다음 장에서는 시뮬레이터를 사용할 것입니다. 여러분은 많은 프로그램을 작성하게 되고, 프로그램을 실행하는 이 버튼이 필요하게 될 겁니다.

2

원격 컴퓨터에 여러분의 프로그램을 실행해 봅시다. 원격 컴퓨터로 여러분의 프로그램을 실행해 봅시다. 이제

버튼을 눌러 프로그램을 실행합니다. IDE는 팝업

창에서 원격 컴퓨터에 실행을 시킬 것인지 묻습니다. 만약 여러분의 서브넷에서 원격 컴퓨터를 발견하지 못했다 면, 수동으로 원격 컴퓨터 이름을 입력합니다.

나중에 디버깅할 원격지를 변경할 때, 프로젝트 설정에서 정보를 수정할 수 있습니다. 솔루션 탐색기에서 프로젝트의 이름을 마우스 오른쪽으로 클릭한 후, 속성에서 디버그 탭을 선택합니다. 입력란이

원격 디버깅 모니터에서 본 컴퓨터 이름을 입력합니다.

비어 있고 원격 디버거를 다시 시작할 경우, 원격 디버거 연결을 위한 팝업 창이 다시 나타납니다.

94    Chapter 1


C# 시작하기

3

자격 증명을 입력합니다. 원격 컴퓨터에 사용자의 이름과 암호를 입력하라는 창 이 뜹니다. 만약 원격 컴퓨터에서 인증을 피하고 싶다 면, 원격 디버깅 모니터에서 인증을 끌 수도 있습니다 (아무나 원격 컴퓨터로 들어와서 프로그램을 실행할 수 도 있으니, 이것을 권하지 않습니다).

4

개발자 라이선스를 획득하세요. 여러분은 이미 비주얼 스튜디오를 설치했을 때 무료 개발자 라이선스를 획득했습니다. 여러분은 앱을 다른 원격 컴퓨터 로 사이드 로딩하기 위한 라이선스가 필요합니다. 편리하게 도, 원격 디버깅 모니터가 라이선스를 획득하기 위한 창을 자동으로 띄어 줍니다.

5

이제... 인류를 구했습니다! 이 설정을 통해서 프로그램은 원격 컴퓨터에서 실행될 것입니다. 프로그램이 사이드 로딩된 이후 다시 프로그램을 실행하고 싶다면, 윈도우 시작 페이지에서 다시 실행 하면 됩니다. 축하합니다. 여러분은 첫 번째 윈도우 스토어 앱을 만들고 다른 원격 컴퓨터에서 앱을 실행했습니다.

침략 실패. 퇴각하라! 이것은 명령이다! 지구인들은 호락호락하지 않구나. 부대를 재편성하고 전략을 다시 세워야 한다!

축하합니다! 이제 여러분은 외계인의 침략으로부터 자유로워졌습니다. 그런데 왜 이게 마지막이라는 느낌이 들지 않죠?

지금 여기예요 4   95



2 모두 다 코드에 불과하나니...

뒤에 숨어 있는 그 무엇 언젠가 그 뒤에 무슨 일이 일어나고 있는 건지 알아내고 말 거야…

우리는 그냥 IDE 사용자가 아니라 프로그래머입니다. IDE만 가지고도 꽤나 많은 일을 할 수 있습니다. 하지만 거기에는 한계가 있습니다. 물론 응용 프로그램을 만들다 보면 반복적인 작업을 많이 해야 하긴 합니다. 그런 일을 하다 보면 IDE에서 제공하는 기능이 정말 많이 도움이 된다는 것을 알 수 있죠. 하지만 IDE를 가지고 작업하는 것은 시작에 불과합니다. 프로그램에서 할 수 있는 일은 IDE에서 하는 일에 비하면 무궁무진합니다. 그리고 그런 일을 하려면 C# 코드를 작성해야 합니다. 일단 코딩에 대해 어느 정도 감을 잡고 나면 프로그램으로 못할 일이 없다니까요.

새로운 장입니다    97


무엇을 도와드릴까요?

이런 일을 할 때… IDE는 강력한 도구입니다. 하지만 여러분이 사용하는 도구 중 하나에 불과합니다. 프로젝트를 변경하거나 IDE에 뭔가를 끌어다 놓거나 하면 자동으로 코드를 만들어 줍니다. IDE는 일상적 으로 반복되는 코드라든가 별로 수정하지 않고 재사용할 수 있는 코드를 만드는 역할을 합니다. 보통 응용 프로그램을 개발할 때 IDE가 무엇을 처리해 주는지 한 번 들여다 봅시다.

1

윈도우 스토어 프로젝트를 만들 때 IDE에서 만들 수 있는 응용 프로그램 종류는 다양하지만 일단 지 금은 윈도우 스토어 응용 프로그램에만 초점을 맞추겠습니다. 다 른 종류의 응용 프로그램에 대해서는 다음 장에서 배우게 됩니다.

1장에서 새로운 프로젝트를 생성할 때, 빈 페이지를 만들기 위해서 스토어 앱 > Windows 응용 프로그램 > 빈 응용 프로그램(Windows)을 선택했습니다.

2

도구 상자에서 컨트롤을 끌어다가 페이지에 올려 놓고 더블클릭할 때 페이지에서 어떤 일이 일어나게 하려면 컨트롤이 필요하겠죠? 이 번 장에서는 버튼 컨트롤을 통해 C#의 다양한 부분을 살펴볼 것 입니다.

3

페이지에서 속성을 설정할 때 IDE에 포함된 속성 창은 매우 강력한 도구로, 프로그램에 포함되는 거의 모든 특성을 바꿀 수 있습니다. 페이지에 들어 있는 컨트롤의 모습, 심지어는 프로젝트 자체의 옵션도 속성 창을 통해 고칠 수 있죠.

IDE에 있는 속성 창 은 MainPage.xam l 파일에 들어가는 XAML 코드를 손쉽 게 편집하는 기능을 제공하여, 코딩 시간을 단축할 수 있습니다. 속성 창 이 화 면에서 보이지 않으면 Alt-Ente r 단축키를 사용하 세요. 98    Chapter 2

여기 있는 모든 작업들은 표준적인 절차를 거쳐서 진행되며, 반복적으로 등장하는 코드가 필요합니다. 이런 부분이라면 IDE에서 잘 도와줄 수 있죠.



Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.