이 책에 쏟아진 찬사
헤드 퍼스트 시리즈에 쏟아진 찬사
오라일리의 다른 책
지은이 소개
옮긴이의 말
Chapter 00 들어가며 | 이 책을 읽는 방법
__이 책의 독자
__이 책이 이렇게 된 이유
__이 책의 구성
__여러분의 두뇌를 정복하는 방법
__일러두기
__테크니컬 리뷰어
__감사의 글
Chapter 01 C#으로 개발 시작하기 | 멋진 프로그램을 만들어 봅시다!
__왜 C#을 배워야 하나요?
__C# 코드 작성과 생태계 탐험에 필요한 도구, 비주얼 스튜디오
__비주얼 스튜디오에서 첫 프로젝트 만들기
__C#으로 게임 만들기
__게임 설계하기
__1단계: 비주얼 스튜디오에서 WPF 프로젝트 생성하기
__2단계:XAML을 사용해서 창 디자인하기
__게임 화면 디자인하기
__XAML 속성을 통해 창 크기와 제목 지정하기
__XAML 그리드에 행과 열 추가하기
__행과 열 크기를 똑같이 조정하기
__그리드에 TextBlock 컨트롤 추가하기
__이제 코드를 작성할 준비가 됐습니다
__게임 초기화 메서드 추가하기
__SetUpGame( ) 메서드 구현하기
__프로그램 실행하기
__새 프로젝트를 소스 제어 시스템에 추가하기
__게임 완성을 위한 마우스 클릭 이벤트 작성하기
__마우스 클릭에 반응하는 TextBlock 만들기
__TextBlock_MouseDown( ) 메서드 채우기
__컨트롤 마우스 클릭 이벤트에 연결하기
__타이머 추가해서 게임 완성하기
__게임에 타이머 기능 추가하기
__디버거로 예외 추적하기
__게임 완성하기
__소스 제어 시스템의 코드 갱신하기
Chapter 02 C#의 매력에 빠져 보기 | 명령문, 클래스, 코드
__콘솔 앱 구성 파일 자세히 살펴보기
__동일한 네임스페이스에 2개의 클래스 두기
__앱을 구성하는 최소 단위, 명령문 알기
__데이터를 다루기 위해 변수 사용하기
__변수를 다루는 새 메서드 만들기
__메서드에 연산자를 사용하는 코드 추가하기
__디버그를 사용해 변수 값의 변화 관찰하기
__변수에 연산자 사용하기
__조건을 검사하는 if 문
__특정 작업을 반복하는 반복문 알기
__코드 조각 기능으로 반복문 작성하기
__UI 역학을 다루는 컨트롤 알아보기
__컨트롤을 실험하기 위한 WPF 애플리케이션 만들기
__앱에 TextBox 컨트롤 추가하기
__TextBlock의 값을 바꾸는 C# 코드 추가하기
__숫자 입력만 허용하는 이벤트 처리기 추가하기
__Slider를 그리드의 아래쪽 행에 추가하기
__C# 코드를 추가해 컨트롤 작동시키기
유니티 연구실 #1 유니티로 C# 탐험하기
__유니티는 강력한 게임 디자인 도구입니다
__유니티 허브 다운로드하기
__유니티 허브를 사용해 새 프로젝트 생성하기
__유니티 레이아웃 조정하기
__씬은 3D 환경입니다
__유니티 게임 오브젝트로 구성된 게임
__게임 오브젝트를 움직이는 이동 기즈모
__게임 오브젝트의 컴포넌트를 보여 주는 인스펙터
__구체 게임 오브젝트에 머티리얼 추가하기
__구체 회전시키기
__툴 보기와 씬 기즈모로 씬 카메라 움직이기
__창의성을 발휘하세요!
Chapter 03 객체를 소개합니다 | 이해하기 쉬운 코드 만들기
__재사용되는 유용한 코드 짜기
__매개 변수를 받고 값을 반환하는 메서드
__카드 뽑기 앱 만들기
__PickRandomCards 콘솔 앱 만들기
__PickSomeCards( ) 메서드 마무리하기
__CardPicker 클래스 마무리하기
__애나가 만드는 게임 알아보기
__고전 게임의 종이 프로토타입 만들기
__WPF 버전으로 카드 뽑기 앱 만들기
__쌓는 형태로 컨트롤을 배치하는 컨테이너 StackPanel
__CardPicker 클래스 재사용하기
__Grid와 StackPanel을 사용해서 메인 창에 컨트롤 배치하기
__카드 뽑기 데스크톱 앱의 UI 배치하기
__객체를 사용해 애나의 문제 풀어 보기
__클래스를 사용해 객체 생성하기
__클래스로부터 만든 새 객체, 인스턴스
__애나를 위해 가져온 해결책, 객체
__필드를 사용해 인스턴스의 상태 기록하기
__고마운 기억 공간, 힙
__프로그램의 마음에는 무엇이 있나?
__읽기 어려운 코드
__직관적인 클래스와 메서드 이름 사용하기
__두 사람의 상호작용을 위한 클래스 만들기
__객체를 쉽게 초기화하는 C# 코드
__C# 대화형 창을 사용해서 C# 코드 실행하기
Chapter 04 타입과 참조 | 참조 이해하기
__오언은 도움이 필요합니다!
__다양한 타입의 데이터가 존재하는 캐릭터 시트
__데이터의 종류를 결정하는 변수의 타입
__정수를 저장할 수 있는 여러 C# 타입들
__문자열을 다뤄 봅시다
__코드에 직접 기록되는 값, 리터럴 알아보기
__변수는 데이터를 담는 컵
__다양한 크기의 타입 알아보기
__5파운드짜리 주머니에 10파운드짜리 데이터 넣기
__캐스팅을 사용해 값 변환하기
__자동 변환이 일어나는 경우 알아보기
__매개 변수 타입과 호환되는 메서드 호출 인수
__오언의 능력치 실험 돕기
__C# 컴파일러를 사용해 문제의 코드 찾기
__참조 변수를 사용해 객체에 접근하기
__다중참조와 부작용
__참조를 사용해 서로 대화하는 객체
__여러 값을 저장하는 배열 알아보기
__참조 변수를 포함하는 배열
__null: 참조가 가리키는 객체가 없습니다
__슬로피 조의 샌드위치 가게에 오신 것을 환영합니다!
유니티 연구실 #2 유니티에서 C# 코드 작성하기
__게임 오브젝트에 C# 스크립트 작동 추가하기
__게임 오브젝트에 C# 스크립트 추가하기
__구체를 회전시키는 C# 코드 작성하기
__중단점 설정하고 게임 디버깅하기
__디버거를 사용해 Time.deltaTime 살펴보기
__Y축 위치를 표시하는 원기둥 추가하기
__클래스에 회전 각도와 속도를 나타내는 필드 추가하기
__Debug.DrawRay를 사용해 3D 벡터의 작동 방식 살펴보기
__게임을 실행해 씬에서 광선 확인하기
__씬에서 공이 점 주위를 회전하도록 만들기
__유니티를 통해 회전과 벡터 자세히 살펴보기
__창의성을 발휘하세요!
Chapter 05 캡슐화 | 데이터 기밀 유지하기
__칼 데미지 계산하기
__데미지를 계산하는 콘솔 앱 만들기
__WPF 애플리케이션에서 데미지 계산기 디자인하기
__WPF 데미지 계산기의 코드 숨김 파일 작성하기
__오언의 칼 데미지 계산기에 대해 토론하기
__오류를 고쳐 봅시다
__Debug.WriteLine을 사용해 진단 정보 출력하기
__실수로 객체를 잘못 사용하는 경우
__캡슐화로 클래스의 데이터 기밀 유지하기
__캡슐화로 클래스의 메서드와 필드에 대한 접근 제어하기
__RealName 필드는 정말로 보호되고 있나요?
__private 필드와 메서드는 같은 클래스의 인스턴스로만 접근할 수 있습니다
__왜 캡슐화를 사용하느냐고요? 객체를 블랙 박스라고 생각해 봅시다
__캡슐화를 사용해 SwordDamage 클래스 개선하기
__캡슐화로 데이터를 안전하게 보호하기
__PaintballGun 클래스를 테스트하는 콘솔 앱 만들기
__속성으로 캡슐화를 쉽게 하기
__Balls 속성을 사용하도록 Main( ) 메서드 수정하기
__자동 구현 속성으로 단순한 코드 만들기
__private setter를 사용해 읽기 전용 속성 만들기
__탄창의 크기를 바꿔 봅시다
__매개 변수가 있는 생성자를 사용해서 속성 초기화하기
__new 키워드 사용 시 인수 지정하기
Chapter 06 상속 | 객체의 가계도
__다른 무기의 데미지 계산하기
__switch 문을 사용해 조건을 맞춰 보기
__하나만 더요. 단검의 데미지를 계산할 수 있을까요? 철퇴나 방망이는요?
__클래스에서 상속을 사용하면, 코드를 한 번만 작성해도 됩니다
__일반적인 요소에서 구체적인 요소로 클래스 모델 만들기
__동물원 시뮬레이터 설계해 보기
__기본 클래스를 확장하는 하위 클래스
__콜론을 사용해서 기본 클래스 상속하기
__하위 클래스는 메서드를 재정의하거나 상속한 멤버를 다른 것으로 교체할 수 있습니다
__하위 클래스에서만 구현되는 멤버
__디버거로 재정의의 작동 방식 이해하기
__앱을 만들어 virtual과 override 살펴보기
__하위 클래스는 기본 클래스의 메서드를 숨길 수 있습니다
__행위를 상속하기 위해 override 와 virtual 키워드 사용하기
__기본 클래스에 생성자가 있으면, 하위 클래스는 생성자를 호출해야 합니다
__오언의 작업을 마무리해 봅시다
__벌집 관리 시스템 만들기
__Queen 클래스: 여왕벌이 일벌을 관리하는 법
__UI: 디자인 화면에 XAML 추가하기
__벌집 관리 게임의 방향을 결정하는 피드백
__절대로 인스턴스화되지 않는 클래스
__의도적으로 완성되지 않은 추상 클래스
__어떤 클래스는 절대 인스턴스화되면 안 됩니다
__본체가 없는 추상 메서드 알아보기
__추상 메서드처럼 작동하는 추상 속성 작성하기
유니티 연구실 #3 게임 오브젝트 인스턴스
__유니티에서 게임을 만들어 봅시다!
__Materials 폴더에 새 머티리얼 생성하기
__임의의 씬 위치에 당구공 생성하기
__디버거를 사용해 Random.value 이해하기
__게임 오브젝트를 프리팹으로 만들기
__게임을 제어하는 스크립트 생성하기
__메인 카메라에 스크립트 연결하기
__Play 버튼을 눌러 코드 실행하기
__인스펙터 창을 사용해 게임 오브젝트 인스턴스 다루기
__물리 법칙을 통해 공이 겹치지 않게 하기
__창의성을 발휘하세요!
Chapter 07 인터페이스, 캐스팅, is | 약속을 지키는 클래스
__벌 클래스 계층 구조에 새 하위 클래스 추가하기
__캐스팅을 사용해 DefendHive 메서드를 호출할 수 있습니다
__인터페이스는 클래스가 구현해야 하는 메서드와 속성을 정의합니다
__인터페이스 연습하기
__인터페이스의 인스턴스는 만들 수 없지만, 인터페이스를 참조할 수는 있습니다
__인터페이스 참조는 보통의 객체 참조
__인터페이스를 사용해 객체의 작동 정의하기
__IWorder의 Job 속성은 핵입니다
__is를 사용해 객체의 타입 검사하기
__is를 사용해 하위 클래스의 메서드에 접근하기
__서로 다른 동물이 헤엄치거나 무리 사냥을 하도록 하려면 어떻게 해야 할까요?
__인터페이스를 사용해 동일한 작업을 수행하는 클래스 다루기
__is로 안전하게 클래스 계층 구조 탐색하기
__안전한 타입 변환을 위한 또 하나의 키워드: as
__클래스 계층 구조를 오르내리기 위해 업캐스팅과 다운캐스팅 사용하기
__CoffeeMaker를 Appliance로 업캐스팅하기
__Appliance를 다시 CoffeeMaker로 다운캐스팅하기
__인터페이스로도 업캐스팅, 다운캐스팅하기
__다른 인터페이스를 상속하는 인터페이스
__정적 멤버를 가지는 인터페이스
__인터페이스 메서드에 본체를 추가하는 기본 구현
__ScareAdults 메서드와 기본 구현 추가하기
__WPF 컨트롤을 자동으로 갱신하는 데이터 바인딩
__데이터 바인딩을 사용하도록 벌집 관리 시스템 수정하기
__다형성은 객체가 여러 형태를 가질 수 있음을 의미합니다
Chapter 08 열거형과 컬렉션 | 데이터 조직하기
__문자열은 데이터 분류에 적합하지 않습니다
__열거형은 유효한 값의 모음을 다룰 수 있게 해 줍니다
__열거형으로 숫자에 이름을 붙일 수 있습니다
__카드 한 벌을 만드는 데 배열을 사용할 수 있지만요...
__리스트로 아무거나 모아서 쉽게 저장하기
__배열보다 유연한 리스트
__신발장 앱 만들기
__모든 타입을 저장할 수 있는 제네릭 컬렉션
__컬렉션 이니셜라이저는 객체 이니셜라이저와 비슷합니다
__오리 리스트를 만듭시다
__리스트는 쉽지만 정렬은 까다롭습니다
__IComparable<Duck>을 사용해서 리스트 안 오리 정렬하기
__IComparer 사용해서 정렬 방법 지시하기
__비교자 객체 인스턴스 만들기
__ToString( ) 메서드를 재정의해서 객체가 스스로를 설명하게 하기
__Duck과 Card가 자신의 정보를 콘솔에 출력하도록 foreach 반복문 수정하기
__IEnumerable<T>를 사용해 리스트 전체를 업캐스팅하기
__사전을 사용해 키와 값 저장하기
__Dictionary 클래스 기능의 개요
__사전을 사용해 프로그램 만들기
__그 외의 컬렉션 타입들...
__큐는 선입선출입니다
__스택은 후입선출입니다
유니티 연구실 #4 사용자 인터페이스
__플레이어가 공을 클릭했을 때 점수 증가시키기
__게임의 두 가지 모드
__게임 모드 추가하기
__게임에 UI 추가하기
__UI에 점수를 표시하는 텍스트 구성하기
__게임을 시작하는 메서드를 호출하는 버튼 추가하기
__Play Again 버튼과 Score 텍스트 작동시키기
__게임의 코드 마무리하기
__창의성을 발휘하세요!
Chapter 09 LINQ와 람다 | 데이터 통제하기
__지미는 캡틴 어메이징의 광팬입니다
__LINQ를 사용해 컬렉션 쿼리하기
__LINQ는 어떤 IEnumerable<T> 참조로도 작동합니다
__LINQ 쿼리 문법
__LINQ 객체 다루기
__LINQ 쿼리를 사용해 지미의 앱 마무리하기
__var 키워드로 변수 타입 자동으로 추론하기
__LINQ 쿼리는 결과 값에 접근하기 전까지 실행되지 않습니다
__group 쿼리를 사용해 시퀀스를 여러 그룹으로 분리하기
__join 쿼리를 사용해 두 시퀀스의 데이터 합치기
__new 키워드로 익명 타입 생성하기
__지미의 만화 컬렉션 앱에 유닛 테스트 프로젝트 추가하기
__첫 유닛 테스트 작성하기
__GetReviews( ) 메서드의 유닛 테스트 작성하기
__유닛 테스트를 사용해서 경계 조건과 이상한 데이터 처리하기
__=> 연산자를 사용해 람다 식 만들기
__람다 시승하기
__람다를 사용해 Clown 리팩터링하기
__람다에서 조건문을 위한 ?: 연산자 사용하기
__람다 식과 LINQ
__LINQ 쿼리는 메서드 체이닝 형태로 작성할 수 있습니다
__=> 연산자 사용해서 switch 식 만들기
__Enumerable 클래스 살펴보기
__열거 가능한 시퀀스 직접 생성하기
__yield return 문을 사용해 직접 시퀀스 생성하기
__yield return 문을 사용해 ManualSportSequence 리팩터링하기
Chapter 10 파일 읽고 쓰기 | 한 개의 바이트도 놓치지 않을 거예요!
__.NET은 스트림을 사용해 데이터를 읽고 기록합니다
__서로 다른 스트림은 서로 다른 대상을 읽고 씁니다
__FileStream은 파일에 있는 바이트를 읽고 씁니다
__손쉬운 3단계: 텍스트를 파일에 쓰기
__스윈들러의 악마적 계획
__StreamReader를 사용해서 파일 읽기
__데이터는 여러 스트림을 거쳐 이동할 수 있습니다
__정적 File, Directory 클래스를 사용해 파일과 디렉터리 다루기
__IDisposable을 사용해 객체 확실히 닫기
__MemoryStream을 사용해 메모리에 데이터 스트림하기
__객체가 직렬화될 때 어떤 일이 일어나나요?
__객체의 상태는 정확히 무엇이고, 어떤 것이 저장되나요?
__JsonSeriallization을 사용해 객체 직렬화하기
__JSON은 특정한 C# 타입이 아닌 데이터만 포함합니다
__다음 화: 데이터를 깊게 파고들어 봅시다
__C# 문자열은 유니코드로 인코딩됩니다
__비주얼 스튜디오에서 유니코드는 잘 작동합니다
__.NET은 글자와 텍스트를 유니코드로 저장합니다
__C#은 데이터 전송을 위해 byte 배열을 사용할 수 있습니다
__BinaryWriter를 사용해 이진 데이터 기록하기
__BinaryReader를 사용해 데이터 다시 읽어 들이기
__16진수 덤프는 파일에 있는 바이트 값을 확인할 수 있게 해 줍니다
__StreamReader를 사용해 16진수 덤프 앱 만들기
__명령줄 인수를 사용하도록 16진수 덤프 앱 수정하기
유니티 연구실 #5 레이캐스팅
__새 유니티 프로젝트 생성하고 씬 뷰 구성하기
__카메라 구성하기
__플레이어 게임 오브젝트 생성하기
__유니티의 내비게이션 시스템을 소개합니다
__내비메시 설정하기
__플레이어가 자동으로 플레이 영역 이동하게 만들기
Chapter 11 객체의 죽음 | 캡틴 어메이징
__객체의 삶과 죽음
__가비지 컬렉션 클래스를 사용해 가비지 컬렉션 강제하기
__무언가를 할 마지막 기회, 종료자
__종료자는 정확히 언제 실행되나요?
__종료자는 다른 객체에 의존할 수 없습니다
__구조체는 객체처럼 보이지만...
__값은 복제되고, 참조는 할당됩니다
__구조체는 값 타입, 객체는 참조 타입입니다
__스택 vs 힙: 메모리에 대해서
__out 매개 변수를 사용해 한 개 이상 값을 반환하는 메서드 만들기
__ref 한정자를 사용해 참조로 전달하기
__선택적 매개 변수로 기본값 설정하기
__null 참조는 어떤 객체도 참조하지 않습니다
__null을 허용하지 않는 참조 타입은 NRE를 방지해 줍니다
__null 병합 연산자 ??로 null 값 다루기
__null을 허용하며 안전하게 처리할 수 있는 nullable 값 타입
__예전 같지 않은 ‘캡틴’ 어메이징
__기존 클래스에 새로운 작동을 추가하는 확장 메서드
__string 기본 타입 확장하기
Chapter 12 예외 처리 | 계속 불만 끄는 건 짜증 나죠
__16진수 덤프 앱은 명령줄에서 파일명을 읽어 들입니다
__예외가 발생하면 CLR이 예외 객체를 생성합니다
__모든 예외 객체는 System.Exception을 상속합니다
__덤프할 수 없는 파일도 있습니다
__위험한 메서드를 호출하면 어떤 일이 벌어지나요?
__try/catch 문으로 예외 처리하기
__디버거로 try/catch 흐름 추적하기
__항상 실행해야 할 코드가 있으면, finally 블록을 사용하세요
__System.Exception을 처리하는 catch-all 예외
__상황에 맞는 예외를 사용하세요
__정확한 예외 처리기를 만드는 데 도움을 주는 예외 필터
__최악의 catch 블록: catch-all과 주석
__임시 방편도 괜찮아요
유니티 연구실 #6 씬 내비게이션
__작업하던 유니티 프로젝트를 이어서 진행해 봅시다
__씬 뷰에 플랫폼 추가하기
__베이크 옵션을 사용해 Platform을 걸을 수 있는 오브젝트로 만들기
__내비메시에 계단과 경사로 포함시키기
__내비메시의 높이 문제를 고쳐 봅시다
__내비메시 장애물 추가하기
__장애물을 위아래로 이동시키는 스크립트 추가하기
__창의성을 발휘하세요!
Appendix Ⅰ ASP.NET Core Blazor 프로젝트 | Visual Studio for Mac 학습자 가이드
__왜 C#을 배워야 하나요?
__Visual Studio for Mac에서 첫 프로젝트 만들기
__C#으로 게임 만들기
__비주얼 스튜디오에서 Blazor WebAssembly 앱 생성하기
__브라우저에서 Blazor 웹 앱 실행하기
__이제 코드를 작성할 준비가 됐습니다
__이모지 리스트를 생성하고 앱에 표시하기
__동물 이모지의 순서 섞기
__디버거에서 게임 실행하기
__새 프로젝트를 소스 제어 시스템에 추가하기
__마우스 클릭 이벤트 작성하기
__마우스 클릭에 반응하는 버튼 만들기
__이벤트 처리기 테스트하기
__디버거로 예외 추적하기
__오류를 추적해 봅시다
__승리하면 게임을 초기화하는 코드 추가하기
__게임에 타이머 기능 추가하기
__내비게이션 메뉴 정리하기
__UI의 역학을 좌우하는 컨트롤
__새 Blazor WebAssembly 앱 프로젝트 생성하기
__슬라이더 컨트롤이 있는 페이지 만들기
__텍스트 입력 추가하기
__색상 선택기와 날짜 선택기 추가하기
__Blazor로 카드 뽑기 앱 만들기
__행과 열로 구성된 페이지
__슬라이더는 데이터 바인딩을 사용해 변수를 갱신합니다
__슬로피 조의 싸구려 샌드위치 가게에 오신 것을 환영합니다!
Appendix Ⅱ 코드 카타 | 숙련자와 참을성 없는 사람을 위한 코드 카타 가이드
찾아보기