책소개
기초부터 활용까지, C# 기본기를 탄탄하게 다진다!
20년 경력 전문가가 선별한 「핵심 내용」과 「학습 순서」로 구성!
Visual Studio 2019 + C# 8.0, 최신 버전으로 배우자.
『C# 교과서』는 생애 첫 프로그래밍 언어로 C#을 시작하는 독자를 대상으로 한다. 특히 응용 프로그래머를 위한 C# 입문서로, C#을 사용하여 게임(유니티), 웹, 모바일, IoT 등을 개발할 때 필요한 C# 기초 문법을 익히고 기본기를 탄탄하게 다지는 것이 목적이다. Microsoft MVP이자 20년 경력의 개발/강의 전문가인 저자가 선별한 ‘핵심 내용’과 ‘학습 순서’로 설명한다. 또한, 600개가 넘는 코드 조각과 실습 예제를 직접 실행하며 실력을 향상시킬 수 있다. C#을 접한 적이 있는 독자라도 알고 있는 내용을 한 번 더 정리할 기회가 될 것이다. 출간 이후 저자 블로그(dotnetkorea.com)에서 제공하는 실시간 온라인 강의(유튜브로 진행, 저자 블로그 공지) 등도 놓치지 말자.
저자소개
Microsoft MVP.
Visual Studio 분야 Microsoft 공인 강사(MCT)를 거쳐 2006년부터 연속해서 Developer Technologies 분야 Microsoft MVP로 활동 중이다. 수많은 .NET 프로젝트를 거쳐 현재는 하와소(hawaso) 대표로 소프트웨어 개발과 강의를 병행하고 있다.
TechDays, DevOpsCamp 등 다양한 기술 세미나의 스피커로 활동하며 다수의 책을 집필하고 번역에 참여했다. 또한, Taeyo.NET, ASP.NET Korea 커뮤니티 운영진이기도 하다.
블로그 닷넷코리아 dotnetkorea.com
유튜브 비주얼아카데미 youtube.com/c/VisualAcademy
목차
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 제네릭 클래스 사용하기
28.4 Enumerable 클래스로 컬렉션 만들기
28.5 Dictionary 제네릭 클래스 사용하기
29 널(null) 다루기
29.1 null 값
29.2 null 가능 형식: Nullable 형식
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 디버거 사용하기
A.1 버그
A.2 디버거 사용하기
A.3 중단점 사용하기
A.4 한 단계씩 코드 실행하기
A.5 비주얼 스튜디오의 디버깅 도구 사용하기
B 팁과 트릭
B.1 인텔리센스와 코드 조각
B.2 자리 표시자 주요 서식
B.3 checked와 unchecked
B.4 전처리기 지시문과 조건부 컴파일
B.5 암호화 연습: 초간단 문자열 인코딩 및 디코딩
B.6 C#에서 이메일 보내기