C#
기초에서 활용까지! 기본기를 탄탄하게 다지는 C# 입문서
C#의 쓰임새와 기초 문법부터 컬렉션, 제네릭, LINQ, 개체 지향, 동적 형식, 비동기 프로그래밍과 같은 활용과 확장 기능까지 입문자에게 필요한 모든 것을 설명합니다.
오탈자가 발생하면 이곳에 지속적으로 업데이트 하도록 하겠습니다.
참고로, 이 페이지의 정오표는 제 사이트를 통해서 접수된 자료만 기록이 됩니다.
추가적인 정보는 출판사
도서 소개 사이트를 참고하세요.
많은 시간 여러 번의 검토를 거쳤지만, 아래와 같은 오탈자가 발생하였습니다.
책 보시는데, 불편을 드려 대단히 죄송합니다.
Main을 Main으로 바꾸고 writeline을 Writeline으로 바꾸어서 컴파일합니다.
-에서-
main을 Main으로 바꾸고 writeline을 Writeline으로 바꾸어서 컴파일합니다.
-으로-
파스칼 표기법: 접두사와 단어를 언더스코어(_)로 구분합니다.
int my_num = 0;
-에서-
파스칼 표기법: 단어를 대문자로 구분합니다.
int MyNum = 0;
-으로-
이 부분은 사실, 표기법이 문법이 아닌 스타일이라서, 큰 차이는 없지만, 아직 소문자로 시작하는 변수만을 표기하기 위해서
nynum을 구분짓기 위해서 언더스코어를 사용했지만, 좀 더 명확한 내용은 MyNum 형태로 문자와 문자를 대문자로 구분짓는게
더 좋은 표현이라고 생각하여 변경하도록 하겠습니다.
1비트
-에서-
1바이트
-으로-
bool 데이터 형식은 일반적으로 1바이트의 저장 공간을 차지합니다. 이는 8비트에 해당합니다. 그러나 CLR(Common Language Runtime)은 bool 형식의 크기를 정의하지 않으며, 각 구현체마다 다를 수 있습니다. 하지만, 일반적인 .NET 구현에서는 bool 형식이 1바이트를 차지합니다.
// 상수: j는 20으로 고정
-에서-
// 상수: age는 20으로 고정
-으로-
Convert 클래스의 Int32() 메서드로 묶어 줍니다.
-에서-
Convert 클래스의 ToInt32() 메서드로 묶어 줍니다.
-으로-
//정수로 변환
-에서-
//실수로 변환
-으로-
ConsoleKeyInfo 열거형을 사용했는데요. 열거형에 대한 내용은 뒤에서 자세히 다루겠지만,
-에서-
ConsoleKeyInfo 구조체와 ConsoleKey 열거형을 사용했는데요. 구조체와 열거형에 대한 내용은 뒤에서 자세히 다루겠지만,
-으로-
문자열 연결 연산자(addition operator)의 기본 사용 예는 다음과 같습니다.
-에서-
문자열 연결 연산자(concatenation operator)의 기본 사용 예는 다음과 같습니다.
-으로-
정수 2의 이진수인 0010을 왼쪽으로 2칸 이동하면 1000이 되어 정수 8이 됩니다. 정수 32의 이진수인 0101000을 오른쪽으로 2칸 이동하면 0001010이 되어 정수 10이 됩니다.
-에서-
정수 2의 이진수인 0010을 왼쪽으로 2칸 이동하면 1000이 되어 정수 8이 됩니다. 정수 40의 이진수인 0101000을 오른쪽으로 2칸 이동하면 0001010이 되어 정수 10이 됩니다.
-으로-
주석문에 &, |, ^로 변경했습니다.
조건문
-에서-
조건식
-으로-
기본 데이터 형식이 저장됩니다.
-에서-
데이터 형식의 기본값이 저장됩니다.
-으로-
안쪽 `for` 문을 반복하면서 열을 반복하여 2부터 9까지를 먼저 반복하면서 `i`의 값인 1을 곱해서 2*1부터 9*1을 먼저 출력한 후 그 다음 행에서 3*2부터 9*2가 출력되는 형태로 구구단을 만들어 볼 수 있습니다.
-에서-
이 프로그램은 중첩된 `for` 문을 활용하여, 첫 번째 열에서는 2부터 9까지의 수를 곱하는 단을 반복하고, 각 행에서는 1부터 9까지 곱하는 값을 순차적으로 증가시키며 구구단을 가로로 출력합니다. 결과적으로, 첫 행에는 각 단의 1을 곱한 값이, 두 번째 행에는 2를 곱한 값이 출력되는 식으로, 전체 구구단이 가독성 좋게 가로로 표현됩니다.
-으로-
다음 샘플 코드는 학생 3명의 총점을 구합니다. 이러한 방식이라면 학생이 30명일 때는 변수를 30개 선언해야 하는데, 변수는 하나면 충분합니다. 그래서 배열이 필요한 것입니다.
-에서-
다음 예제 코드에서는 3명의 학생의 국어 점수 총합을 계산합니다. 이 방식을 활용하면, 학생 수가 30명으로 늘어날 경우 30개의 변수가 필요하게 됩니다. 이처럼 많은 변수를 관리하기 위해서는 배열의 사용이 필수적입니다
-으로-
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);
}
}
}
전자책에는 실행 결과가 띄어쓰기가 잘못되어 출판되었습니다.
전자책에는 예 문자가 깨져서 보입니다.
"또는" 대신 "또한"이 문맥상 더 적절해 보입니다.
주석의 내용을 수정하였습니다.
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());
}
}
}
전자책에는 Sum이 sum으로 소문자로 잘못 표기되었습니다.
제 원고에는 "또만나요"로 되어 있는데, 편집 과정에서 띄어쓰기가 적용되었습니다.
제곱근
-에서-
거듭제곱
-으로-
데이터형식변수1
-에서-
데이터형식 변수1
-으로-
StructParameter.cs 파일에 대한 설명문을 다음으로 변경합니다.
이 예제는 두 가지 방식을 통해 `Print` 함수에 데이터를 전달합니다. 첫 번째는 일반적인 변수를 사용하는 방식이고, 두 번째는 구조체를 활용하는 방식입니다. 매개변수가 많을 경우, 구조체를 사용하여 데이터를 효율적으로 묶어 전달할 수 있으며, 이는 코드의 복잡성을 줄이고 가독성을 높이는 데 도움이 됩니다.
향후 클래스에 대해 배우면서, 여러 값을 전달할 때 주로 클래스 인스턴스를 사용하는 방법에 대해서도 알아볼 것입니다.
xmax
-에서-
xmas
-으로-
1 ~ 10
-에서-
1 ~ 9
-으로-
실행 결과의 공백이 전자책에서는 제대로 표현되지 않았습니다.
문자열 비교하는 2가지 방법 정리에 대한 시작 설명문을 다음으로 변경합니다.
C#에서 문자열을 비교할 때, `==` 연산자는 기본적으로 대소문자를 구분합니다. 대소문자를 구분하지 않고 문자열을 비교하려면 `String.Equals()` 메서드와 `StringComparison` 열거형의 `OrdinalIgnoreCase` (또는 `InvariantCultureIgnoreCase`) 값을 활용할 수 있습니다.
(5)번 문장을 다음으로 변경합니다.
(5) 문자열은 문자의 배열을 의미합니다. `str[5]` 형태로 5번째 인덱스의 문자 하나를 구할 수 있습니다.
전자책에는 \r 만 표시되었습니다.
컬렉션 설명 불릿 기호 문장을 다음으로 변경합니다.
* 컬렉션은 형식 안정성(Type Safety)을 유지하면서 데이터를 동적으로 관리할 수 있는 구조를 제공합니다. 즉, 크기가 동적으로 변경될 수 있어, 요소를 추가하거나 제거하는 것이 용이합니다.
* 또한, 컬렉션은 데이터를 조회, 정렬, 중복 제거하는 기능뿐만 아니라, 키(Key)와 값(Value)을 쌍으로 관리하는 기능 등 다양한 유용한 기능들을 제공합니다.
전자책에는 화살표 부분에 불필요한 공백이 추가되었습니다.
내림차순
-에서-
오름차순
-으로-
전자책에는 ClassOne과 ClassTwo가 classOne과 classsTwo로 소문자로 잘못 표기되었습니다.
Name 속성
-에서-
Color 속성
-으로-
, num 제거해도 됩니다.
원고와 GitHub 소스에는 "Class와 같은 레벨로" 되어 있습니다.
전자책에는 StringLength 메서드 전달 부분이 stringLength 소문자로 표현되었습니다.
생성자의
-에서-
메서드의
-으로-
World
-에서-
Word
-으로-
sealed 클래스가
-에서-
sealed 키워드가
-으로-
개발 패턴들을 정리해 나갔습니다.
-에서-
개발 패턴들을 정리해 나가겠습니다.
-으로-
1번 순서 앞에 다음 그림의 0번 순서(다음 4줄)를 먼저 실행해야 합니다.
> public interface IKs { }
> public class GoodCar { }
> public class BadCar { public BadCar(string message) { } }
> public class OfficeCamper : GoodCar, IKs { }
특별한 목적의 Assert 클래스를 만들어 보았습니다.
-에서-
특별한 목적의 Assert 클래스를 사용해 보았습니다.
-으로-