dev
C#
C#

Wonny (워니)·생성일 2022년 04월 06일 09:16·마지막 수정일 2022년 04월 07일 08:19
About C#
- Microsoft에서 만듦
- 객체 지향 언어
Hello World!
Console.WriteLine("Hello World!"); // Hello World!
Console.Write("Hello");
Console.Write(" ");
Console.Write("World!");
// Hello World!
Comment
// one line comment
/*
this
is
multiline comment
*/
Types
string name = "wonny";
char firstWord = 'w';
int count = 4;
decimal pie = 3.14m;
bool isTrue = true;
// array
string[] items = new items[3]; // 길이가 3인 배열 생성
int[] numbers = { 1, 2, 3 };
Literal
// string literal
Console.WriteLine("Hi");
// char literal
Console.WriteLine('b');
// int literal
Console.WriteLine(123);
// decimal literal
// m or M are called a literal suffix
Console.WriteLine(12.3m);
Console.WriteLine(12.3M);
// bool literal
Console.WriteLine(true);
Variable
string name = "wonny";
Console.WriteLine(name);
string firstName;
Console.WriteLine(firstName); // error!
// error CS0165: Use of unassigned local variable 'firstName'
// 변수 할당 전에 값을 읽으려고 하면 에러남
암시적 타입 변수: var
var message = "Hello World!";
var message; // error!
// error CS0818: Implicitly-typed variables must be initialized
// var 키워드 사용 시 반드시 변수를 초기화 해야 함
- var 키워드를 사용하여 변수를 선언하면 C# 컴파일러가 타입을 추론하여 데이터 타입 지정
- 다른 언어의
var
키워드랑 다르게 컴파일러가 정적으로 데이터 타입을 지정해서 변수가 선언될 때 정해진 타입으로 고정되고, 이후에 데이터 타입 변경이 불가능 - C# 커뮤니티에서 명시적으로 타입을 지정하지 않고
var
키워드를 많이 쓰는 이유- 변수를 초기화할 때 데이터 타입을 명확하게 알 수 없는 상황이 있음 (e.g. 나중에 작성하게 되는 코드에 따라 정해지는 경우)
- 새로운 커스텀 데이터 타입을 생성할 수도 있고 예측 가능한 이름을 미리 지정하지 못할 수도 있음
String Formatting
이스케이프 문자 시퀀스
\"
: 큰따옴표\n
: 줄바꿈\t
: 탭\\
: 백슬래쉬\u
: 유니코드 (UTF-16)
Console.WriteLine("Hello\nWorld!");
// Hello
// World!
// Kon'nichiwa World
Console.WriteLine("\u3053\u3093\u306B\u3061\u306F World!"); // こんにちは World!
축자 문자열 리터럴 (Verbatim String Literal)
공백이나 특수 문자를 이스케이프 문자 시퀀스 없이 쓸 수 있게 해주는 것
Console.WriteLine(@" c:\source\repos
(this is where your code goes)");
// c:\source\repos
// (this is where your code goes)
Console.WriteLine(@"Wonny say ""hi!"""); // Wonny say "hi!"
문자열 보간
템플릿과 보간 표현식을 사용하여 하나의 리터럴 문자열에 여러 변수를 결합하는 것
string firstName = "Bob";
string greeting = "Hello";
Console.WriteLine($"{greeting} {firstName}!"); // Hello Bob!
verbatim string literal과 같이 쓸 수 있다.
string projectName = "First-Project";
Console.WriteLine($@"C:\Output\{projectName}\Data");
// result:
// C:\Output\First-Project\Data
연산자
int sum = 7 + 5; // 12
int difference = 7 - 5; // 2
int product = 7 * 5; // 35
int quotient = 7 / 5; // 1
int modulus = 7 % 5; // 2
decimal decimalQuotient = 7.0m / 5; // 1.4
decimal decimalQuotient = 7 / 5; // 1
decimal decimalQuotient = (decimal)7 / 5; // 1.4
// compound assignment operator
int value = 0;
value = value + 5; // 5
value += 5; // 10
value++; // 11
int value = 1;
value++;
Console.WriteLine(value); // 2
Console.WriteLine(value++); // 2
Console.WriteLine(value); // 3
Console.WriteLine(++value); // 4
Method
stateful method vs stateless method
// stateful method (instance method)
// 메모리에 값을 저장하거나 업데이트하는 식으로 어플리케이션의 상태를 수정하는 메서드
var dice = new Random().Next(10);
// stateless method (static method)
// 저장된 어떤 값을 참조하는 것 없이 동작할 수 있는 메서드
Console.WriteLine("Hi");
overloaded method
여러 메서드 시그니처로 정의할 수 있음
Random dice = new Random();
int roll1 = dice.Next();
int roll2 = dice.Next(101);
int roll3 = dice.Next(50, 101);
if statement
Random dice = new Random();
int roll1 = dice.Next(1, 7);
int roll2 = dice.Next(1, 7);
int roll3 = dice.Next(1, 7);
int total = roll1 + roll2 + roll3;
Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");
if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3))
{
if ((roll1 == roll2) && (roll2 == roll3))
{
Console.WriteLine("You rolled triples! +6 bonus to total!");
total += 6;
}
else
{
Console.WriteLine("You rolled doubles! +2 bonus to total!");
total += 2;
}
}
if (total >= 16)
{
Console.WriteLine("You win a new car!");
}
else if (total >= 10)
{
Console.WriteLine("You win a new laptop!");
}
else if (total == 7)
{
Console.WriteLine("You win a trip for two!");
}
else
{
Console.WriteLine("You win a kitten!");
}
foreach statement
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = 0;
foreach (int number in numbers)
{
sum += number;
}
Console.WriteLine(sum); // 15