C#

C# 교과서

기초에서 활용까지! 기본기를 탄탄하게 다지는 C# 입문서
C#의 쓰임새와 기초 문법부터 컬렉션, 제네릭, LINQ, 개체 지향, 동적 형식, 비동기 프로그래밍과 같은 활용과 확장 기능까지 입문자에게 필요한 모든 것을 설명합니다.

C# 교과서 - 정오표

오탈자 또는 개선사항이 발생하면 이곳에 지속적으로 업데이트 하도록 하겠습니다. 참고로, 이 페이지의 정오표는 제 사이트를 통해서 접수된 자료만 기록이 됩니다. 추가적인 정보는 출판사 도서 소개 사이트를 참고하세요.
3.2 C#의 기본 코드 구조 끝부분 C#은 대/소문자 구분: C#은 대·소문자 구분: CaseSensitive.cs
종이책 55 페이지: (이 내용은 전자책에만 오탈자가 있습니다.)
Main을 Main으로 바꾸고 writeline을 Writeline으로 바꾸어서 컴파일합니다.
-에서-
main을 Main으로 바꾸고 writeline을 Writeline으로 바꾸어서 컴파일합니다.
-으로-
5.6 상수 사용하기 바로 앞
종이책 78페이지: Note 표기법
파스칼 표기법: 접두사와 단어를 언더스코어(_)로 구분합니다.
int my_num = 0;
-에서-
파스칼 표기법: 단어를 대문자로 구분합니다.
int MyNum = 0;
-으로-

이 부분은 사실, 표기법이 문법이 아닌 스타일이라서, 큰 차이는 없지만, 아직 소문자로 시작하는 변수만을 표기하기 위해서 nynum을 구분짓기 위해서 언더스코어를 사용했지만, 좀 더 명확한 내용은 MyNum 형태로 문자와 문자를 대문자로 구분짓는게 더 좋은 표현이라고 생각하여 변경하도록 하겠습니다.
7.3. 논리 데이터 형식: bool
종이책 98 페이지
1비트
-에서-
1바이트
-으로-

bool 데이터 형식은 일반적으로 1바이트의 저장 공간을 차지합니다. 이는 8비트에 해당합니다. 그러나 CLR(Common Language Runtime)은 bool 형식의 크기를 정의하지 않으며, 각 구현체마다 다를 수 있습니다. 하지만, 일반적인 .NET 구현에서는 bool 형식이 1바이트를 차지합니다.
7.4 변하지 않는 값: 상수
종이책 99 페이지: (주석 부분 설명)
// 상수: j는 20으로 고정
-에서-
// 상수: age는 20으로 고정
-으로-
8.2장 - 여러 가지 형식으로 변환하기: ReadLineInteger.cs
종이책 111페이지: 상단 설명
Convert 클래스의 Int32() 메서드로 묶어 줍니다.
-에서-
Convert 클래스의 ToInt32() 메서드로 묶어 줍니다.
-으로-
8.2 형식 변환-(끝 부분)-실수를 문자열로 입력받아 실수로 변환: ReadLineRealNumber.cs
종이책 111페이지: (주석 부분 설명)
//정수로 변환
-에서-
//실수로 변환
-으로-
8.4장 - 키보드의 키 값 입력받기: KeyboardInput.cs
종이책 117페이지: 하단 설명
ConsoleKeyInfo 열거형을 사용했는데요. 열거형에 대한 내용은 뒤에서 자세히 다루겠지만,
-에서-
ConsoleKeyInfo 구조체와 ConsoleKey 열거형을 사용했는데요. 구조체와 열거형에 대한 내용은 뒤에서 자세히 다루겠지만,
-으로-
9.5 문자열 연결 연산자
종이책 128페이지
문자열 연결 연산자(addition operator)의 기본 사용 예는 다음과 같습니다.
-에서-
문자열 연결 연산자(concatenation operator)의 기본 사용 예는 다음과 같습니다.
-으로-
12.2 시프트 연산자
종이책 147페이지

정수 2의 이진수인 0010을 왼쪽으로 2칸 이동하면 1000이 되어 정수 8이 됩니다. 정수 32의 이진수인 0101000을 오른쪽으로 2칸 이동하면 0001010이 되어 정수 10이 됩니다.
-에서-
정수 2의 이진수인 0010을 왼쪽으로 2칸 이동하면 1000이 되어 정수 8이 됩니다. 정수 40의 이진수인 0101000을 오른쪽으로 2칸 이동하면 0001010이 되어 정수 10이 됩니다.
-으로-
비트, 시프트 연산자와 할당 연산자 함께 사용
종이책 148페이지

주석문에 &, |, ^로 변경했습니다.
조건문: if 문과 가지치기
종이책 156페이지

조건문
-에서-
조건식
-으로-
13.6 Note
종이책 176페이지

기본 데이터 형식이 저장됩니다.
-에서-
데이터 형식의 기본값이 저장됩니다.
-으로-
15.1 ForSumEven.cs 주석 부분 설명 변경
종이책 185페이지
구구단 가로 출력 오류
종이책 193페이지

안쪽 `for` 문을 반복하면서 열을 반복하여 2부터 9까지를 먼저 반복하면서 `i`의 값인 1을 곱해서 2*1부터 9*1을 먼저 출력한 후 그 다음 행에서 3*2부터 9*2가 출력되는 형태로 구구단을 만들어 볼 수 있습니다.
-에서-
이 프로그램은 중첩된 `for` 문을 활용하여, 첫 번째 열에서는 2부터 9까지의 수를 곱하는 단을 반복하고, 각 행에서는 1부터 9까지 곱하는 값을 순차적으로 증가시키며 구구단을 가로로 출력합니다. 결과적으로, 첫 행에는 각 단의 1을 곱한 값이, 두 번째 행에는 2를 곱한 값이 출력되는 식으로, 전체 구구단이 가독성 좋게 가로로 표현됩니다.
-으로-
배열 필요성 설명 오류
종이책 216페이지

다음 샘플 코드는 학생 3명의 총점을 구합니다. 이러한 방식이라면 학생이 30명일 때는 변수를 30개 선언해야 하는데, 변수는 하나면 충분합니다. 그래서 배열이 필요한 것입니다.
-에서-
다음 예제 코드에서는 3명의 학생의 국어 점수 총합을 계산합니다. 이 방식을 활용하면, 학생 수가 30명으로 늘어날 경우 30개의 변수가 필요하게 됩니다. 이처럼 많은 변수를 관리하기 위해서는 배열의 사용이 필수적입니다
-으로-
P.224, 숫자 구분자 주석 코드 누락
종이책 224페이지

                using System;

                class DigitSeparator
                {
                    static void Main()
                    {
                        //int[] numbers = { 1, 1000, 10000, 1000000 }; 
                        int[] numbers = { 1, 1_000, 10_000, 1_000_000 };

                        foreach (int number in numbers) // 배열에 데이터가 있는만큼 반복
                        {
                            Console.WriteLine(number);
                        }
                    }
                }
                
P.225, 이진수 리터럴과 문자열 혼용
종이책 225페이지

"이진수 문자열과" => "이진수 리터럴과"
18.5 ArrahThree.cs 실행 결과 - 전자책에만 해당
종이책 238 페이지

전자책에는 실행 결과가 띄어쓰기가 잘못되어 출판되었습니다.
18.6 - 전자책에만 해당
종이책 240 페이지

전자책에는 예 문자가 깨져서 보입니다.
P.240, '또는'과 '또한'의 사용

"또는" 대신 "또한"이 문맥상 더 적절해 보입니다.
P.242, 주석 내용의 명확성
주석의 내용을 수정하였습니다.
                using System;

                class ArrayWithVarKeyword
                {
                    static void Main()
                    {
                        // 정수 형식으로 자동적으로 형식이 설정됨
                        var i = 5; // int i = 5; 
                        Console.WriteLine("i : {0}, 타입 : {1}", i, i.GetType());

                        // 문자열 형식으로 형식화됨
                        var s = "Hello";
                        Console.WriteLine("s : {0}, 타입 : {1}", s, s.GetType());

                        // 배열 형식
                        var numbers = new int[] { 1, 2, 3 };

                        // 여기서 var item은 numbers 배열의 요소의 형식, 즉 int 형식임
                        foreach (var item in numbers) 
                        {
                            Console.WriteLine("item : {0}, 타입 : {1}", item, item.GetType());
                        }
                    }
                }
                
19.9 - 전자책에만 해당
종이책 255 페이지

전자책에는 Sum이 sum으로 소문자로 잘못 표기되었습니다.
19.16
종이책 270 페이지

제 원고에는 "또만나요"로 되어 있는데, 편집 과정에서 띄어쓰기가 적용되었습니다.
21.3
종이책 281 페이지

제곱근
-에서-
거듭제곱
-으로-
21.3
종이책 282 페이지
2의 10승
-에서-
2의 10제곱
-으로-
22.2
종이책 285 페이지 - 원고에서 편집 과정에서 변경됨

데이터형식변수1
-에서-
데이터형식 변수1
-으로-
P.292, 콤마 위치

StructParameter.cs 파일에 대한 설명문을 다음으로 변경합니다.

이 예제는 두 가지 방식을 통해 `Print` 함수에 데이터를 전달합니다. 첫 번째는 일반적인 변수를 사용하는 방식이고, 두 번째는 구조체를 활용하는 방식입니다. 매개변수가 많을 경우, 구조체를 사용하여 데이터를 효율적으로 묶어 전달할 수 있으며, 이는 코드의 복잡성을 줄이고 가독성을 높이는 데 도움이 됩니다. 향후 클래스에 대해 배우면서, 여러 값을 전달할 때 주로 클래스 인스턴스를 사용하는 방법에 대해서도 알아볼 것입니다.
22.6
종이책 295 페이지

xmax
-에서-
xmas
-으로-
24.9 RandomDemo.cs
종이책 319 페이지

1 ~ 10
-에서-
1 ~ 9
-으로-
24.9 RegexReplace.cs - 전자책에만 해당
종이책 324 페이지

실행 결과의 공백이 전자책에서는 제대로 표현되지 않았습니다.
P.337, StringComparison 열거형 사용

문자열 비교하는 2가지 방법 정리에 대한 시작 설명문을 다음으로 변경합니다.

C#에서 문자열을 비교할 때, `==` 연산자는 기본적으로 대소문자를 구분합니다. 대소문자를 구분하지 않고 문자열을 비교하려면 `String.Equals()` 메서드와 `StringComparison` 열거형의 `OrdinalIgnoreCase` (또는 `InvariantCultureIgnoreCase`) 값을 활용할 수 있습니다.
P.341, 배열 이름의 일관성

(5)번 문장을 다음으로 변경합니다.

(5) 문자열은 문자의 배열을 의미합니다. `str[5]` 형태로 5번째 인덱스의 문자 하나를 구할 수 있습니다.
25.3 전자책에만 해당
종이책 346 페이지

전자책에는 \r 만 표시되었습니다.
P.363, 컬렉션 설명

컬렉션 설명 불릿 기호 문장을 다음으로 변경합니다.

* 컬렉션은 형식 안정성(Type Safety)을 유지하면서 데이터를 동적으로 관리할 수 있는 구조를 제공합니다. 즉, 크기가 동적으로 변경될 수 있어, 요소를 추가하거나 제거하는 것이 용이합니다. * 또한, 컬렉션은 데이터를 조회, 정렬, 중복 제거하는 기능뿐만 아니라, 키(Key)와 값(Value)을 쌍으로 관리하는 기능 등 다양한 유용한 기능들을 제공합니다.
P.363, Span 추가 시기
7.0 버전에서 7.X 버전으로 수정합니다.
29.2 전자책에만 해당
종이책 384 페이지

전자책에는 화살표 부분에 불필요한 공백이 추가되었습니다.
30.5
종이책 408 페이지

내림차순
-에서-
오름차순
-으로-
32.6 전자책에만 해당
종이책 447 페이지

전자책에는 ClassOne과 ClassTwo가 classOne과 classsTwo로 소문자로 잘못 표기되었습니다.
p.454
예제 제목에서 "같은 이름의 클래스로 구분" -> "같은 이름의 클래스를 구분"
38.3
종이책 507 페이지

Name 속성
-에서-
Color 속성
-으로-
p.524
"오리처럼 꽥꽥 되면" -> "오리처럼 꽥꽥 대면"
39.4
종이책 540 페이지

, num 제거해도 됩니다.
40.3
종이책 552 페이지

원고와 GitHub 소스에는 "Class와 같은 레벨로" 되어 있습니다.
40.7 전자책에만 해당
종이책 562 페이지

전자책에는 StringLength 메서드 전달 부분이 stringLength 소문자로 표현되었습니다.
42.4 PointFunctional.cs 코드 주석 부분
종이책 571 페이지

생성자의
-에서-
메서드의
-으로-
43.7 ConstructorInheritance.cs 코드 주석 부분
종이책 583 페이지

World
-에서-
Word
-으로-
43.8 설명 부분
종이책 584 페이지

sealed 클래스가
-에서-
sealed 키워드가
-으로-
44.6 소스 마지막 주석에 대한 보충 설명
종이책 599 페이지 상단 소스
다음 링크에 소스에 대한 추가 설명을 담았습니다.
virtual override 관계 보충 설명
p.608
예제에서 astoff -> castOf
p.622
"리플렉션으로 특성 어셈블리와~" -> "리플렉션으로 특정 어셈블리와"
p.631
메서드 부분에서 "이름이 같은 메서드를 여러 개 만들었고" -> "이름이 같은 메서드를 여러 개 만들고"
                ### 47.2.7. 메서드(Method; 함수; Function/Sub Procedure)

                메서드는 클래스에서 가장 자주 사용되는 구성 요소로, 클래스의 기능과 동작을 정의합니다. 자동차에서 전진(), 후진(), 좌회전()과 같은 동작이 메서드에 해당합니다. 코드에서는 메서드 오버로드를 통해 하나의 클래스 내에 동일한 이름의 메서드를 여러 개 생성할 수 있으며, 메서드 오버라이드를 통해 부모 클래스의 메서드를 새롭게 재정의할 수 있습니다.

                또한, 메서드의 매개변수 전달 방식에는 값 전달이 기본이며, `ref`, `out`, `in`, `params` 등의 키워드를 활용하여 다양하게 매개변수를 전달할 수 있습니다.
                
47장 맨 마지막
종이책 640페이지: (제일 마지막 문구)
개발 패턴들을 정리해 나갔습니다.
-에서-
개발 패턴들을 정리해 나가겠습니다.
-으로-
종이책 646 페이지 중간 소스 - 한 줄 누락
종이책 657 페이지 형식 매개변수에 대한 제약조건
1번 순서 앞에 다음 그림의 0번 순서(다음 4줄)를 먼저 실행해야 합니다.
> public interface IKs { }
> public class GoodCar { }
> public class BadCar { public BadCar(string message) { } }
> public class OfficeCamper : GoodCar, IKs { }

p.657
"①처럼 Cut 형태로" -> "①처럼 Cup 형태로"
p.662
"같은 범위(scope)를 같은 네임스페이스에서" -> "같은 범위(scope)를 갖는 네임스페이스에서"
53.2 맨 마지막
종이책 699페이지: (제일 마지막 문장)
특별한 목적의 Assert 클래스를 만들어 보았습니다.
-에서-
특별한 목적의 Assert 클래스를 사용해 보았습니다.
-으로-
p.721
예제에서 "IExplorer.exe" -> "C:\\Program Files(x86)\\Microsoft\\Edge\\Application\\msedge.exe"
p.738, p. 739
3번에서, btnWachingTV -> btnWatchingTV
p.787 중단 및 하단
github 예제 소스기준으로 볼 때, 13번째 줄의 주석에서 20자만 가져오기로 되어 있으나 실제로 각 13, 16, 27번째 줄에 있는 Substring(0, 10) 메서드의 인수는 10자까지로 되어 있습니다.
20글자만 가져오기 -> 처음 10자만 출력
손님 사용자 Anonymous (손님)
로그인 Home