크로스 플랫폼 개발을 위한 C# 10과 .NET 6 6/e - 에이콘 프로그래밍 언어 시리즈
마크프라이스
(MarkJ.Price)
C#프로그래밍과마이크로소프트애저(Azure)솔루션분야의전문가다.20년이상의프로그래밍경력을가지고있다.
1993년부터80개이상의마이크로소프트프로그래밍자격시험을통과했으며,시험을준비하는다른사람들도전문적으로가르치고있다.또한2001년부터2003년까지미국레드몬드(Redmond)의마이크로소프트에서공식코스웨어(courseware)개발을담당했다.그의팀은초기알파버전이었던C#의첫번째교육코스를만들었고,C#및.NET분야의다른공인강사들을훈련시키면서그들의수준을빠른속도로끌어올렸다.현재는옵티마이즐리(Optimizely)의디지털경험플랫폼(DXP)에대한교육과정을만들어제공하고있다.컴퓨터과학학위가있다.
1장.C#그리고.NET만나기
__개발환경구성
____적합한도구및애플리케이션선택
______폴리글랏노트북확장의장점과단점
______크로스플랫폼개발에비주얼스튜디오코드사용하기
______클라우드개발을위한깃허브Codespaces
______맥용비주얼스튜디오2022
______윈도우용비주얼스튜디오
______이책에서사용한개발환경
____크로스플랫폼배포
____윈도우용비주얼스튜디오2022설치하기
______윈도우용비주얼스튜디오키보드바로가기키
____비주얼스튜디오코드설치하기
______다른확장설치
______비주얼스튜디오코드버전이해하기
______비주얼스튜디오코드키보드단축키
__.NET이해하기
____.NET프레임워크이해하기
____모노,자마린,유니티프로젝트이해하기
____.NET코어이해하기
____.NET로드맵
____.NET지원
______.NET런타임과.NETSDK버전
______이전버전제거하기
____모던.NET의차이점
______윈도우개발
______웹개발
______데이터베이스개발
____모던.NET테마
____.NET표준이해하기
____이책에사용된.NET플랫폼과도구들
____IL이해하기
__비주얼스튜디오2022로콘솔앱만들기
____비주얼스튜디오2022에서여러프로젝트관리하기
____비주얼스튜디오2022에서코드작성
____비주얼스튜디오에서컴파일하고실행하기
______컴파일러가생성한폴더와파일
____최상위문작성
____비주얼스튜디오2022솔루션에두번째프로젝트추가하기
______암시적으로가져온네임스페이스
__비주얼스튜디오코드로콘솔앱만들기
____비주얼스튜디오코드로여러개의프로젝트관리하기
____비주얼스튜디오코드로코드작성하기
____dotnetCLI를사용해코드컴파일하고실행하기
____비주얼스튜디오코드에두번째프로젝트추가하기
____비주얼스튜디오코드에서여러개의파일다루기
__폴리글랏노트북을사용해코드탐색하기
____노트북생성
____노트북에서코드작성및실행하기
____노트북저장하기
____노트북에마크다운및특수명령추가
____여러개의셀에서코드실행
____폴리글랏노트북에서이책의예제코드사용하기
__프로젝트폴더및파일구성
____공통폴더와파일
____깃허브솔루션코드
__이책의깃허브저장소활용방법
____책에대한문제제기
____책에대한피드백
____깃허브저장소에서솔루션코드다운로드
____비주얼스튜디오코드및명령줄에서깃사용
______솔루션코드저장소복제
__도움말찾기
____마이크로소프트문서읽기
____dotnet도구에대한도움얻기
____형식정의와멤버정보얻기
____스택오버플로사용하기
____구글사용하기
____공식.NET블로그구독하기
____스콧한셀만유투브채널
__연습및탐구
____연습1.1-복습
____연습1.2-웹에서코딩하기
____연습1.3-탐구
__마무리
____코드저장소
____Discord채널참여
2장.C#문법과키워드
__C#소개
____언어버전과기능이해하기
______C#1.0
______C#2.0
______C#3.0
______C#4.0
______C#5.0
______C#6.0
______C#7.0
______C#7.1
______C#7.2
______C#7.3
______C#8
______C#9
______C#10
____C#표준이해하기
____C#컴파일러버전확인하기
______SDK버전출력하기
______특정언어버전컴파일러활성화하기
__C#문법과어휘이해하기
____컴파일러버전표시하기
____C#문법이해하기
____구문
____주석
____블록
____구문과블록의예
____C#어휘이해하기
____프로그래밍언어와인간의언어비교
____C#구문에대한색구성표변경
______정확한코드작성을위한도구
____네임스페이스가져오기
______암시적및전역적으로네임스페이스가져오기
____동사는메서드
____명사는형식,필드,변수,속성
____형식과메서드개수구하기
__변수다루기
____변수이름규칙
____리터럴값
____텍스트저장
______축약문자열이해하기
____숫자저장
______양의정수저장
______향상된숫자지원
______양의정수살펴보기
____실수저장
______숫자형식범위살펴보기
______double과decimal비교
____불린형식
____object형식
____dynamic형식
____지역변수
______지역변수의형식지정
______지역변수의형식추론
______대상으로형식화된new
____형식기본값가져오기및설정
____배열에여러값저장하기
__콘솔애플리케이션알아보기
____콘솔출력
______번호가지정된위치인수로형식화하기
______문자열보간
______문자열형식화
____콘솔입력
____콘솔사용단순화
____사용자에게키입력받기
____콘솔앱에인수전달
____인수로옵션설정
____플랫폼에서지원하지않는API처리
__연습및탐구
____연습2.1-복습
____연습2.2
____연습2.3-숫자크기와범위
____연습2.4-탐구
__마무리
3장.흐름제어및형식변환
__변수에대한작업
____단항연산자
____이항산술연산자
____대입연산자
____논리연산자
____조건부논리연산자
____비트및이항시프트연산자
____그외연산자
__선택문이해하기
____if문으로분기
______if문에항상중괄호를사용해야하는이유
____if문과패턴매칭
____switch문으로분기하기
____switch문과패턴매칭
____swith표현식으로switch문단순화하기
__반복문이해하기
____while문루프
____do문루프
____for문루프
____foreach문루프
______foreach의동작방식이해하기
__형식변환
____숫자의암시적,명시적변환
____System.Convert로형식변환
____숫자반올림
______기본반올림규칙이해하기
____반올림규칙제어
____모든형식을string으로변환
____바이너리객체를string으로변환
____string을숫자,날짜,시간으로파싱하기
______Parse사용시주의할점
______TryParse메서드로예외피하기
__예외다루기
____try블록으로예외가발생할수있는코드감싸기
______모든예외잡기
______특정예외잡기
______필터사용
__오버플로검사
____checked문을사용해서오버플로예외던지기
____unchecked문으로컴파일러의오버플로검사비활성하기
__연습및탐구
____연습3.1-복습
____연습3.2-루프와오버플로탐구
____연습3.3-루프와연산자연습
____연습3.4-예외처리연습
____연습3.5-연산자복습
____연습3.6-탐구
__마무리
4장.함수작성,디버깅,테스트
__함수만들기
____구구단함수만들기
____값을반환하는함수만들기
____기수에서서수로숫자변환하기
____재귀로팩토리얼계산하기
______XML주석으로함수문서화하기
______함수구현에람다사용하기
__디버깅
____고의적인버그만들기
____중단점설정및디버깅시작
______비주얼스튜디오2022사용하기
______비주얼스튜디오코드사용하기
____디버깅도구모음
____디버깅윈도우
____단계별코드실행
____중단점커스터마이징
__개발및런타임로깅
____로깅옵션
____디버그와추적을통한계측
______기본추적수신기사용하기
____추적수신기구성하기
____추적레벨스위치
______비주얼스튜디오코드프로젝트에패키지추가
______비주얼스튜디오2022프로젝트에패키지추가
______프로젝트패키지살펴보기
__단위테스트
____테스트형식
____테스트에필요한클래스라이브러리만들기
____단위테스트만들기
______비주얼스튜디오코드에서단위테스트실행
______비주얼스튜디오2022에서단위테스트실행
______버그수정
__함수에서예외처리
____사용오류및실행오류
____함수에서일반적으로발생하는예외
____호출스택
____예외를처리하는위치
____예외다시던지기
____테스터-도어패턴
____테스터-도어패턴의문제
__연습및탐구
____연습4.1-복습
____연습4.2-디버깅및단위테스트로함수작성연습하기
____연습4.3-탐구
__마무리
____코드저장소
____Discord채널참여
5장.OOP로사용자정의형식만들기
__OOP에관해서
__클래스라이브러리만들기
____클래스라이브러리생성
____네임스페이스에클래스정의하기
______네임스페이스선언간소화
____멤버이해하기
____클래스인스턴스화
______어셈블리참조
____형식사용을위해네임스페이스가져오기
____객체이해하기
______System.Object상속하기
__필드에데이터저장하기
____필드선언
____접근지시자이해하기
____필드값설정하고출력하기
____enum형식으로값저장하기
______enum형식으로여러값저장하기
__컬렉션을사용해여러개의값저장하기
____제네릭컬렉션
____정적필드만들기
____상수필드
____읽기전용필드만들기
____생성자로필드초기화하기
______여러개의생성자정의
__메서드작성및호출하기
____메서드에서값반환하기
____튜플로여러개의반환값조합하기
______튜플구문지원
______튜플필드에고유이름지정하기
______튜플이름추론
______튜플분해하기
______형식분해하기
____메서드에매개변수정의하고전달하기
____메서드오버로딩
____선택적매개변수와이름지정매개변수전달하기
______이름지정매개변수
____매개변수전달제어하기
______out변수단순화
____ref반환값이해하기
____partial로클래스분리하기
__속성과인덱서로접근제어하기
____읽기전용속성정의하기
____설정가능한속성정의하기
____초기화시에필수속성설정
____인덱서정의하기
__객체패턴매칭
____.NET6클래스라이브러리생성하고참조하기
____패턴매칭이해하기
____C#9이상에서향상된패턴매칭
__레코드사용하기
____초깃값전용속성
____레코드이해하기
____레코드의위치데이터멤버
______레코드에서데이터멤버단순화
__연습및탐구
____연습5.1-복습
____연습5.2-탐구
__마무리
6장.인터페이스구현및클래스상속하기
__클래스라이브러리와콘솔애플리케이션설정
__메서드더알아보기
____메서드를사용해기능구현하기
____연산자로기능구현하기
____로컬함수정의하기
__이벤트발생및처리하기
____델리게이트를사용해서메서드호출하기
____델리게이트정의하고처리하기
____이벤트정의하고처리하기
__제네릭으로안전한형식사용하기
____제네릭을사용하지않은형식으로작업하기
____제네릭형식사용하기
__인터페이스구현하기
____공통인터페이스
____정렬을위한객체비교
____분리된클래스를사용해서객체비교하기
____암시적,명시적인터페이스구현
____기본구현으로인터페이스정의하기
__참조와값형식으로메모리관리하기
____참조형식과값형식
____참조와값형식이메모리에저장되는방식
____형식의동등성
____구조체정의하기
____recordstruct형식사용하기
____관리되지않은리소스해제하기
____확실하게dispose호출하기
__null값사용하기
____null허용값형식만들기
____null이가능한참조형식
____null허용및null비허용참조형식활성화
____null비허용변수및매개변수선언
____null확인
______메서드매개변수에서null확인
__클래스상속
____함수를추가해클래스확장
____멤버숨기기
____멤버오버라이딩
____추상클래스에서상속
____상속과오버라이딩막기
____다형성
__상속관계내에서변환하기
____암시적캐스팅
____명시적캐스팅
____캐스팅예외다루기
__.NET형식을상속하고확장하기
____예외상속하기
____상속할수없을때형식확장
______기능재사용을위해static메서드사용하기
______기능재사용을위해확장메서드사용하기
__분석기를사용해더나은코드만들기
____경고비활성화
____코드수정
____StyleCop권장사항
__연습및탐구
____연습6.1-복습
____연습6.2-상속관계만들기
____연습6.3-탐구
__마무리
7장..NET형식을패키징하고배포하기
__.NET6로가는길
____.NET코어1.0
____.NET코어1.1
____.NET코어2.0
____.NET코어2.1
____.NET코어2.2
____.NET코어3.0
____.NET코어3.1
____.NET5.0
____.NET6.0
____.NET코어2.0부터.NET5까지의성능개선
____.NETSDK업데이트확인
__.NET컴포넌트이해하기
____어셈블리,NuGet패키지,네임스페이스이해하기
______네임스페이스란?
______종속어셈블리이해하기
____마이크로소프트.NET프로젝트SDK이해하기
____어셈블리의네임스페이스및형식이해하기
____NuGet패키지이해하기
____프레임워크이해하기
____형식사용을위해네임스페이스가져오기
____C#키워드와.NET형식연관성
______C#키워드와.NET형식연결
______기본크기정수
______형식위치찾기
____.NET표준을사용해레거시플랫폼과코드공유하기
____서로다른SDK를사용하는클래스라이브러리의기본값이해하기
____.NET표준2.0클래스라이브러리생성하기
____.NETSDK제어하기
__배포용코드게시하기
____배포할콘솔애플리케이션만들기
____.NET명령이해하기
______새프로젝트만들기
____.NET및환경정보얻기
____프로젝트관리
____독립형애플리케이션게시하기
____단일파일앱게시하기
____앱다듬기를사용해크기줄이기
______어셈블리레벨다듬기활성화
______형식레벨과멤버레벨다듬기활성화
__.NET어셈블리디컴파일
____비주얼스튜디오2022ILSpy확장을사용한디컴파일
______디컴파일링방지
__NuGet배포를위한라이브러리패키징
____NuGet패키지참조
______의존성고정
____NuGet용라이브러리패키징
______공개NuGet피드에패키지게시하기
______비공개NuGet피드에패키지게시하기
____NuGet패키지탐색하기
____클래스라이브러리패키지테스트
__.NET프레임워크에서모던.NET으로이식하기
____이식가능여부
____이식필요여부
____.NET프레임워크와모던.NET간의차이점
____.NET이식성분석기
____.NET업그레이드도우미
____.NET표준이아닌라이브러리사용
__미리보기기능
____미리보기기능특성
____미리보기기능활성화하기
____일반수학
__연습및탐구
____연습7.1-복습
____연습7.2-탐구
____연습7.3-파워셸살펴보기
__마무리
8장.공용.NET형식다루기
__숫자다루기
____BigInteger다루기
____복소수다루기
____쿼터니언이해하기
__텍스트다루기
____문자열의길이구하기
____문자열안의문자가져오기
____문자열분할하기
____문자열의일부가져오기
____문자열내용확인
____Join,Format,그외의다른string멤버
____효과적으로문자열빌드하기
__날짜와시간다루기
____날짜및시간값지정하기
____날짜와시간을사용한세계화
____날짜또는시간중하나만사용하기
__정규표현식을사용한패턴매칭
____텍스트로입력된숫자검사
____정규표현식성능향상
____정규표현식구문이해하기
____정규표현식의예
____쉼표로구분된문자열나누기
__컬렉션에여러개의객체저장하기
____모든컬렉션이갖는공통기능
____컬렉션의용량을확보해성능향상하기
____컬렉션선택
______리스트
______딕셔너리
______스택
______큐
______세트
______컬렉션메서드요약
____리스트다루기
____딕셔너리다루기
____큐사용하기
____컬렉션정렬하기
____그외특수컬렉션
______비트값의간소한배열다루기
______효과적으로리스트다루기
______불변컬렉션사용하기
____컬렉션모범사례
__범위,인덱스,영역다루기
____Span을활용해효과적으로메모리사용하기
____Index형식으로위치식별하기
____Range형식으로범위식별하기
____index,range,span사용하기
__네트워크리소스다루기
____URI,DNS,IP주소다루기
____서버에ping보내기
__리플렉션과특성다루기
____어셈블리버저닝
____어셈블리메타데이터읽기
____사용자정의특성만들기
____리플렉션에대해좀더알아보기
____이미지다루기
__코드국제화
____현재문화권을가져오고변경하기
__연습및탐구
____연습8.1-복습
____연습8.2-정규표현식연습
____연습8.3-확장메서드연습
____연습8.4탐구
__마무리
____코드저장소
____Discord채널참여
9장.파일,스트림,직렬화사용하기
__파일시스템다루기
____크로스플랫폼환경과파일시스템다루기
____드라이브다루기
____디렉터리다루기
____파일다루기
____경로다루기
____파일의정보얻기
____파일작업방식제어하기
__스트림으로읽고쓰기
____스트림의추상화,구체화이해하기
____스토리지스트림
____function스트림
____스트림도우미
____텍스트스트림에쓰기
____XML스트림에쓰기
____파일리소스정리하기
______using문을사용해서dispose단순화하기
____스트림압축하기
____브로틀리알고리듬으로압축하기
__텍스트인코딩과디코딩
____바이트배열로문자열인코딩
____파일의텍스트인코딩,디코딩
__객체그래프직렬화하기
____XML직렬화
____컴팩트XML생성
____XML역직렬화
____JSON직렬화
____고성능JSON처리
__JSON다루기
____HTTP응답을위한새로운JSON확장메서드
____Newtonsoft에서새JSON으로마이그레이션
__연습및탐구
____연습9.1-복습
____연습9.2-XML직렬화연습
____연습9.3-탐구
__마무리
10장.엔티티프레임워크코어로데이터다루기
__최신데이터베이스이해하기
____레거시엔티티프레임워크
______레거시엔티티프레임워크6.3이상사용하기
____엔티티프레임워크코어이해하기
____EF코어작업을위한콘솔앱만들기
____샘플관계형데이터베이스사용하기
____윈도우용마이크로소프트SQL서버사용하기
____SQL서버다운로드하고설치하기
____SQLServer용Northwind샘플데이터베이스생성
____서버탐색기에서Northwind샘플데이터베이스다루기
____SQLite사용하기
______맥OS에서SQLite설정
______윈도우에서SQLite설정
______다른OS에서SQLite설정
____SQLite용Northwind샘플데이터베이스생성하기
____SQLiteStudio로Northwind샘플데이터베이스다루기
__EF코어설정하기
____EF코어데이터공급자선택하기
____데이터베이스연결하기
____Northwind데이터베이스콘텍스트클래스정의하기
__EF코어모델정의하기
____모델을정의하는EF코어규칙사용하기
____EF코어주석특성을사용해모델정의하기
____EF코어FluentAPI를사용해모델정의하기
______FluentAPI로데이터시딩
____Northwind테이블용EF코어모델빌드
______Category와Product엔티티클래스정의
____Northwind데이터베이스콘텍스트클래스에테이블추가하기
____dotnet-ef도구설정하기
____기존데이터베이스를사용한스캐폴딩
____사전규칙모델구성하기
__EF코어모델쿼리하기
____포함되는엔티티필터링하기
______윈도우콘솔에서유니코드문자
____필터링과정렬
____생성된SQL확인하기
____사용자정의로깅공급자를사용해EF코어로깅하기
______공급자지정값으로로그필터링
______쿼리태그로깅
____Like로패턴매칭
____전역필터정의하기
__EF코어로딩패턴
____즉시로딩
____지연로딩활성화
____명시적로딩
__EF코어로데이터조작하기
____엔티티삽입
____엔티티업데이트
____엔티티삭제
____데이터베이스콘텍스트풀링
__트랜잭션다루기
____격리수준에따른트랜잭션제어
____명시적트랜잭션선언하기
__코드주도EF코어모델
____마이그레이션
__연습및탐구
____연습10.1-복습
____연습10.2-다른직렬화포맷을사용해데이터내보내기연습
____연습10.3-주제탐구
____연습10.4-NoSQL데이터베이스탐구
__마무리
____코드저장소
____Discord채널참여
11장.LINQ를사용해데이터쿼리하고조작하기
__LINQ표현식작성하기
____LINQ의구성요소
____Enumerable클래스로LINQ표현식만들기
______지연실행
____Where로엔티티필터링하기
____이름있는메서드타기팅
____명시적델리게이트인스턴스화를제거해서코드단순화하기
____람다표현식타기팅
____엔티티정렬하기
______OrderBy를사용해단일프로퍼티정렬하기
______ThenBy메서드로여러개의속성정렬하기
____var또는특정형식을사용해쿼리선언하기
____형식필터링
____LINQ를사용해set,multiset다루기
__EF코어와LINQ사용하기
____EF코어모델만들기
____시퀀스필터링과정렬
____새로운형식에시퀀스투영하기
____시퀀스join과group
______시퀀스조인
______시퀀스GroupJoin
____시퀀스집계
__간편표기법으로LINQ구문단순화하기
__병렬LINQ로멀티스레드사용하기
____멀티스레드장점을이용하는앱만들기
______윈도우
______맥OS
______모든운영체제
__사용자정의LINQ확장메서드만들기
____연결가능한확장메서드호출하기
____MODE와MEDIAN메서드만들기
__LINQtoXML사용하기
____LINQtoXML을사용해서XML생성하기
____LINQtoXML을사용해XML읽기
__연습및탐구
____연습11.1-복습
____연습11.2-LINQ쿼리연습
____연습11.3-탐구
__마무리
12장.멀티태스킹으로성능과확장성향상하기
__프로세스,스레드,태스크이해하기
__성능과리소스사용량모니터링
____형식효율성평가
____Diagnostics를사용한성능및메모리모니터링
______Stopwatch와Process형식의유용한멤버
______Recorder클래스구현하기
____문자열처리효율성측정
____Benchmark.NET으로성능및메모리모니터링
__비동기로태스크실행하기
____동기로여러개의작업수행하기
____태스크를사용해비동기로여러작업수행하기
______태스크시작하기
____태스크대기하기
______태스크에대기메서드사용하기
____다른태스크계속실행하기
____중첩된태스크와자식태스크
____객체를태스크로감싸기
__공유리소스에동기적으로접근하기
____멀티스레드에서리소스접근하기
____리소스에상호배제잠금적용하기
______잠금코드이해하기
______데드락회피하기
____이벤트동기화
____원자적CPU연산만들기
____다른동기화형식적용하기
__async와await이해하기
____콘솔앱의응답성향상시키기
____GUI앱의응답성개선하기
____웹애플리케이션과웹서비스의확장성향상하기
____멀티태스킹을지원하는공통형식
____catch블록에서await사용하기
____async스트림다루기
__연습및탐구
____연습12.1-복습
____연습12.2-탐구
__마무리
13장.C#과.NET으로만드는실용적인애플리케이션
__C#및.NET용앱모델이해
____ASP.NETCore를사용해웹사이트만들기
______콘텐츠관리시스템을사용해웹사이트만들기
______SPA프레임워크로웹애플리케이션만들기
____모바일및데스크톱앱빌드
____.NETMAUI의대안
______Uno플랫폼
______아발로니아
__ASP.NETCore의새로운기능
____ASP.NETCore1.0
____ASP.NETCore1.1
____ASP.NETCore2.0
____ASP.NETCore2.1
____ASP.NETCore2.2
____ASP.NETCore3.0
____ASP.NETCore3.1
____블레이저웹어셈블리3.2
____ASP.NETCore5.0
____ASP.NETCore6.0
__윈도우전용데스크톱앱만들기
____레거시윈도우애플리케이션플랫폼이해하기
____레거시윈도우플랫폼에대한최신.NET지원이해하기
__프로젝트구조화
____솔루션이나작업영역에서프로젝트구조화
__다른프로젝트템플릿사용하기
____추가템플릿팩설치하기
__Northwind용엔티티데이터모델만들기
____SQLite를사용해엔티티모델용클래스라이브러리만들기
______클래스-테이블매핑개선
______Northwind데이터베이스콘텍스트에대한클래스라이브러리만들기
____SQL서버를사용해엔티티모델용클래스라이브러리만들기
__연습및탐구
____연습13.1-복습
____연습13.2-탐구
__마무리
____코드저장소
____Discord채널참여
14장.ASP.NETCoreRazor페이지를사용해웹사이트만들기
__웹개발이해하기
____HTTP이해하기
______URL의구성요소이해
______이책의프로젝트에서사용하는포트번호
____크롬을사용해HTTP요청보내기
____클라이언트웹개발기술이해하기
__ASP.NETCore이해하기
____클래식ASP.NET과모던ASP.NETCore
____비어있는ASP.NETCore프로젝트만들기
____웹사이트테스트및보안
______더엄격한보안활성화및보안연결로리다이렉트
____호스팅환경제어
____서비스및파이프라인구성분리
____웹사이트에서정적콘텐츠를제공하도록설정
______정적파일및웹페이지를위한폴더생성
______정적및기본파일활성화
__ASP.NETCoreRazor페이지살펴보기
____Razor페이지활성화
____Razor페이지에코드추가하기
____Razor페이지에서공유레이아웃사용하기
____Razor페이지에서코드숨김파일사용하기
__ASP.NETCore와엔티티프레임워크코어사용하기
____엔티티프레임워크코어를서비스로구성하기
____RazorPage를사용한데이터조작
______모델에엔티티추가가가능하도록설정
______새공급자를추가하기위한양식정의
____RazorPage에종속성서비스주입
____Razor클래스라이브러리사용하기
____Razor클래스라이브러리만들기
____비주얼스튜디오코드의압축형식으로폴더렌더링기능비활성화
____EF코어를사용해직원정보출력
____단일직원정보를표시하는partial보기구현
____Razor클래스라이브러리사용및테스트
__서비스및HTTP요청파이프라인구성하기
____엔드포인트라우팅이해하기
______엔드포인트라우팅구성
____엔드포인트라우팅구성살펴보기
______ConfigureServices메서드에서비스등록
______Configure메서드에HTTP요청파이프라인설정
____주요미들웨어확장방법요약
____HTTP파이프라인시각화
____미들웨어로익명인라인대리자구현
__연습및탐구
____연습14.1-복습
____연습14.2-데이터기반웹페이지구축연습
____연습14.3-콘솔앱용웹페이지구축
____연습14.4-탐구
__마무리
15장.모델-뷰-컨트롤러패턴을이용한웹사이트개발
__ASP.NETCoreMVC웹사이트설정
____ASP.NETCoreMVC웹사이트만들기
____SQLServerLocalDB에대한인증데이터베이스생성
____기본ASP.NETCore웹사이트살펴보기
______새계정생성하기
____MVC웹사이트프로젝트구조살펴보기
____ASP.NETCoreIdentity데이터베이스검토
__ASP.NETCoreMVC웹사이트살펴보기
____ASP.NETCoreMVC초기화
____기본MVC라우터이해하기
____컨트롤러와액션이해하기
______ControllerBase클래스이해하기
______컨트롤러클래스이해하기
______컨트롤러책임이해하기
____뷰탐색경로규칙
____로깅
____필터
______필터를사용한액션메서드보안처리
______역할관리활성화및프로그래밍방식으로역할생성하기
______필터를사용해응답캐시하기
______필터를사용해사용자지정라우트정의
____엔티티및뷰모델이해하기
____뷰이해하기
__ASP.NETCoreMVC웹사이트사용자지정
____사용자정의스타일
____카테고리이미지설정
____Razor구문이해하기
____형식화된뷰정의
____사용자정의홈페이지결과확인
____경로를사용해매개변수전달
____모델바인더자세히이해하기
______모호한불일치예외해결
______경로매개변수전달
______폼매개변수전달
____모델검증
____뷰도우미메서드이해하기
__데이터베이스쿼리및디스플레이템플릿사용
__비동기작업을사용해확장성향상
____컨트롤러작업메서드를비동기로만들기
__연습및탐구
____연습15.1-복습
____연습15.2-카테고리세부정보페이지를구현해MVC구현연습
____연습15.3-비동기작업방법을이해하고구현해확장성향상연습
____연습15.4-MVC컨트롤러단위테스트연습
____연습15.5-탐구
__마무리
____코드저장소
____Discord채널참여
16장.웹서비스개발및사용하기
__ASP.NETCoreWebAPI를사용해웹서비스개발
____웹서비스용어이해
______WCF
______WCF의대안
____WebAPI에대한HTTP요청및응답이해
____ASP.NETCore웹API프로젝트생성하기
____웹서비스기능확인
____Northwind데이터베이스용웹서비스만들기
____엔티티용데이터저장소만들기
____WebAPI컨트롤러구현
______작업메서드반환유형
____고객데이터저장소및웹API컨트롤러구성
____문제세부정보지정
____XML직렬화제어
__웹서비스문서화및테스트
____브라우저를사용한GET요청테스트
____RESTClient확장으로HTTP요청테스트
______RESTClient를사용해GET요청하기
______RESTClient로다른요청보내기
____Swagger
____SwaggerUI로요청테스트
____HTTP로깅활성화
__HTTP클라이언트를사용해웹서비스사용
____HttpClient
____HttpClientFactory를사용해HTTP클라이언트구성
____컨트롤러에서고객데이터를JSON으로가져오기
____교차출처리소스공유활성화
__웹서비스를위한고급기능구현
____상태확인API구현
____OpenAPI분석기및규칙구현
____일시적인오류처리구현
____보안HTTP헤더추가
__최소한의API를사용해웹서비스개발
____최소한의API를사용해일기예보서비스구축
____최소한의일기예보서비스테스트
____Northwind웹사이트홈페이지에일기예보추가
__연습및탐구
____연습16.1-복습
____연습16.2-HttpClient로고객데이터생성및삭제
____연습16.3-탐구
__마무리
17장.블레이저로사용자인터페이스만들기
__블레이저이해하기
____자바스크립트친화적
____실버라이트-플러그인을사용하는C#및.NET
____웹어셈블리-블레이저대상
____블레이저호스팅모델이해
____블레이저구성요소이해
____블레이저와Razor의차이점
__블레이저프로젝트템플릿비교
____블레이저서버프로젝트템플릿
______CSS와자바스크립트격리
____페이지구성요소에대한블레이저라우팅
____라우팅가능한페이지구성요소를정의하는방법
____블레이저라우팅탐색방법
____경로매개변수를전달하는방법
____기본구성요소클래스
____경로와탐색링크구성요소사용하기
__블레이저서버프로젝트템플릿실행
__블레이저웹어셈블리프로젝트템플릿
__블레이저서버로구성요소만들기
____구성요소정의및테스트
____라우팅가능한페이지구성요소로바꾸기
____구성요소에서엔티티조회
__블레이저구성요소에대한서비스추상화
____EditForm구성요소로폼정의하기
____고객양식구성요소
____고객정보양식구성요소테스트
__블레이저웹어셈블리를사용해구성요소만들기
____블레이저웹어셈블리용서버구성
____블레이저웹어셈블리용클라이언트구성
____블레이저웹어셈블리구성요소및서비스테스트
__블레이저웹어셈블리앱개선
____블레이저웹어셈블리AOT활성화
____프로그레시브웹앱지원
______PWA에대한오프라인지원구현
____블레이저웹어셈블리용브라우저호환성분석기이해
____클래스라이브러리에서블레이저구성요소공유
____자바스크립트상호운용성
____블레이저구성요소라이브러리
__연습및탐구
____연습17.1-복습
____연습17.2-시간표구성요소만들기
____연습17.3-국가탐색항목만들기
____연습17.4-탐구
__마무리
____코드저장소
____Discord채널참여
18장.에필로그
__C#및.NET학습의다음단계
____디자인가이드라인으로실력향상
__.NETMAUI지연에대한소식
____원서의다음버전
____마치며
이책에서다루는내용
-블레이저,RazorPages,MVC(모델-뷰-컨트롤러)패턴과ASP.NETCore기능을사용한웹개발
-객체지향프로그래밍으로나만의형식구축
-코드작성,테스트,디버깅
-LINQ를사용한데이터쿼리및조작
-엔티티프레임워크코어,마이크로소프트SQL서버및SQLite를사용한데이터베이스통합및업데이트
이책의대상독자
크로스플랫폼.NET을사용해모던C#을학습하기위한단계별안내서로,개발가능한실용적인예제를제공한다.C#및.NET초보자나C#으로작업을해왔지만최근몇년간의변화에익숙하지않은프로그래머에게적합하다.
이책의구성
1장,'C#,그리고.NET만나기'에서는C#개발환경을설정하고비주얼스튜디오2022나비주얼스튜디오코드를사용해C#및.NET으로간단한콘솔애플리케이션을만든다.콘솔애플리케이션을만들면서C#10에도입된기능을사용한다.언어구성및라이브러리기능작성방법을배우고자.NET인터랙티브를사용하며,도움말을찾는방법,저자에게연락하는방법,깃허브저장소를통해이책과다음버전을개선하기위한피드백을제공하는방법도살펴본다.
2장,'C#문법과키워드'에서는C#버전을소개하고각버전별로어떤기능이제공되는지설명한다.앞으로C#언어를다루면서항상마주하게될문법과키워드를알아본다.특히다양한형식의변수를선언하고다루는방법을배운다.
3장,'흐름제어및형식변환'에서는연산자를사용해코드분기,비교,C#7에서C#10으로의패턴일치,반복,형식간의변환,예외처리를위한방어코드작성법을배운다.
4장,'함수작성,디버깅,테스트'에서는명령형과함수형구현스타일을모두사용해재사용가능한함수를작성해서DRY(Don’tRepeatYourself)원칙을따르는방법을설명한다.디버깅도구를사용해버그를찾아제거하고,런타임시코드를모니터링해문제를진단하고,엄격한테스트를통해버그를제거해,배포하기전에안정성과신뢰성을보장하는방법을배운다.
5장,'OOP로사용자정의형식만들기'에서는데이터를저장하는필드(field)와행동을수행하는함수(method)를포함해형식이가질수있는멤버의모든종류에관해알아본다.집합(aggregation)이나캡슐화(encapsulation)같은OOP(Object-OrientedProgramming)개념을사용해보고튜플(tuple)구문이나단순화된out변수,기본리터럴,유추된튜플이름등의언어기능을배운다.record키워드,init전용속성,C#9에도입된with표현식을사용해불변형식을정의하고사용하는방법을배운다.
6장,'인터페이스구현및클래스상속하기'에서는OOP를사용해이미존재하는형식으로부터새로운형식을파생시키는법을알아본다.연산자를정의하는방법과지역함수(localfunction),델리게이트(delegate),이벤트에대해배우며기본및파생클래스에대한인터페이스구현방법,형식멤버재정의,다형성(polymorphism),확장메서드(extensionmethod)와상속관계(inheritancehierarchy)클래스들사이의캐스팅,nullable참조타입도입으로인한C#8의큰변화를살펴본다.
7장,'.NET형식을패키징하고배포하기'에서는.NET버전을소개하고새로운라이브러리기능을도입한버전을설명하며.NET표준(.NETStandard)을준수하는형식과C#의관계를알아본다.윈도우,맥OS(macOS),리눅스에서코드를작성하고컴파일하는방법을배운다.앱과라이브러리를패키징하고배포하는방법도알아본다.
8장,'공용.NET형식다루기'에서는숫자및텍스트,날짜및시간조작,컬렉션에항목저장,네트워크작업및이미지조작,국제화(internationalization)처리같은작업을처리할수있는타입을설명한다.
9장,'파일,스트림,직렬화사용하기'에서는파일시스템다루기,파일과스트림을읽고쓰기,텍스트인코딩,JSON이나XML같은직렬화타입,System.Text.Json의향상된기능에관해배운다.
10장,'엔티티프레임워크코어로데이터다루기'에서는엔티티프레임워크코어(EFCore,EntityFrameworkCore)라고부르는객체관계매핑기술(ORM,Object-RelationalMapping)을사용해마이크로소프트SQL서버,SQLite같은데이터베이스를읽고쓰는방법을다룬다.테이블에매핑되는엔티티모델을정의하는방법,런타임에테이블및데이터베이스를생성할수있는코드주도(CodeFirst)모델을정의하는방법을알아본다.
11장,'LINQ를사용해데이터쿼리하고조작하기'에서는컬렉션의아이템을대상으로필터링,정렬등의작업을처리하고다른출력으로투영(project)할수있게하는언어확장인LINQ(LanguageIntegratedQueries)를다룬다.병렬LINQ(PLINQ,ParallelLINQ)와LINQtoXML같은특수기능을배운다.
12장,'멀티태스킹으로성능과확장성향상하기'에서는성능,확장성,유저생산성을높이고자동시에여러작업을처리하는방법을알아본다.asyncMain과System.Diagnostics를사용해코드를모니터링하고성능과효율성을측정하는방법을배운다.
13장,'C#과.NET으로만드는실용적인애플리케이션'에서는C#및.NET으로개발하는크로스플랫폼애플리케이션타입을알아본다.나머지장에서사용하는Northwind데이터베이스를표현하는EF코어모델도빌드한다.
14장,'ASP.NETCoreRazor페이지를사용해웹사이트만들기'에서는ASP.NETCore를사용해최신HTTP아키텍처로서버에서웹사이트를개발할때필요한내용을다룬다.작은웹사이트개발을위해동적웹페이지생성을간소화하는RazorPages라는ASP.NETCore기능과HTTP요청및응답파이프라인구축방법을배운다.
15장,'모델-뷰-컨트롤러패턴을이용한웹사이트개발'에서는ASP.NETCoreMVC를사용해규모가크고복잡한웹사이트를단위테스트및유지보수가용이하도록구축하는방법을다룬다.구성,인증,라우트,모델,뷰,컨트롤러에대해배운다.
16장,'웹서비스개발및사용하기'에서는ASP.NETCore웹API를사용해백엔드REST아키텍처웹서비스를만들고인스턴스화된HTTP클라이언트를사용해이를활용하는방법을알아본다.
17장,'블레이저로사용자인터페이스만들기'에서는블레이저(Blazor)를사용해서버또는클라이언트웹브라우저에서실행할수있는사용자인터페이스구성요소개발방법을다룬다.블레이저서버와블레이저WebAssembly간의차이점및두모델간전환이용이한구성요소개발방법을알아본다.
18장,'특수서비스개발및사용'에서는gRPC를사용해서비스구축,SignalR을사용해서버와클라이언트간의실시간통신구현,OData를사용해EF코어모델노출,애저함수(AzureFunction)를사용해트리거에응답하는클라우드호스팅기능을소개한다.
19장,'.NETMAUI를사용해모바일및데스크톱앱빌드'에서는안드로이드(Android),iOS,맥OS,윈도우용크로스플랫폼모바일및데스크톱앱을빌드하는방법을다룬다.앱의사용자인터페이스를정의하기위한XAML의기본사항을배운다.
20장,'데이터및애플리케이션보호'에서는악의적인사용자가데이터를보지못하도록암호화를사용하는방법,해싱(hashing)및서명을사용해조작또는손상되지않도록데이터를보호하는방법을설명한다.승인되지않은사용자로부터애플리케이션을보호하기위한인증및권한부여에대해알아본다.
부록,'연습문제해답’은각장마지막의문제에대한해답을제공한다.
지은이의말
시중에는C#언어,.NET(.NET)라이브러리,웹사이트,서비스,데스크톱,모바일앱같은앱모델에대해광범위한설명을담은수천페이지의책들이있다.이책은다르다.간결하고실용적인실습을따라하면서빠르게읽어볼수있도록구성했다.많은주제를다루기때문에깊이있는설명을배제하는경우도있지만필요하다면더상세한내용을찾아볼수있도록했다.
C#의멋진기능과특징들이이책에소개돼있다.책을다읽으면여러분은동료나상급자에게깊은인상을심어주고,생산성을높일수있는지식을얻게될것이다.일부낯선용어는웹검색을활용해충분히알아볼수있을것으로보고,사소한부분까지설명하는바람에읽는속도를늦추고지루해지지않도록했다.
옮긴이의말
이책의원서는『C#10and.NET6ModernCross-PlatformDevelopment-6thedition』입니다.2016년에처음출간된『C#6and.NETCore1.0』의6번째버전입니다.7번째버전이최근에출간되기도했지만,이번역서는6번째버전을기준으로합니다.독자여러분이혼란스럽지않도록,버전업이되면서달라진용어나계획에서확정으로확인된사실들은간략하게나마역자주석으로추가했습니다.
.NET5에서시작된.NET코어,.NET프레임워크,자마린통합계획은.NET6이출시되고2022년5월업데이트로.NETMAUI가포함되면서그목표에도달했습니다.또한향상된성능제공과C#10에추가된새로운언어기능을사용할수있으며3년간지원을받을수있는LTS버전이기도합니다.이책이C#10,.NET6과함께하는여러분의.NET프로그래밍여정에작은도움이되기를바랍니다.