책소개
전문가로 레벨업!C# 프로그래밍 완전 정복이 책은 C#의 기본, 고급 문법과 더불어 기초 클래스 라이브러리까지 다루고 있다. 총 22개 장으로, 앞서 배운 내용을 활용하면서 단계별로 학습할 수 있도록 구성했다. 입문자의 눈높이에 맞춰 친절하게 설명한 핵심 문법을 익히며 프로그래밍 동작 원리를 이해하고, 예제 코드로 실습을 진행하며 실력을 향상시킬 수 있다. 또한, [비타민 퀴즈]와 [연습문제]를 통해 배운 내용을 스스로 점검하고 부족한 부분을 보완할 수 있다. 『이것이 C#이다(3판)』으로 C# 프로그래밍의 기본기를 탄탄하게 다지고, 전문가로 성장해 보자!
저자소개
반도체 공정 자동화, 통신 장비, 무기 체계, 사이버 시큐리티 분야에서 SW를 개발해 왔으며 현재는 캘리포니아 소재 스타트업에서 소프트웨어 엔지니어로 근무 중이다. 최근까지는 방공 무기체계에 탑재되는 소프트웨어를 개발해 왔다. 컴퓨터 하드웨어와 소프트웨어 모두를 사랑하는 경력 17년차 엔지니어이다. 대학원에서 우연히 만난 인공지능 지식을 살려 『그로킹 딥러닝』(2020 세종 학술부문 우수 도서)을 번역했으며, 집필서로는 『뇌를 자극하는 알고리즘』(2010 대한민국 학술원 우수학술 도서), 『뇌를 자극하는 파이썬 3』 등이 있다.
대표 저서로는 『뇌를 자극하는 파이썬 3』(2016) 『뇌를 자극하는 C# 5.0 프로그래밍』(2014) 『뇌를 자극하는 알고리즘』(2009) 등이 있다.
목차
Chapter 01 | 프로그래밍을 시작합시다1.1 프로그래밍 언어의 역사__컴퓨터의 시작, 프로그래밍의 시작__포트란의 탄생 __초등학생도 프로그래밍할 수 있게 한 베이직 __유닉스의, 유닉스에 의한, 유닉스를 위한 C__C+1 == C++__더 나은 세상을 위한 C#1.2 C#의 기본 파일과 환경 설정__프로그램을 이루는 소스 파일과 프로젝트__비주얼 스튜디오 환경 설정Chapter 02 | 처음 만드는 C# 프로그램2.1 Hello, World!2.2 첫 번째 프로그램 뜯어보기__using System;__using static System.Console; __namespace Hello { } __class MainApp { }__// 프로그램 실행이 시작되는 곳 __static void Main(string[ ] args) { } __if(args.Length == 0) { } 2.3 CLR에 대하여 [연습문제] Chapter 03 | 데이터 보관하기3.1 다양한 데이터의 종류 3.2 변수 3.3 값 형식과 참조 형식 __스택과 값 형식 __힙과 참조 형식 3.4 기본 데이터 형식 __숫자 데이터 형식 [Vitamin Quiz 3-1] [Vitamin Quiz 3-2]__부동 소수점 형식 __문자 형식과 문자열 형식 [Vitamin Quiz 3-3] __논리 형식 __object 형식 __박싱과 언박싱 __데이터 형식 바꾸기 3.5 상수와 열거 형식 __상수: 전 언제나 변하지 않을 거예요 __열거 형식: 여러 개의 상수를 정리해요 3.6 Nullable 형식 3.7 var: 데이터 형식을 알아서 파악하는 똑똑한 C# 컴파일러 3.8 공용 형식 시스템 3.9 문자열 다루기 __문자열 안에서 찾기 __문자열 변형하기 __문자열 분할하기 __문자열 서식 맞추기 [연습문제] Chapter 04 | 데이터를 가공하는 연산자4.1 C#에서 제공하는 연산자 둘러보기 4.2 산술 연산자 4.3 증가 연산자와 감소 연산자 4.4 문자열 결합 연산자 4.5 관계 연산자 4.6 논리 연산자 4.7 조건 연산자 4.8 null 조건부 연산자 4.9 비트 연산자 __시프트 연산자 __비트 논리 연산자 4.10 할당 연산자 4.11 null 병합 연산자 4.12 연산자의 우선순위 [연습문제] Chapter 05 | 코드의 흐름 제어하기5.1 분기문 __if, else, else if __if 문 중첩해서 사용하기 __switch 문 __switch 식 5.2 반복문 __while __do while __for __중첩 for __foreach __for 또는 while을 이용한 무한 반복 코드 5.3 점프문 __break __continue __goto 5.4 패턴 매칭 __선언 패턴 __형식 패턴 __상수 패턴 __프로퍼티 패턴 [Vitamin Quiz 5-1] __관계 패턴 __논리 패턴 __괄호 패턴 __위치 패턴 __var 패턴 __무시 패턴 __목록 패턴 [연습문제] Chapter 06 | 메소드로 코드 간추리기6.1 메소드란? 6.2 return에 대하여 6.3 매개변수에 대하여 6.4 참조에 의한 매개변수 전달 6.5 메소드의 결과를 참조로 반환하기 6.6 출력 전용 매개변수 6.7 메소드 오버로딩 6.8 가변 개수의 인수 6.9 명명된 인수 6.10 선택적 인수 6.11 로컬 함수 [연습문제] Chapter 07 | 클래스7.1 객체지향 프로그래밍과 클래스 [Vitamin Quiz 7-1] 7.2 클래스의 선언과 객체의 생성 7.3 객체의 삶과 죽음에 대하여: 생성자와 종료자 __생성자 __종료자 7.4 정적 필드와 메소드 7.5 객체 복사하기: 얕은 복사와 깊은 복사 7.6 this 키워드 __나 __this( ) 생성자 7.7 접근 한정자로 공개 수준 결정하기 7.8 상속으로 코드 재활용하기 7.9 기반 클래스와 파생 클래스 사이의 형식 변환 7.10 오버라이딩과 다형성 7.11 메소드 숨기기 7.12 오버라이딩 봉인하기 7.13 읽기 전용 필드 7.14 중첩 클래스 7.15 분할 클래스 7.16 확장 메소드 [Vitamin Quiz 7-2] 7.17 구조체 7.18 튜플 [연습문제] Chapter 08 | 인터페이스와 추상 클래스8.1 인터페이스의 선언 8.2 인터페이스는 약속이다 [Vitamin Quiz 8-1] 8.3 인터페이스를 상속하는 인터페이스 8.4 여러 인터페이스, 한꺼번에 상속하기 [Vitamin Quiz 8-2] 8.5 인터페이스의 기본 구현 메소드 8.6 추상 클래스: 인터페이스와 클래스 사이 [연습문제] Chapter 09 | 프로퍼티9.1 public 필드의 유혹 9.2 메소드보다 프로퍼티 9.3 자동 구현 프로퍼티 __자동 구현 프로퍼티 뒤에서 일어나는 일 9.4 프로퍼티와 생성자 9.5 초기화 전용 자동 구현 프로퍼티 9.6 프로퍼티 초기화를 강제하는 required 키워드 9.7 레코드 형식으로 만드는 불변 객체 __레코드 선언하기 __with를 이용한 레코드 복사 __레코드 객체 비교하기 9.8 무명 형식 9.9 인터페이스의 프로퍼티 9.10 추상 클래스의 프로퍼티 [연습문제] Chapter 10 | 배열과 컬렉션 그리고 인덱서10.1 All for one, one for all 10.2 배열을 초기화하는 세 가지 방법 10.3 알아두면 삶이 윤택해지는 System.Array 10.4 배열 분할하기 10.5 2차원 배열 [Vitamin Quiz 10-1] [Vitamin Quiz 10-2] 10.6 다차원 배열 10.7 가변 배열 10.8 컬렉션 맛보기 __ArrayList __Queue __Stack__Hashtable 10.9 컬렉션을 초기화하는 방법 10.10 인덱서 10.11 foreach가 가능한 객체 만들기 [연습문제] Chapter 11 | 일반화 프로그래밍11.1 일반화 프로그래밍이란? 11.2 일반화 메소드 11.3 일반화 클래스 11.4 형식 매개변수 제약시키기[Vitamin Quiz 11-1] 11.5 일반화 컬렉션 __List〈T〉 __Queue〈T〉__Stack〈T〉__Dictionary〈TKey, TValue〉11.6 foreach를 사용할 수 있는 일반화 클래스 [연습문제] Chapter 12 | 예외 처리하기12.1 예외에 대하여 12.2 try~catch로 예외 받기 12.3 System.Exception 클래스 12.4 예외 던지기 12.5 try~catch와 finally12.6 사용자 정의 예외 클래스 만들기 12.7 예외 필터하기 12.8 예외 처리 다시 생각해보기 [연습문제] Chapter 13 | 대리자와 이벤트13.1 대리자란? 13.2 대리자는 왜, 언제 사용하나요? 13.3 일반화 대리자 13.4 대리자 체인 13.5 익명 메소드 13.6 이벤트: 객체에 일어난 사건 알리기 13.7 대리자와 이벤트 [연습문제] Chapter 14 | 람다식14.1 람다식, 너는 어디에서 왔니? 14.2 처음 만나는 람다식 14.3 문 형식의 람다식 14.4 Func와 Action으로 더 간편하게 무명 함수 만들기 __Func 대리자 __Action 대리자 14.5 식 트리 14.6 식으로 이루어지는 멤버 [연습문제] Chapter 15 | LINQ15.1 데이터! 데이터! 데이터! 15.2 LINQ의 기본 __from __where __orderby __select 15.3 여러 개의 데이터 원본에 질의하기 15.4 group by로 데이터 분류하기 15.5 두 데이터 원본을 연결하는 join __내부 조인 __외부 조인 15.6 LINQ의 비밀과 LINQ 표준 연산자 [연습문제] Chapter 16 | 리플렉션과 애트리뷰트16.1 리플렉션 __Object.GetType( ) 메소드와 Type 클래스 [Vitamin Quiz 16-1] __리플렉션을 이용해서 객체 생성하기 __형식 내보내기 16.2 애트리뷰트 __애트리뷰트 사용하기 __호출자 정보 애트리뷰트 __내가 만드는 애트리뷰트 [연습문제]Chapter 17 | dynamic 형식17.1 dynamic 형식 소개 __덕 타이핑 17.2 COM과 .NET 사이의 상호 운용성을 위한 dynamic 형식 17.3 동적 언어와의 상호 운용성을 위한 dynamic 형식 Chapter 18 | 파일 다루기18.1 파일 정보와 디렉터리 정보 다루기 __예제 프로그램: 디렉터리/파일 정보 조회하기 __예제 프로그램: 디렉터리/파일 생성하기 18.2 파일을 읽고 쓰기 위해 알아야 할 것들 __System.IO.Stream 클래스 [Vitamin Quiz 18-1] 18.3 실수를 줄여주는 using 선언 18.4 이진 데이터 처리를 위한 BinaryWriter/BinaryReader [Vitamin Quiz 18-2] 18.5 텍스트 파일 처리를 위한 StreamWriter/StreamReader 18.6 객체 직렬화하기 [Vitamin Quiz 18-3] Chapter 19 | 스레드와 태스크19.1 프로세스와 스레드__스레드 시작하기 __스레드 임의로 종료하기 __스레드의 일생과 상태 변화__인터럽트: 스레드를 임의로 종료하는 다른 방법 __스레드 간 동기화 [Vitamin Quiz 19-1] [Vitamin Quiz 19-2] 19.2 Task와 Task〈TResult〉 그리고 Parallel__System.Threading.Tasks.Task 클래스__코드의 비동기 실행 결과를 주는 Task〈TResult〉 클래스 __손쉬운 병렬 처리를 가능케 하는 Parallel 클래스 19.3 async 한정자와 await 연산자로 만드는 비동기 코드 __.NET이 제공하는 비동기 API 맛보기 Chapter 20 | WinForm으로 만드는 사용자 인터페이스20.1 도대체 무슨 일이 일어나고 있는 것일까?20.2 C# 코드로 WinForm 윈도우 만들기 20.3 Application 클래스__메시지 필터링 20.4 윈도우를 표현하는 Form 클래스 __Form에 정의된 이벤트와 이벤트 처리기 연결하기 __Form의 프로퍼티를 조절하여 윈도우 모양 바꾸기 __Form 위에 컨트롤 올리기 20.5 폼 디자이너를 이용한 WinForm UI 구성__새 프로젝트 만들기__Form __GroupBox, Label, ComboBox, CheckBox, TextBox__TrackBar, ProgressBar __Button, Form, Dialog __TreeView, ListView 20.6 사용자 인터페이스와 비동기 작업 __새 프로젝트 만들기__CopySync( )/CopyAsync( ) 메소드 구현하기__UI 구성하기Chapter 21 | 네트워크 프로그래밍21.1 네트워크 프로그래밍에 앞서 알아둬야 할 기초__인터넷의 유래__TCP/IP 스택__TCP/IP의 주소 체계: IP 주소__포트 __TCP/IP의 동작 과정21.2 TcpListener와 TcpClient21.3 흐르는 패킷 21.4 프로토콜 설계와 네트워크 애플리케이션 프로그래밍 예제 __파일 업로드 프로토콜 __파일 업로드 서버와 클라이언트 구현하기 __서버/클라이언트가 같이 사용할 클래스 라이브러리 만들기 __파일 업로드 서버 구현하기 __클라이언트 구현하기__파일 업로드 시험하기 Chapter 22 | 가비지 컬렉션22.1 가비지 컬렉터를 아시나요? 22.2 개처럼 할당하고 정승처럼 수거하라 22.3 세대별 가비지 컬렉션 22.4 가비지 컬렉션을 이해했습니다. 우리는 뭘 해야 하죠? __객체를 너무 많이 할당하지 마세요 __너무 큰 객체 할당을 피하세요 __너무 복잡한 참조 관계는 만들지 마세요 __루트를 너무 많이 만들지 마세요 __작은 구멍이 댐을 무너뜨립니다 [찾아보기]