C#, 기초부터 제대로 배우자!
기초부터 활용까지, C# 기본기를 탄탄하게 다진다!
20년 경력 전문가가 선별한 「핵심 내용」과 「학습 순서」로 구성!
Visual Studio 2019 + C# 8.0, 최신 버전으로 배우자.
『C# 교과서』는 생애 첫 프로그래밍 언어로 C#을 시작하는 독자를 대상으로 한다. 특히 응용 프로그래머를 위한 C# 입문서로, C#을 사용하여 게임(유니티), 웹, 모바일, IoT 등을 개발할 때 필요한 C# 기초 문법을 익히고 기본기를 탄탄하게 다지는 것이 목적이다. Microsoft MVP이자 20년 경력의 개발/강의 전문가인 저자가 선별한 ‘핵심 내용’과 ‘학습 순서’로 설명한다. 또한, 600개가 넘는 코드 조각과 실습 예제를 직접 실행하며 실력을 향상시킬 수 있다. C#을 접한 적이 있는 독자라도 알고 있는 내용을 한 번 더 정리할 기회가 될 것이다. 출간 이후 저자 블로그(dotnetkorea.com)에서 제공하는 실시간 온라인 강의(유튜브로 진행, 저자 블로그 공지) 등도 놓치지 말자.
1부 C# 준비
01 C# 프로그래밍 언어 이해하기
__1.1 프로그래밍 언어 알아보기
__1.2 C# 소개하기
__1.3 닷넷 생태계
__1.4 책에서 다루는 범위
02 C# 개발 환경 구축하기: 비주얼 스튜디오 설치
__2.1 비주얼 스튜디오 2019 커뮤니티
__2.2 비주얼 스튜디오 2019 커뮤니티 설치하기
03 첫 C# 프로그램 작성하기
__3.1 Hello World 프로그램
__3.2 C#의 기본 코드 구조
04 C# 기본 문법 이해하기
__4.1 출력문
__4.2 주석문(코드 설명문)
__4.3 들여쓰기
__4.4 공백 처리
__4.5 이스케이프 시퀀스
__4.6 자리 표시자
2부 C# 기초
05 변수 만들기
__5.1 변수
__5.2 리터럴 사용하기
__5.3 변수를 만들어 값 저장 후 사용하기
__5.4 변수 선언과 동시에 초기화하기
__5.5 형식이 같은 변수 여러 개를 한 번에 선언하기
__5.6 상수 사용하기
06 숫자 데이터 형식 사용하기
__6.1 숫자 데이터 형식
__6.2 정수 데이터 형식
__6.3 부호 있는 정수 데이터 형식
__6.4 부호 없는 정수 데이터 형식
__6.5 실수 데이터 형식
__6.6 숫자 형식의 리터럴 값에 접미사 붙이기
07 숫자 이외의 데이터 형식 사용하기
__7.1 문자 데이터 형식: char
__7.2 문자열 데이터 형식: string
__7.3 논리 데이터 형식: bool
__7.4 변하지 않는 값: 상수
__7.5 닷넷 데이터 형식
__7.6 래퍼 형식
08 사용자한테 얻은 정보를 변수에 저장하기
__8.1 문자열 입력 관련 메서드
__8.2 형식 변환
__8.3 이진수 다루기
__8.4 var 키워드로 암시적으로 형식화된 로컬 변수 만들기
__8.5 변수의 기본값을 default 키워드로 설정하기
09 연산자 개요 및 단항·산술 연산자 사용하기
__9.1 연산자
__9.2 단항 연산자
__9.3 변환 연산자: ( ) 기호로 데이터 형식 변환하기
__9.4 산술 연산자
__9.5 문자열 연결 연산자
10 할당 연산자와 증감 연산자 사용하기
__10.1 할당 연산자
__10.2 증감 연산자
11 관계형 연산자와 논리 연산자 사용하기
__11.1 관계형 연산자
__11.2 논리 연산자
12 비트 연산자와 시프트 연산자로 비트 단위 연산하기
__12.1 비트 연산자
__12.2 시프트 연산자
__12.3 기타 연산자
__12.4 연산자 우선순위
13 제어문 소개 및 if/else 문
__13.1 제어문
__13.2 순차문: 순서대로 실행하기
__13.3 조건문: if 문과 가지치기
__13.4 else 문
__13.5 else if 문(다중 if 문, 조건식 여러 개 처리)
__13.6 조건문(if 문)을 사용한 조건 처리 전체 정리
14 조건문: switch 문으로 다양한 조건 처리하기
__14.1 switch 문 소개
__14.2 switch 문 사용하기
15 반복문(for 문)을 사용하여 구간 반복하기
__15.1 for 문으로 반복하기
__15.2 무한 루프
__15.3 for 문으로 1부터 4까지 팩토리얼 값을 출력하는 프로그램
__15.4 구구단을 가로로 출력하기
16 while 문과 do 문, foreach 문으로 반복 처리하기
__16.1 while 문
__16.2 피보나치 수열을 while 문으로 표현하기
__16.3 do while 반복문으로 최소 한 번은 실행하기
__16.4 foreach 문으로 배열 반복하기
17 break, continue, goto로 반복문 제어하기
__17.1 break 문
__17.2 continue 문으로 코드 건너뛰기
__17.3 goto로 프로그램 흐름을 원하는 대로 바꾸기
18 배열 사용하기
__18.1 컬렉션
__18.2 배열
__18.3 배열 선언하기
__18.4 1차원 배열
__18.5 다차원 배열
__18.6 가변 배열
__18.7 var 키워드로 배열 선언하기
19 함수 사용하기
__19.1 함수
__19.2 함수 정의하고 사용하기
__19.3 매개변수와 반환값
__19.4 매개변수가 있는 함수
__19.5 반환값이 있는 함수
__19.6 함수를 사용하여 큰 값과 작은 값, 절댓값 구하기
__19.7 XML 문서 주석을 사용하여 함수 설명 작성하기
__19.8 기본 매개변수
__19.9 명명된 매개변수
__19.10 함수 오버로드: 다중 정의
__19.11 재귀 함수
__19.12 함수 범위: 전역 변수와 지역 변수
__19.13 화살표 함수: =>
__19.14 식 본문 메서드
__19.15 로컬 함수
__19.16 Main 메서드의 명령줄 인수
20 C# 인터렉티브로 출력문부터 함수까지 내용 복습하기
__20.1 C# 인터렉티브
3부 C# 활용
21 닷넷 API
__21.1 닷넷 API 탐색기와 Docs
__21.2 클래스, 구조체, 열거형, 네임스페이스
__21.3 Math 클래스 사용하기
__21.4 클래스 또는 메서드 이름을 문자열로 가져오기: nameof 연산자
22 구조체 사용하기
__22.1 구조체란?
__22.2 구조체 만들기
__22.3 구조체 선언 및 사용하기
__22.4 구조체 배열
__22.5 구조체 매개변수: 함수의 매개변수에 구조체 사용하기
__22.6 내장형 구조체
23 열거형 형식 사용하기
__23.1 열거형 형식 사용하기
__23.2 열거형 만들기
__23.3 열거형 항목에 상수 값 주기
__23.4 열거형 관련 클래스 사용하기
24 클래스 사용하기
__24.1 클래스 소개하기
__24.2 클래스 만들기
__24.3 클래스 여러 개 만들기
__24.4 클래스 시그니처
__24.5 자주 사용하는 내장 클래스
__24.6 Environment 클래스로 프로그램 강제 종료하기
__24.7 환경 변수 사용하기
__24.8 EXE 파일 실행하기
__24.9 Random 클래스
__24.10 프로그램 실행 시간 구하기
__24.11 정규식
__24.12 닷넷에 있는 엄청난 양의 API
__24.13 값 형식과 참조 형식
__24.14 박싱과 언박싱
__24.15 is 연산자로 형식 비교하기
__24.16 as 연산자로 형식 변환하기
__24.17 패턴 매칭: if 문과 is 연산자 사용하기
25 문자열 다루기
__25.1 문자열 다루기
__25.2 문자열 처리 관련 주요 API 살펴보기
__25.3 StringBuilder 클래스를 사용하여 문자열 연결하기
__25.4 String과 StringBuilder 클래스의 성능 차이 비교하기
26 예외 처리하기
__26.1 예외와 예외 처리
__26.2 try~catch~finally 구문
__26.3 Exception 클래스로 예외 처리하기
__26.4 예외 처리 연습하기
__26.5 throw 구문으로 직접 예외 발생시키기
27 컬렉션 사용하기
__27.1 배열과 컬렉션
__27.2 리스트 출력 구문
__27.3 Array 클래스
__27.4 컬렉션 클래스
__27.5 Stack 클래스
__27.6 Queue 클래스
__27.7 ArrayList 클래스
__27.8 Hashtable 클래스
28 제네릭 사용하기
__28.1 Cup of T
__28.2 Stack 제네릭 클래스 사용하기
__28.3 List<T> 제네릭 클래스 사용하기
__28.4 Enumerable 클래스로 컬렉션 만들기
__28.5 Dictionary<T, T> 제네릭 클래스 사용하기
29 널(null) 다루기
__29.1 null 값
__29.2 null 가능 형식: Nullable<T> 형식
__29.3 null 값을 다루는 연산자 소개하기
30 LINQ
__30.1 LINQ 개요
__30.2 확장 메서드 사용하기
__30.3 화살표 연산자와 람다 식으로 조건 처리
__30.4 데이터 정렬과 검색
__30.5 메서드 구문과 쿼리 구문
__30.6 Select( ) 확장 메서드를 사용하여 새로운 형태로 가공하기
__30.7 ForEach( ) 메서드로 반복 출력하기
31 알고리즘과 절차 지향 프로그래밍
__31.1 알고리즘
__31.2 합계 구하기: SUM 알고리즘
__31.3 개수 구하기: COUNT 알고리즘
__31.4 평균 구하기: AVERAGE 알고리즘
__31.5 최댓값 구하기: MAX 알고리즘
__31.6 최솟값 구하기: MIN 알고리즘
__31.7 근삿값 구하기: NEAR 알고리즘
__31.8 순위 구하기: RANK 알고리즘
__31.9 순서대로 나열하기: SORT 알고리즘
__31.10 특정 값 검색하기: SEARCH 알고리즘
__31.11 배열을 하나로 합치기: MERGE 알고리즘
__31.12 최빈값 구하기: MODE 알고리즘
__31.13 그룹화하기: GROUP 알고리즘
32 개체 만들기
__32.1 클래스와 개체
__32.2 개체와 인스턴스
__32.3 인스턴스 메서드
__32.4 익명 형식
__32.5 정적 멤버와 인스턴스 멤버
__32.6 프로젝트에 클래스를 여러 개 사용하기
__32.7 ToString( ) 메서드 오버라이드
__32.8 클래스 배열
__32.9 var 키워드를 사용하여 클래스의 인스턴스 생성하기
33 네임스페이스
__33.1 네임스페이스
__33.2 네임스페이스 만들기
__33.3 using 지시문
34 필드 만들기
__34.1 필드
__34.2 액세스 한정자
__34.3 여러 가지 형태의 필드 선언, 초기화, 참조 구현하기
35 생성자
__35.1 생성자
__35.2 매개변수가 있는 생성자 만들기
__35.3 클래스에 생성자 여러 개 만들기
__35.4 정적 생성자와 인스턴스 생성자
__35.5 this( ) 생성자로 다른 생성자 호출하기
__35.6 생성자를 사용하여 읽기 전용 필드 초기화
__35.7 식 본문 생성자
36 소멸자
__36.1 종료자
__36.2 가비지 수집기
__36.3 생성자, 메서드, 소멸자 실행 시점 살펴보기
__36.4 소멸자를 사용한 클래스 역할 마무리하기
__36.5 생성자, 메서드, 소멸자 함께 사용하기
37 메서드와 매개변수
__37.1 메서드
__37.2 메서드의 매개변수 전달 방식
__37.3 가변 길이 매개변수
__37.4 메서드 본문을 줄여 표현하기
__37.5 선택적 매개변수
38 속성 사용하기
__38.1 속성
__38.2 접근자와 전체 속성
__38.3 자동으로 구현된 속성
__38.4 자동 속성 이니셜라이저
__38.5 읽기 전용 속성과 쓰기 전용 속성
__38.6 속성의 여러 가지 유형 살펴보기
__38.7 속성을 사용한 클래스의 멤버 설정 및 참조하기
__38.8 화살표 연산자로 속성과 메서드를 줄여서 표현하기
__38.9 개체 이니셜라이저
__38.10 자동 속성을 사용하여 레코드 클래스 구현하기
__38.11 nameof 연산자
__38.12 익명 형식
__38.13 익명 형식과 덕 타이핑
__38.14 생성자로 속성에 대한 유효성 검사 구현하기
__38.15 메서드로 속성 값 초기화하기
__38.16 속성에서 ?.와 ?? 연산자를 함께 사용하기
39 인덱서와 반복기
__39.1 인덱서
__39.2 인덱서를 사용하여 배열 형식의 개체 만들기
__39.3 문자열 매개변수를 받는 인덱서 사용하기
__39.4 반복기와 yield 키워드
40 대리자
__40.1 대리자(위임/델리게이트)
__40.2 대리자를 사용하여 메서드 대신 호출하기
__40.3 대리자를 사용하여 메서드 여러 개를 다중 호출하기
__40.4 무명 메서드
__40.5 메서드의 매개변수에 대리자 형식 사용하기
__40.6 Action, Func, Predicate 대리자
__40.7 메서드의 매개변수로 메서드 전달하기
41 이벤트
__41.1 이벤트
__41.2 이벤트와 대리자를 사용하여 메서드 등록 및 호출하기
42 클래스 기타
__42.1 부분 클래스
__42.2 정적 클래스
__42.3 필드에 public을 붙여 외부 클래스에 공개하기
__42.4 함수형 프로그래밍 스타일: 메서드 체이닝
__42.5 불변 형식
43 상속으로 클래스 확장하기
__43.1 클래스 상속하기
__43.2 부모 클래스와 자식 클래스
__43.3 Base 클래스와 Sub 클래스
__43.4 Object 클래스 상속
__43.5 부모 클래스 형식 변수에 자식 클래스의 개체 할당하기
__43.6 상속은 영어로 is a(is an) 관계를 표현
__43.7 this와 this( ) 그리고 base와 base( )
__43.8 봉인 클래스
__43.9 추상 클래스
__43.10 자식 클래스에만 멤버 상속하기
__43.11 기본 클래스의 멤버 숨기기
44 메서드 오버라이드
__44.1 메서드 오버라이드: 재정의
__44.2 상속 관계에서 메서드 오버라이드
__44.3 메서드 오버로드와 오버라이드
__44.4 메서드 오버라이드 봉인
__44.5 ToString( ) 메서드 오버라이드
__44.6 메서드 오버라이드로 메서드 재사용하기
45 인터페이스
__45.1 인터페이스
__45.2 인터페이스 형식 개체에 인스턴스 담기
__45.3 생성자의 매개변수에 인터페이스 사용하기
__45.4 인터페이스를 사용한 다중 상속 구현하기
__45.5 명시적인 인터페이스 구현하기
__45.6 인터페이스와 추상 클래스 비교하기
__45.7 IEnumerator 인터페이스 사용하기
__45.8 IDisposable 인터페이스 사용하기
__45.9 인터페이스를 사용하여 멤버 이름 강제로 적용하기
46 특성과 리플렉션
__46.1 특성
__46.2 Obsolete 특성 사용하기
__46.3 특성의 매개변수
__46.4 [Conditional] 특성 사용하기
__46.5 특성을 사용하여 메서드 호출 정보 얻기
__46.6 사용자 지정 특성 만들기
__46.7 리플렉션
__46.8 Type과 Assembly 클래스
__46.9 특정 클래스의 메서드와 속성을 동적으로 호출하기
__46.10 Type 클래스로 클래스의 멤버 호출하기
__46.11 특정 속성에 적용된 특성 읽어 오기
__46.12 Type과 Activator 클래스로 개체의 인스턴스를 동적 생성하기
47 개체와 개체 지향 프로그래밍
__47.1 개체 지향 프로그래밍 소개하기
__47.2 현실 세계의 자동차 설계도 및 자동차 개체 흉내 내기
__47.3 개체 지향 프로그래밍의 네 가지 큰 개념
__47.4 캡슐화를 사용하여 좀 더 세련된 프로그램 만들기
__47.5 다형성 기법을 사용하여 프로그램 융통성 높이기
__47.6 클래스의 멤버 종합 연습: 자동차 클래스 구현하기
4부 C# 확장 기능
48 제네릭 클래스 만들기
__48.1 사용자 정의 클래스를 매개변수로 사용하는 제네릭 클래스
__48.2 사전 제네릭 클래스 소개
__48.3 제네릭 인터페이스
__48.4 제네릭 클래스 만들기
49 확장 메서드 만들기
__49.1 확장 메서드
__49.2 확장 메서드로 문자열 기능 확장하기
__49.3 확장 메서드로 기존 형식에 새로운 메서드 추가하기
__49.4 확장 메서드를 사용하여 형식에 메서드 추가하기
50 동적 형식
__50.1 dynamic 키워드
__50.2 dynamic 변수로 런타임할 때 데이터 형식 결정하기
__50.3 동적 바인딩
__50.4 확장 메서드와 dynamic
51 튜플
__51.1 튜플
52 클래스 라이브러리와 닷넷 스탠다드
__52.1 클래스 라이브러리 프로젝트
__52.2 어셈블리
__52.3 닷넷 스탠다드 프로젝트로 자신만의 라이브러리 만들기
53 테스트 프로젝트와 단위 테스트
__53.1 자동 테스트
__53.2 테스트 프로젝트 생성 및 Assert 클래스 사용하기
__53.3 Dul 프로젝트를 테스트하는 테스트 코드 작성 및 실행하기
54 NuGet 패키지
__54.1 패키지 관리자와 NuGet
__54.2 자신만의 NuGet 패키지 만들기
__54.3 내가 만든 NuGet 패키지 사용하기
55 스레드
__55.1 스레드
__55.2 스레드 생성 및 호출하기
__55.3 다중 스레드를 사용한 메서드 함께 호출하기
__55.4 스레드 동기화
__55.5 병렬 프로그래밍
56 비동기 프로그래밍
__56.1 동기 프로그래밍
__56.2 비동기 프로그래밍
__56.3 비동기 Main( ) 메서드
__56.4 간단한 async와 await 키워드 사용 예제
__56.5 Task.Run( ) 메서드로 비동기 메서드 호출하기
__56.6 Task.FromResult( )를 사용하여 비동기로 반환값 전달하기
__56.7 async와 await를 사용한 C# 비동기 프로그래밍하기
57 인메모리 데이터베이스 프로그래밍 맛보기
__57.1 인메모리 데이터베이스
__57.2 CRUD 작업하기
__57.3 리포지토리 패턴
__57.4 인메모리 데이터베이스를 만들고 CRUD 작업 수행하기
58 스트림과 파일 입출력 맛보기
__58.1 System.IO 네임스페이스
__58.2 문자열에서 파일 이름 추출하기
__58.3 Path 클래스로 파일 이름 및 확장자, 폴더 정보 얻기
__58.4 파일과 디렉터리 관련 클래스
__58.5 텍스트 데이터를 컬렉션 데이터로 가져오기
59 XML과 JSON 맛보기
__59.1 XElement 클래스를 사용하여 XML 요소를 생성하거나 가공하기
__59.2 JSON 데이터 직렬화 및 역직렬화하기
60 네트워크 프로그래밍 맛보기
__60.1 HttpClient 클래스로 웹 데이터 가져오기
61 함수와 함수형 프로그래밍 소개하기
__61.1 함수형 프로그래밍
__61.2 문과 식
__61.3 고차 함수
__61.4 LINQ로 함수형 프로그래밍 스타일 구현하기
62 모던 C#
__62.1 C#의 새로운 기능
__62.2 패턴 매칭하기
__62.3 C# 8.0 버전의 기능을 테스트 프로젝트에서 실행하기
__62.4 C# 8.0 버전의 새로운 기능 열 가지 소개하기
부록 A 디버거 사용하기
부록 B 팁과 트릭
ㆍ지은이 박용준
독자의견 남기기