C sharp(C#) 알아보기 1장 - 환경 설치, 데이터 타입
Why C#?
이 포스트는 .NET 유튜브 채널의 C# for Beginners
코스를 수강하면서 만든 포스트입니다. (https://www.youtube.com/playlist?list=PLdo4fOcmZ0oULFjxrOagaERVAMbmG20Xe)
포스트에 작성한 코드는 제 깃헙에 있습니다.(https://github.com/momo1108/csharpstudy)
이 포스트와 이후 몇개의 포스트들은 OP.GG Desktop 앱을 보고 영감을 받아 진행해보고 싶은 프로젝트의 기반이 될 .NET 을 사용하기 위해 마이크로소프트 .NET 팀 유튜브의 튜토리얼을 보며 공부한 내용을 정리한 글이다.
.NET 의 전용 프로그래밍 언어가 C# 이기 때문에 필연적으로 공부를 하려고 한다.
내가 로스트아크 게임을 즐겨하는지라 비슷한 서비스를 만들어보고 싶어서 치는 발버둥…
이번 글에서는 환경 설치와 데이터 타입 등을 알아보도록 하자.
Dotnet 설치
설치는 다음 링크(https://dotnet.microsoft.com/ko-kr/download)에서 진행하면 된다.
참고로 내가 설치한 버전은 .NET 8.0
버전이다.
Dotnet이란?
.NET is a free, open-source & cross-platform development platform.
Command Lang Tool use to create project, run applications, do anything you wanna do with dotnet.
You get this one entry point CLI, one entry point application for running, testing, making new application.
간단히 말하면 C# 프로젝트를 생성, 실행 등 다양한 것들을 할 수 있는 커맨드 도구모음 같은(?) 것이다.
특징
- Free
- Works & runs on Linux, Mac, Windows
- Programming languages & libraries
사용 언어
- C# (OOP)
- F# (Functional Programming) and more
개발 도구
- Visual Studio
- Visual Studio Code
개발 가능 서비스
- Web, Mobile and desktop Application
- Cloud
- Microservices
.NET vs .NET Framework
|.NET|.NET Framework| |:—:|:—:| |Runs on Linux, macOS, Windows|Only runs on Windows| |Open-source & accepts contributions from community|Source code available but does not accept contributions| |All the innovation happens here! Supports more application types and delivers higher performance|Security & reliability bug fixes only| |Not shipped with operating system|Included in Windwos & updated by Windows updates| |Recommended for new development||
.NET framework 는 MS 초기의 상품이고, .NET은 현대화된 버전이다.
버전 정보를 봤을 때 4.8.1 버전 이하이면 .NET Framekwork 이고, 5 버전 이상이면 .NET 이다.
간단한 샘플 코드를 살펴보자.
1
2
3
4
5
6
Console.WriteLine("What is your name?");
var name = Console.ReadLine();
var currentDate = DateTime.Now;
Console.WriteLine($"{Environment.NewLine}Hello, {name}, it's {currentDate:d}!");
Console.Write($"{Environment.NewLine}Press any key to exit...");
Console.ReadKey(true); // true 사용 시 누른 키는 출력되지 않음
프로젝트에 패키지 추가하기
.NET의 패키지 매니져인 Nuget(누겟)을 사용한다.
공식 홈페이지(https://www.nuget.org/)
npm과 같이 인스톨 코드를 제공한다.
예시) dotnet add package PasswordGenerator --version 2.1.0
코드를 복사한 후 터미널을 켜고 프로젝트 폴더 경로에서 실행한다.
설치한 패키지를 사용해보자.
1
2
3
4
5
6
7
8
9
10
using PasswordGenerator;
var pwd = new Password();
var password = pwd.Next();
Console.WriteLine(password);
var passwords = pwd.NextGroup(10);
foreach (var p in passwords) {
Console.WriteLine(p.ToString());
}
C# 프로젝트 생성
간단한 C# 프로젝트는 dotnet 으로 만들 수 있다.
1
2
dotnet new # 생성가능 프로젝트 확인
dotnet new console # 출력용 샘플 프로젝트
구성요소
- obj 폴더
- helloworld.csproj
- Program.cs : entry point. actual code.
프로젝트 실행
With Dotnet
1
dotnet start
명령어 실행 시 Program.cs 가 실행될 수 있는 무언가로 컴파일된 후 실행된다.(bin 폴더가 생성됨)
With VSCode
1
code .
Run > Run without Debugging (ctrl + F5) (C# Dev Kit extension 필요)
VSCode 내에서도 dotnet run
사용 가능
String
Character들의 열(문자열)
double quot("
)로 감싸짐.
String Interpolation(문자열 보간)
String Literal안의 내용을 대체할 수 있는 방법
1
2
3
4
5
string testName = "Hyechan";
string testString = $"My name is {testName}";
Console.WriteLine(testString);
Console.WriteLine("My name is " + testName);
Attributes
첫 문자가 대문자로 시작한다
- Trim()
- Removes all leading and trailing white-space characters from the current string.
1
2
string test = " fewaniof ";
Console.WriteLine(test.Trim());
- Replace(old, new)
- Returns a new string in which all occurrences of a specified Unicode character in this instance are replaced with another specified Unicode character.
- Contain(value) : bool
- Returns a value indicating whether a specified substring occurs within this string.
- ToUpper()
- Returns a copy of this string converted to uppercase.
- Length
- Gets the number of characters in the current string object.
- StartsWith(value) : bool
- Determines whether this string instance starts with the specified character.
Numbers
int
Represents a 32-bit signed integer.(첫번째 비트는 부호, 나머지 31비트가 크기. 2^31
즉 -2,147,483,648 ~ 2,147,483,647
)
1
2
3
4
int a = 18;
int b = 6;
int c = a + b;
Console.WriteLine($"The answer is {c}");
라떼참조) 위처럼 바로 코드를 작성할 수 있는 기능을
Top-Level Statement
라고 한다. C sharp 에는 불과 몇년 전에 출시된 기능이다. 이 기능이 있기 전에는 main function 내부에서 이런것들을 해야만 했다.
long
Represents a 64-bit signed integer.
잘못된 예시(a+b 연산 자체는 int 로서 이루어진다)
1
2
3
4
int a = 2100000000;
int b = 2100000000;
long c = a + b;
Console.WriteLine($"The answer is {c}");
정정 예시(Type Casting)
1
2
3
4
int a = 2100000000;
int b = 2100000000;
long c = (long)a + (long)b;
Console.WriteLine($"The answer is {c}");
checked 함수(Overflow 발생 시 Exception 발생)
1
2
3
4
int a = 2100000000;
int b = 2100000000;
long c = checked(a + b);
Console.WriteLine($"The answer is {c}");
double
Represents a double-precision floating-point number.
C sharp 에서 소수 중에서는 double 타입이 natural type
이다.
1
2
3
4
double a = 42.1; // natural type
double b = 38.2;
double c = a + b;
Console.WriteLine($"The answer is {c}");
1
2
3
4
int a = (int)42.8;
int b = (int)38.2;
long c = checked(a + b);
Console.WriteLine($"The answer is {c}");
float
Represents a single-precision floating-point number. F
라는 Suffix(접미사)가 필요하다.
1
2
3
4
double a = 42.1;
float b = 38.2F;
double c = a + b;
Console.WriteLine($"The answer is {c}");
위 코드의 실행 결과 : 80.30000076293945
80.3 뒤의 값들은 어디서 나온걸까?
위 같은 연산에서 우리가 원하는 결과를 보기 위해서는 어떤 타입을 사용해야 할까?
decimal
Represents a decimal floating-point number.
M
이라는 Suffix가 필요하다.
1
2
3
4
decimal a = 42.1M; // explicit type
decimal b = 38.2M;
decimal c = a + b;
Console.WriteLine($"The answer is {c}");
What is Precision?
float는 single precision을 사용한다고 적혀있고, double은 double precision을 사용한다고 적혀있다.
이는 따로 알아보고 정리하자.